无法使用 Groovy Jenkinsfile 读取 Git 环境变量 Jenkins
Not able to read Git Environment variables Jenkins using Groovy Jenkinsfile
Git 插件已安装(默认情况下)在我的 Jenkins 中,但我无法获取本应由 Git 插件传入的环境变量。我在寻找:
GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL
等我正在使用指向 Github 存储库的流水线作业项,Jenkinsfile 的代码如下
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 变量的任何提示?
Update:当我使用 Freestyle 项目并有一个 shell 步骤使用 echo $GIT_COMMIT
。仍然想知道如何使用 Jenkinsfile + 管道作业项让它工作。
您可能需要做这样的事情。
node {
def branch = env.BRANCH_NAME
sh "My branch name: ${branch}"
}
由于缺少双引号、缺少大括号和缺少 env.
:
,这将不起作用
sh 'echo $BRANCH_NAME'
这在 Jenkinsfile 中按预期工作:
node {
sh "echo ${env.BRANCH_NAME}"
}
因此,任何其他偶然发现此 Whosebug 问题的人都应该知道这是一个 错误 当前管道情况。
这里有很多讨论:https://issues.jenkins-ci.org/browse/JENKINS-35230
本质上,由于与管道的某些不兼容,插件无法正确添加环境变量。
这已在 Git plugin 3.3.1
中修复
版本 3.3.1(2017 年 6 月 23 日)
- 在控制台日志中打印第一行提交消息 (JENKINS-38241)
- 允许 scm 步骤 return 修订 (JENKINS-26100)
- 即使启用了 CSRF,也不需要 POST 到 /git/notifyCommit 的碎屑 (JENKINS-34350)
- 修复管道库使用中的凭据跟踪空指针异常 (JENKINS-44640)
- 修复 git 参数使用中的凭据跟踪空指针异常 (JENKINS-44087)
我发现的大多数管道示例都将代码包装在 "node" 闭包中,出于某种原因,它不允许 Jenkins Git 插件填充环境变量。
但是,如果您将其包装成这样,则环境变量设置正确:
pipeline {
agent {
label ('<AGENT>')
}
stages {
stage('<STAGE>') {
steps {
<CODE>
}
}
}
}
我不确定这里哪些闭包是至关重要的,但这种格式允许我访问环境变量,例如 env.GIT_COMMIT
Git 插件已安装(默认情况下)在我的 Jenkins 中,但我无法获取本应由 Git 插件传入的环境变量。我在寻找:
GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL
等我正在使用指向 Github 存储库的流水线作业项,Jenkinsfile 的代码如下
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 变量的任何提示?
Update:当我使用 Freestyle 项目并有一个 shell 步骤使用 echo $GIT_COMMIT
。仍然想知道如何使用 Jenkinsfile + 管道作业项让它工作。
您可能需要做这样的事情。
node {
def branch = env.BRANCH_NAME
sh "My branch name: ${branch}"
}
由于缺少双引号、缺少大括号和缺少 env.
:
sh 'echo $BRANCH_NAME'
这在 Jenkinsfile 中按预期工作:
node {
sh "echo ${env.BRANCH_NAME}"
}
因此,任何其他偶然发现此 Whosebug 问题的人都应该知道这是一个 错误 当前管道情况。
这里有很多讨论:https://issues.jenkins-ci.org/browse/JENKINS-35230
本质上,由于与管道的某些不兼容,插件无法正确添加环境变量。
这已在 Git plugin 3.3.1
中修复版本 3.3.1(2017 年 6 月 23 日)
- 在控制台日志中打印第一行提交消息 (JENKINS-38241)
- 允许 scm 步骤 return 修订 (JENKINS-26100)
- 即使启用了 CSRF,也不需要 POST 到 /git/notifyCommit 的碎屑 (JENKINS-34350)
- 修复管道库使用中的凭据跟踪空指针异常 (JENKINS-44640)
- 修复 git 参数使用中的凭据跟踪空指针异常 (JENKINS-44087)
我发现的大多数管道示例都将代码包装在 "node" 闭包中,出于某种原因,它不允许 Jenkins Git 插件填充环境变量。
但是,如果您将其包装成这样,则环境变量设置正确:
pipeline {
agent {
label ('<AGENT>')
}
stages {
stage('<STAGE>') {
steps {
<CODE>
}
}
}
}
我不确定这里哪些闭包是至关重要的,但这种格式允许我访问环境变量,例如 env.GIT_COMMIT