Git插件(默认情况下)安装在我的Jenkins中,但是我无法获得应该由Git插件传入的env变量。我正在寻找:
GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL
等。我正在使用管道作业项目,该管道作业项目使用以下代码指向带有Jenkins文件的Github存储库
stage 'PushToProd'
node {
git url: "https://github.com/username/fakeurl.git"
echo "Starting PushToProd"
sh 'printenv'
sh 'env'
sh 'echo $BRANCH_NAME'
sh 'echo $GIT_COMMIT'
}
当我使用env
或printenv
而不是Github插件时,我获得了大量的环境变量。
关于如何将Git env变量传递给作业的任何提示?
更新:当我使用Freestyle项目并使用shell步骤echo $GIT_COMMIT
时,我能够轻松获取Git env变量。仍然想知道如何使用Jenkinsfile + Pipeline作业项来使其工作。
答案 0 :(得分:11)
由于缺少双引号,缺少大括号和缺少env.
,这项工作无法完成:
sh 'echo $BRANCH_NAME'
这在Jenkinsfile中按预期工作:
node {
sh "echo ${env.BRANCH_NAME}"
}
答案 1 :(得分:5)
因此,任何偶然发现此Stackoverflow问题的人都应该知道这是一个 bug 与当前的管道情况。
这里有很多讨论:https://issues.jenkins-ci.org/browse/JENKINS-35230
基本上,由于与管道的某些不兼容性,插件无法正确添加环境变量。
答案 2 :(得分:3)
版本3。3。1(2017年6月23日)
答案 3 :(得分:1)
你可能需要这样做。
node {
def branch = env.BRANCH_NAME
sh "My branch name: ${branch}"
}
答案 4 :(得分:1)
我发现的大多数管道示例都将代码包装在“节点”闭包中,由于某种原因,它不允许Jenkins Git插件填充环境变量。
但是,如果您将它包装成这样,则可以正确设置环境变量:
pipeline {
agent {
label ('<AGENT>')
}
stages {
stage('<STAGE>') {
steps {
<CODE>
}
}
}
}
我不确定哪些关闭在这里至关重要,但这种格式允许我访问env变量,例如env.GIT_COMMIT