如何检索 Jenkins 中最新成功构建的 build_id?
How to retrieve build_id of latest successful build in Jenkins?
一般来说,为了获得最新成功构建的工件,我在下面 URL:
上做了一个 wget
http://jenkins.com/job/job_name/lastSuccessfulBuild/artifact/artifact1/jenkins.txt
有没有办法,我可以在 lastSuccessfulBuild
上执行 wget
并获得如下所示的 build_id
?
build_id=`wget http://jenkins.p2pcredit.local/job/job_name/lastSuccessfulBuild`
是的,有一种方法,而且非常简单:
$ build_id=`wget -qO- jenkins_url/job/job_name/lastSuccessfulBuild/buildNumber`
$ echo $build_id
131 # that's my build number
我认为最好的解决方案是使用零依赖的 groovy。
node {
script{
def lastSuccessfulBuildID = 0
def build = currentBuild.previousBuild
while (build != null) {
if (build.result == "SUCCESS")
{
lastSuccessfulBuildID = build.id as Integer
break
}
build = build.previousBuild
}
println lastSuccessfulBuildID
}
}
您不需要指定 jenkins_url 或 job_name 等来获取最后成功的构建 ID。
然后你可以在存储库中的所有 Jenkinsfile 中轻松使用它,而无需无用的配置。
在 Jenkins v2.164.2 上测试
要使用 curl 获取最后成功的内部版本号:
curl --user userName:password https://url/job/jobName/api/xml?xpath=/*/lastStableBuild/number
如果您想要上次成功作业的显示名称而不是内部版本号:
curl --user <username>:<tokenOrPassword> https://<url>/job/<job-name>/lastSuccessfulBuild/api/json | jq -r '.displayName'
或在groovy
def buildName = Jenkins.instance.getItem('jobName').lastSuccessfulBuild.displayName
我发现在 Jenkins 工作区中查询永久链接文件非常有用。
这使您不仅可以获得最后一次成功的构建,还可以获取 Jenkins 认为相关的其他构建。
你可以看到它的内容在构建部分添加这一行,在执行Shell面板:
cat ../../jobs/$JOB_NAME/builds/permalinks
例如,在我的例子中:
+ cat ../../jobs/$JOB_NAME/builds/permalinks
lastCompletedBuild 56
lastFailedBuild 56
lastStableBuild 51
lastSuccessfulBuild 51
lastUnstableBuild -1
lastUnsuccessfulBuild 56
从那里,你会想要解析最后一次成功构建的数量,或者任何其他由永久链接提供的,你可以这样做 运行:
lastSuccesfulBuildId=$(cat ../../jobs/$JOB_NAME/builds/permalinks | grep lastSuccessfulBuild | sed 's/lastSuccessfulBuild //')
要获取作业内部版本号,只需执行以下操作:
def build_Number = Jenkins.instance.getItem('JobName').lastSuccessfulBuild.number
管道脚本解决方案:
import groovy.json.JsonSlurper
def jResponse = httpRequest "https:/<yourjenkinsjoburlpath>/lastSuccessfulBuild/buildNumber"
def json = new JsonSlurper().parseText(jResponse.content)
echo "Status: ${json}"
詹金斯控制台输出:
HttpMethod: GET
URL: https://***/lastSuccessfulBuild/buildNumber
Sending request to url: https://***/lastSuccessfulBuild/buildNumber
Response Code: HTTP/1.1 200 OK
Success code from [100‥399]
[Pipeline] echo
Status: 20
一般来说,为了获得最新成功构建的工件,我在下面 URL:
上做了一个wget
http://jenkins.com/job/job_name/lastSuccessfulBuild/artifact/artifact1/jenkins.txt
有没有办法,我可以在 lastSuccessfulBuild
上执行 wget
并获得如下所示的 build_id
?
build_id=`wget http://jenkins.p2pcredit.local/job/job_name/lastSuccessfulBuild`
是的,有一种方法,而且非常简单:
$ build_id=`wget -qO- jenkins_url/job/job_name/lastSuccessfulBuild/buildNumber`
$ echo $build_id
131 # that's my build number
我认为最好的解决方案是使用零依赖的 groovy。
node {
script{
def lastSuccessfulBuildID = 0
def build = currentBuild.previousBuild
while (build != null) {
if (build.result == "SUCCESS")
{
lastSuccessfulBuildID = build.id as Integer
break
}
build = build.previousBuild
}
println lastSuccessfulBuildID
}
}
您不需要指定 jenkins_url 或 job_name 等来获取最后成功的构建 ID。 然后你可以在存储库中的所有 Jenkinsfile 中轻松使用它,而无需无用的配置。
在 Jenkins v2.164.2 上测试
要使用 curl 获取最后成功的内部版本号:
curl --user userName:password https://url/job/jobName/api/xml?xpath=/*/lastStableBuild/number
如果您想要上次成功作业的显示名称而不是内部版本号:
curl --user <username>:<tokenOrPassword> https://<url>/job/<job-name>/lastSuccessfulBuild/api/json | jq -r '.displayName'
或在groovy
def buildName = Jenkins.instance.getItem('jobName').lastSuccessfulBuild.displayName
我发现在 Jenkins 工作区中查询永久链接文件非常有用。
这使您不仅可以获得最后一次成功的构建,还可以获取 Jenkins 认为相关的其他构建。
你可以看到它的内容在构建部分添加这一行,在执行Shell面板:
cat ../../jobs/$JOB_NAME/builds/permalinks
例如,在我的例子中:
+ cat ../../jobs/$JOB_NAME/builds/permalinks
lastCompletedBuild 56
lastFailedBuild 56
lastStableBuild 51
lastSuccessfulBuild 51
lastUnstableBuild -1
lastUnsuccessfulBuild 56
从那里,你会想要解析最后一次成功构建的数量,或者任何其他由永久链接提供的,你可以这样做 运行:
lastSuccesfulBuildId=$(cat ../../jobs/$JOB_NAME/builds/permalinks | grep lastSuccessfulBuild | sed 's/lastSuccessfulBuild //')
要获取作业内部版本号,只需执行以下操作:
def build_Number = Jenkins.instance.getItem('JobName').lastSuccessfulBuild.number
管道脚本解决方案:
import groovy.json.JsonSlurper
def jResponse = httpRequest "https:/<yourjenkinsjoburlpath>/lastSuccessfulBuild/buildNumber"
def json = new JsonSlurper().parseText(jResponse.content)
echo "Status: ${json}"
詹金斯控制台输出:
HttpMethod: GET
URL: https://***/lastSuccessfulBuild/buildNumber
Sending request to url: https://***/lastSuccessfulBuild/buildNumber
Response Code: HTTP/1.1 200 OK
Success code from [100‥399]
[Pipeline] echo
Status: 20