Установить описание сборки Hudson через веб-API - PullRequest
5 голосов
/ 02 февраля 2011

У меня есть скрипт на Python, который работает со сборками Hudson и хотел бы иметь возможность задавать описание сборки программно.

Я могу нажать «Добавить описание» на странице сборки и заполнить форму. Как я могу отправить некоторые данные на тот же URL, что и форма?

Ответы [ 4 ]

7 голосов
/ 02 февраля 2011

разобрался, нужно ПОСТАВИТЬ следующее как данные формы (тип контента 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)
2 голосов
/ 03 октября 2014

(прокомментирую, но недостаточно репов)

Спасибо 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 Token в: http://<myserver>/me/configure

2 голосов
/ 02 июня 2012

Использование задачи «Выполнить системный скрипт 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")
    }
0 голосов
/ 04 сентября 2015

Вот команда curl, которая отлично работала из оболочки. Заменить текст между и {}.

curl -X POST -u {пользователь: пароль} -H 'Тип контента: application / x-www-form-urlencoded' --data-urlencode description = {descriptionstring} {hudsonurl} / job / {jobname} / {BuildNumber} / submitDescription

...