如何在Jenkins声明管道中设置PATH

Vin*_*ent 26 path environment-variables jenkins jenkins-pipeline

在Jenkins脚本管道中,您可以像这样设置PATH env变量:

node {
   git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'
   withEnv(["PATH+MAVEN=${tool 'M3'}/bin"]) {
      sh 'mvn -B verify'
   }
}
Run Code Online (Sandbox Code Playgroud)

请注意PATH + MAVEN,如此处所述https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-withenv-code-set-environment-variables:

要设置的环境变量列表,每个变量的形式为VARIABLE = value或VARIABLE =以取消设置否则定义的变量.您也可以使用语法PATH + WHATEVER =/something来预先添加$ PATH.

但我没有在使用环境语法的声明性管道中找到如何做到这一点(如下所述:https://jenkins.io/doc/pipeline/tour/environment).

environment {
    DISABLE_AUTH = 'true'
    DB_ENGINE    = 'sqlite'
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想更新PATH以便为我的所有阶段使用自定义工具.

Vad*_*tov 46

这是可能的environment部分:

pipeline {
  agent { label 'docker' }
  environment {
    PATH = "/hot/new/bin:$PATH"
  }
  stages {
    stage ('build') {
      steps {
        echo "PATH is: $PATH"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有关信息,请参阅此答案.

  • @Jeremy 它需要是 ${env.PATH} (3认同)
  • 此方法不会在 shell 内设置 PATH 变量。尝试运行 sh 'echo $PATH',它不会有 /hot/new/bin 部分。echo 步骤通过 Jenkins 的 env 插值获取路径变量。如果您尝试调用命令,例如由 python pip 安装的命令,则此解决方案不适用于将 $HOME/.local/bin 附加到 PATH。 (3认同)
  • 这几乎可以工作,但是`PATH`在环境块中是空的,所以当我使用它时,我最终只得到`/ hot/new/bin`而没有别的. (2认同)
  • 如果我将它设置在阶段级别而不是管道级别,这会起作用。 (2认同)

Dan*_*dei 5

作为解决方法,您可以定义一个环境变量并在以下sh步骤中使用它:

pipeline {
    environment {
        MAVEN_HOME = tool('M3')
    }

    stages {
        stage(Maven') {
           sh '${MAVEN_HOME}/bin/mvn -B verify'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Wim*_*een 1

检查以下链接,这解释了如何配置您的工具。使用声明性管道,事情会变得有点不同,但总的来说,它更容易理解。

声明式 Maven 项目