我在 Jenkins 工作,旨在构建多个 Docker 容器镜像和图表。我希望这项工作检查 git 树的差异,以了解是否应该构建新版本的图像。
最初我有 Jenkins 版本号,然后我使用 currentBuild 运行此函数以递归搜索以前的版本。
def findBuildByNumber (build, buildNo) {
if (build == null) {
error "FATAL: Called with null searching for $buildNo"
}
if (build.number == buildNo) {
return build
}
return findBuildByNumber (build.getPreviousBuild(), buildNo)
}
buildFound = findBuildByNumber(currentBuild, buildNo)
此代码返回先前构建的
build
对象,现在我想知道其中设置了什么 GIT_COMMIT
变量。
buildFound.buildVariables.GIT_COMMIT
和 buildFound.getBuildVariables()?.GIT_COMMIT
都给出 null。在此对象上调用 dump()
会产生较差的输出:
org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper@5d8bc8d0
externalizableId=devops/arc/main#125
currentBuild=false
如何访问特定构建的构建变量(通过编号可知),在同一作业中运行了什么?
您可以访问已完成构建的参数 (
build.getAction(ParametersAction.class).getParameter('PARAM_NAME')
),但不能访问其环境变量。您可以参考 build.xml
查看实际保存到磁盘的内容。
在您的情况下,您可以访问 scm
build.getActions(hudson.plugins.git.util.BuildData.class)[0].getLastBuiltRevision().getSha1String()
。如果您有多个结账,您可能需要选择使用哪个 BuildData
,而不仅仅是 [0]
。