如何使用api更新jenkins作业

时间:2014-03-19 06:46:00

标签: api jenkins

我必须使用它的api创建/更新jenkins作业,因为我的所有作业都使用了其他脚本也使用的参数,我正在尝试集中脚本,所以当我在一个地方更改它时,更改反映了在所有。

目前,如果有人更改了脚本,他们也必须手动编辑jenkins作业的参数。

我看到了用于创建作业的远程API的示例,并且能够成功创建测试作业但是如何编辑现有作业,除了删除它并再次创建它(这不是一个选项,因为我必须维护构建历史记录) )。

6 个答案:

答案 0 :(得分:15)

您可以像这样使用python:

from jenkinsapi.jenkins import Jenkins
jenkinsSource = 'http://10.52.123.124:8080/'
server = Jenkins(jenkinsSource, username = 'XXXXX', password = 'YYYYY')
myJob=server.get_job("__test")
myConfig=myJob.get_config()
print myConfig
new = myConfig.replace('<string>clean</string>', '<string>string bean</string>')
myJob.update_config(new)

答案 1 :(得分:10)

如果其他人也在寻找相同的答案,

看起来解决方案要容易得多,您只需更新config.xml并将更新的config.xml发布回jenkins,您的工作就会更新。

答案 2 :(得分:5)

您还可以将更新的config.xml发布到可以获取config.xml的URL,以便以编程方式更新作业的配置。

获取网址格式:$JENKINS_SERVER/job/$JOB_NAME/config.xml

详细的文档模式:$JENKINS_SERVER/job/$JOB_NAME/api

示例:https://ci.jenkins-ci.org/job/infra_atlassian-base/api/

答案 3 :(得分:3)

http://asheepapart.blogspot.ca/2014/03/use-jenkins-rest-api-to-update-job.html

这一点脚本看起来就像你在寻找什么。使用REST API来获取和设置配置,并在中间使用一些正则表达式S&amp; R.

编辑:以下代码基于评论。它直接从博客中复制,所以我不相信它。

# First, get the http://jenkins.example.com/job/folder-name/job/sample-job--template/configure looking like you want

read -s token
# type token from http://jenkins.example.com/user/$userName/configure

# Download the configuration XML for the template job (which will be our model template)
curl -v -u "bvanevery:$token" http://jenkins.example.com/job/folder-name/job/sample-job--template/config.xml > generic-config.xml

# My modules
declare modules=('module1' 'module2' 'module3')

# POST the updated configuration XML to Jenkins
for m in ${modules[@]}; do
   echo "module $m";
   sed "s/MODULE/$m/g" generic-config.xml > $m-config.xml; 
   curl -v -X POST --data-binary @$m-config.xml -u "bvanevery:$token" \
        -H 'Content-Type: application/xml' \
        "http://jenkins.example.com/job/folder-name/job/$m/config.xml" ;
done

答案 4 :(得分:0)

对于那些使用RestSharp的人,我发现我需要确保:

  1. 执行更新的用户ID有权在“管理”&gt;下执行此操作。全球安全&gt;授权矩阵
  2. 我有一个当前的Jenkins Crumb令牌,一旦启用了CSRF(也在Manage&gt; Security下),就需要这样做。
  3. 使用Request对象的参数发送更新的XML,其值为var query = (function(){ var results = []; var count = 0; return function check(fun){ Server.Query({ start_from: count}, function(d){ count = d.results.length; results.push(d.results); if (d.limit_hit && fun) fun(results); else check(fun); }); }; })(); // Call here var my_query = query(function(d){ // --> retrive all data when limit_hit is true) }); (链接)1

    [ParameterType.RequestBody]

答案 5 :(得分:-1)