我有一个在 Hudson 构建上运行的 Python 脚本,并且希望能够以编程方式设置构建的描述。
我可以单击构建页面上的“添加描述”并填写表单,我如何将一些数据发布到与表单相同的 URL?
我有一个在 Hudson 构建上运行的 Python 脚本,并且希望能够以编程方式设置构建的描述。
我可以单击构建页面上的“添加描述”并填写表单,我如何将一些数据发布到与表单相同的 URL?
想通了,需要将以下内容作为表单数据(内容类型application/x-www-form-urlencoded
)发布到
http://myserver/hudson/job/thebuild/10/submitDescription
{"description": "Some Description for the build"}
在代码中:
def set_description(build_url, desc):
req_data = urllib.urlencode({'description': desc})
req = urllib2.Request(build_url + '/submitDescription', req_data)
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
urllib2.urlopen(req)
(会评论,但没有足够的代表)
感谢 jtb 提供的大部分方法。如果在服务器上启用了安全性,我发现我可以使用此代码进行身份验证(改编自此处)
def set_description(build_url, desc, user, token):
import base64, urllib, urllib2
req_data = urllib.urlencode( {'description': desc } )
req = urllib2.Request(build_url + '/submitDescription', req_data)
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
auth = 'Basic {}'.format(base64.b64encode("{}:{}".format( user, token )))
req.add_header( 'Authorization', auth )
response = urllib2.urlopen(req)
用户和令牌的值可以在 API 令牌下找到:http://<myserver>/me/configure
使用“执行系统 Groovy 脚本”构建任务:
import hudson.model.Cause
import hudson.model.Job
import jenkins.model.Jenkins
final JOB_NAME = 'my-job-name'
final jenkins = Jenkins.instance
final job = jenkins.getItemByFullName(JOB_NAME, Job.class)
final currentBuild = Thread.currentThread().executable
final buildNumber = currentBuild.getNumber()
job.builds
.findAll { build ->
build.number == buildNumber
}
.each { build ->
build.setDescription("Some Description for the build")
}
这是在 shell 中运行良好的 curl 命令。替换 {} 之间的文本(包括 {})。
curl -X POST -u {user:password} -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode description={descriptionstring} {hudsonurl}/job/{jobname}/{buildnumber }/提交描述