Set Hudson Build Description via Web API

◇◆丶佛笑我妖孽 提交于 2020-01-14 09:42:28

问题


I have a Python script that operates on Hudson builds and would love to be able to set the description of a build programmatically.

I can click "Add Description" on a build's page and fill in the form, how can I POST some data to the same URL that form does?


回答1:


Figured it out, need to POST the following as form data (content type application/x-www-form-urlencoded) to

http://myserver/hudson/job/thebuild/10/submitDescription

{"description": "Some Description for the build"}

In code:

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)



回答2:


Using an 'Execute system Groovy script' Build task:

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:


(would comment, but not enough rep)

Thanks to jtb for the bulk of the approach. If security is enabled on the server, I found that I could authenticate using this code (adapted from here)

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)

The values for user and token can be found under API Token in: http://<myserver>/me/configure




回答4:


Here is the curl command that worked fine from shell. Replace the text in between and including {}.

curl -X POST -u {user:password} -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode description={descriptionstring} {hudsonurl}/job/{jobname}/{buildnumber}/submitDescription



来源:https://stackoverflow.com/questions/4870187/set-hudson-build-description-via-web-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!