如何在 Jenkins 声明式管道中设置 PATH
Posted
技术标签:
【中文标题】如何在 Jenkins 声明式管道中设置 PATH【英文标题】:How to set PATH in Jenkins Declarative Pipeline 【发布时间】:2017-08-31 09:56:08 【问题描述】:在 Jenkins 脚本化管道中,您可以像这样设置 PATH 环境变量:
node
git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'
withEnv(["PATH+MAVEN=$tool 'M3'/bin"])
sh 'mvn -B verify'
请注意 PATH+MAVEN,如此处https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-withenv-code-set-environment-variables 所述:
要设置的环境变量列表,每个都在表单中 VARIABLE=value 或 VARIABLE= 取消设置其他定义的变量。你 也可以使用语法 PATH+WHATEVER=/something 前置 /something 到 $PATH。
但我没有找到如何使用环境语法在声明性管道中执行此操作(如此处所述:https://jenkins.io/doc/pipeline/tour/environment)。
environment
DISABLE_AUTH = 'true'
DB_ENGINE = 'sqlite'
理想情况下,我想更新 PATH 以在我的所有阶段使用自定义工具。
【问题讨论】:
【参考方案1】:environment
部分是可能的:
pipeline
agent label 'docker'
environment
PATH = "/hot/new/bin:$env.PATH"
stages
stage ('build')
steps
echo "PATH is: $env.PATH"
有关信息,请参阅this answer。
【讨论】:
这比withEnv(['PATH+WHATEVER=...'])
乱七八糟的好多了!
这几乎可以工作,但PATH
在环境块中为空,所以当我使用它时,我最终只得到/hot/new/bin
而没有别的。
如果我将它设置在舞台级别而不是管道,这将有效。
@Jeremy 它必须是 $env.PATH
此方法不会在 shell 内设置 PATH 变量。尝试运行 sh 'echo $PATH',它不会有 /hot/new/bin 部分。 echo 步骤通过 Jenkins 的 env 插值获取路径变量。如果您尝试调用命令,例如由 python pip 安装的命令,此解决方案不适用于将 $HOME/.local/bin 附加到 PATH。【参考方案2】:
作为一种解决方法,您可以定义一个环境变量并在sh
步骤中使用它:
pipeline
environment
MAVEN_HOME = tool('M3')
stages
stage(Maven')
sh '$MAVEN_HOME/bin/mvn -B verify'
【讨论】:
tool
函数定义在哪里?
是预定义的,但是需要在全局设置中配置工具:jenkins.io/doc/pipeline/steps/workflow-basic-steps/…
你能做一些类似 MAVEN_HOME = powershell("doSomething") 的事情吗 - doSomething 是系统路径上定义的函数吗?我正在尝试调用将返回 python 位置的 powershell 脚本。
我看到有一个powershell
函数,所以powershell(script = "doSomething", returnStdout = true)
可能有效,但我从未尝试过。【参考方案3】:
查看以下链接,这说明了如何配置您的工具。 使用声明式管道会有些不同,但总体而言更容易理解。
declarative-maven-project
【讨论】:
【参考方案4】:仅允许在预安装的全局工具中使用管道中的工具部分。有些工具是插件提供的,如果不存在,恐怕不能通过管道工具声明使用环境设置。
我希望是错的!
【讨论】:
在下面查看我的答案以上是关于如何在 Jenkins 声明式管道中设置 PATH的主要内容,如果未能解决你的问题,请参考以下文章
如何获取/获取 Jenkins 管道中设置的环境变量到我们的 maven pom.xml