我正在尝试在Jenkins流水线脚本中读取一些由Git插件设置的环境变量,但似乎它们没有被设置,因为当我尝试在脚本中使用时,其值为空字符串,并且如果我使用sh 'printenv',我可以看到它们没有被设置。
可能我错过了什么,但我找不到原因。
有任何想法吗?
我正在尝试在Jenkins流水线脚本中读取一些由Git插件设置的环境变量,但似乎它们没有被设置,因为当我尝试在脚本中使用时,其值为空字符串,并且如果我使用sh 'printenv',我可以看到它们没有被设置。
可能我错过了什么,但我找不到原因。
有任何想法吗?
GIT_REVISION = sh( script: 'git rev-parse HEAD', returnStdout: true )
如果您像我一样使用checkout scm
,您会注意到没有任何GIT相关的环境变量可以帮助您,因此在这种情况下,您需要执行以下操作:
scm_variables = checkout scm
echo scm_variables.get('GIT_COMMIT')
由于Git插件对声明式脚本的支持良好,您可以使用声明式脚本获取Git环境变量并将其设置为可供脚本部分使用。
因此,简而言之:
pipeline {
environment {
gitCommit = "${env.GIT_COMMIT}"
}
agent {
label <agent>
}
stages {
stage('SetEnvironmentProperties') {
agent {
label <agent>
}
steps {
env.setProperty("GIT_COMMIT", "$gitCommit")
}
}
}
}
node(<agent>) {
echo "Using Git Commit Hash ${env.GIT_COMMIT}"
}
这绝对是一种hack方法,但它对我们有效。我们希望问题能够很快得到解决,这样我们就可以完全删除声明性部分。
我相信这个方法的原理是创建了一个Declarative: Checkout SCM stage
,使得环境变量在后续的流水线阶段中可以被访问。我认为这相当于answer中所描述的内容。我不太清楚的是为什么重置它们会将它们保留到脚本化阶段。这就是为什么这是一种hack方法的原因...