我必须使用它的api创建/更新jenkins作业,因为我的所有作业都使用了其他脚本也使用的参数,我正在尝试集中脚本,所以当我在一个地方更改它时,更改反映了在所有。
目前,如果有人更改了脚本,他们也必须手动编辑jenkins作业的参数。
我看到了用于创建作业的远程API的示例,并且能够成功创建测试作业但是如何编辑现有作业,除了删除它并再次创建它(这不是一个选项,因为我必须维护构建历史记录) )。
答案 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
答案 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的人,我发现我需要确保:
使用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)