如何从执行重建的位置获取内部版本号?
How do I get the build number from where I executed a rebuild?
当我从构建页面单击 "rebuild" 时,jenkins 会重建并运行一个新作业 - 一个具有新 jenkins 内部版本号的新作业。
如何获取执行重建的作业的内部版本号?
我说的不是以前的内部版本号。
假设我在构建 10。我转到构建 5 并单击重建。我如何从管道内部 that build number (5) 就像 env.BUILD_NUMBER
?
我假设您正在使用 Groovy 管道并且已经知道全局变量(请参阅全局变量参考)。
currentBuild
变量有一个字段 rawBuild
return 一个 hudson.model.Run 对象
- 调用
rawBuildObject#getCauses()
或 rawBuildObject#getCauses()
和 return 一些 Cause 对象。
脚本如下:
node {
stage('test advance script') {
echo "current build number: ${currentBuild.number}"
echo "previous build number: ${currentBuild.previousBuild.getNumber()}"
def causes = currentBuild.rawBuild.getCauses()
echo "causes: ${causes}"
def rebuildCause0 = currentBuild.rawBuild.getCause(com.sonyericsson.rebuild.RebuildCause)
echo "rebuildCause0: ${rebuildCause0}"
echo "rebuild up number: ${rebuildCause0.getUpstreamBuild()}"
}
}
但是正如我们在聊天中讨论的那样,Rebuilder 插件以错误的方式使用 CauseAction
。如果固定为this,控制台输出应该是:
current build number: 72
previous build number: 71
causes: [hudson.model.Cause$UserIdCause@679c1066, job/DMP/job/test-pipeline/63[hudson.model.Cause$UserIdCause@679c1066]]
rebuildCause0: job/DMP/job/test-pipeline/63[hudson.model.Cause$UserIdCause@679c1066]
rebuild up number: 63
Remember to scriptApproval
when you see errors like this:
Scripts not permitted to use method hudson.model.Run
getCauses. Administrators can decide whether to approve or reject this
signature.
假设您可以 curl 自己的 jenkins 构建:
def getOriginalRebuildNum(String jobUrl = "${JOB_URL}"){
def urlJsonPath
def buildNumber
def result
ansiColor('xterm') {
try {
buildNumber = "${BUILD_NUMBER}"
urlJsonPath = "${JOB_URL}/${buildNumber}/api/json"
while (!buildNumber.isEmpty()) {
result = buildNumber
buildNumber = sh(
script:
"""
curl -s $urlJsonPath \
| jq -r '.actions[]
| select(."_class" == "hudson.model.CauseAction") .causes[]
| select(.upstreamBuild != null).upstreamBuild'
""",
returnStdout: true).trim()
urlJsonPath = "${JOB_URL}/${buildNumber}/api/json"
}
echo "Original Build: ${JOB_URL}/${result}/"
}
catch (err) {
"Error: Could not retrieve original Build Number from ${urlJsonPath} - $err"
result = "${BUILD_NUMBER}"
}
}
return result
}
当我从构建页面单击 "rebuild" 时,jenkins 会重建并运行一个新作业 - 一个具有新 jenkins 内部版本号的新作业。
如何获取执行重建的作业的内部版本号?
我说的不是以前的内部版本号。
假设我在构建 10。我转到构建 5 并单击重建。我如何从管道内部 that build number (5) 就像 env.BUILD_NUMBER
?
我假设您正在使用 Groovy 管道并且已经知道全局变量(请参阅全局变量参考)。
currentBuild
变量有一个字段rawBuild
return 一个 hudson.model.Run 对象- 调用
rawBuildObject#getCauses()
或rawBuildObject#getCauses()
和 return 一些 Cause 对象。
脚本如下:
node {
stage('test advance script') {
echo "current build number: ${currentBuild.number}"
echo "previous build number: ${currentBuild.previousBuild.getNumber()}"
def causes = currentBuild.rawBuild.getCauses()
echo "causes: ${causes}"
def rebuildCause0 = currentBuild.rawBuild.getCause(com.sonyericsson.rebuild.RebuildCause)
echo "rebuildCause0: ${rebuildCause0}"
echo "rebuild up number: ${rebuildCause0.getUpstreamBuild()}"
}
}
但是正如我们在聊天中讨论的那样,Rebuilder 插件以错误的方式使用 CauseAction
。如果固定为this,控制台输出应该是:
current build number: 72
previous build number: 71
causes: [hudson.model.Cause$UserIdCause@679c1066, job/DMP/job/test-pipeline/63[hudson.model.Cause$UserIdCause@679c1066]]
rebuildCause0: job/DMP/job/test-pipeline/63[hudson.model.Cause$UserIdCause@679c1066]
rebuild up number: 63
Remember to
scriptApproval
when you see errors like this:
Scripts not permitted to use method hudson.model.Run getCauses. Administrators can decide whether to approve or reject this signature.
假设您可以 curl 自己的 jenkins 构建:
def getOriginalRebuildNum(String jobUrl = "${JOB_URL}"){
def urlJsonPath
def buildNumber
def result
ansiColor('xterm') {
try {
buildNumber = "${BUILD_NUMBER}"
urlJsonPath = "${JOB_URL}/${buildNumber}/api/json"
while (!buildNumber.isEmpty()) {
result = buildNumber
buildNumber = sh(
script:
"""
curl -s $urlJsonPath \
| jq -r '.actions[]
| select(."_class" == "hudson.model.CauseAction") .causes[]
| select(.upstreamBuild != null).upstreamBuild'
""",
returnStdout: true).trim()
urlJsonPath = "${JOB_URL}/${buildNumber}/api/json"
}
echo "Original Build: ${JOB_URL}/${result}/"
}
catch (err) {
"Error: Could not retrieve original Build Number from ${urlJsonPath} - $err"
result = "${BUILD_NUMBER}"
}
}
return result
}