通过Web API设置Hudson构建描述

5 投票
4 回答
2790 浏览
提问于 2025-04-16 11:03

我有一个用Python写的脚本,它可以处理Hudson的构建。我希望能通过编程的方式来设置构建的描述。

我可以在构建页面上点击“添加描述”,然后填写表单。那么,我该怎么把一些数据发送到和这个表单相同的地址呢?

4 个回答

2

使用“执行系统 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")
    }
3

(我想评论,但没有足够的声望)

感谢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)

用户和令牌的值可以在以下地址找到:http://<myserver>/me/configure

7

我搞明白了,需要把以下内容作为表单数据发送(内容类型是 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)

撰写回答