如何使用api更新jenkins作业
我必须使用其api创建/更新jenkins作业,因为我的所有作业都使用其他脚本也使用的参数,我正在尝试集中脚本,因此当我在一个地方更改它时,更改将反映在所有地方 目前,如果有人更改脚本,他们还必须手动编辑jenkins作业的参数如何使用api更新jenkins作业,api,jenkins,Api,Jenkins,我必须使用其api创建/更新jenkins作业,因为我的所有作业都使用其他脚本也使用的参数,我正在尝试集中脚本,因此当我在一个地方更改它时,更改将反映在所有地方 目前,如果有人更改脚本,他们还必须手动编辑jenkins作业的参数 我看到了用于创建作业的远程API示例,并且能够成功创建测试作业,但是除了删除现有作业并再次创建它(这不是一个选项,因为我必须维护构建历史记录)之外,我如何编辑现有作业。如果其他人也在寻找相同的答案 看来解决方案要简单得多,您只需更新config.xml并将更新后的con
我看到了用于创建作业的远程API示例,并且能够成功创建测试作业,但是除了删除现有作业并再次创建它(这不是一个选项,因为我必须维护构建历史记录)之外,我如何编辑现有作业。如果其他人也在寻找相同的答案 看来解决方案要简单得多,您只需更新config.xml并将更新后的config.xml发回jenkins,您的工作就会得到更新。 这一点脚本似乎就是您所需要的。使用REST API获取和设置中间的一些正则表达式S/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
您还可以将更新的config.xml发布到可以获取
config.xml
的URL,以编程方式更新作业的配置
获取url模式:$JENKINS\u SERVER/job/$job\u NAME/config.xml
详细的文档模式:$JENKINS\u服务器/job/$job\u名称/api
例子:
你可能想考虑使用.你可以使用这样的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)
来自jenkinsapi.jenkins导入jenkins
詹金森http://10.52.123.124:8080/'
服务器=Jenkins(jenkinsource,用户名='XXXXX',密码='YYYYY')
myJob=server.get\u作业(“\u测试”)
myConfig=myJob.get\u config()
打印myConfig
new=myConfig.replace('clean','stringbean'))
myJob.update_config(新)
对于那些使用RestSharp的人,我发现我需要确保:
[ParameterType.RequestBody]
(link)的请求对象的参数发送更新的XML
private XmlDocument JobConfigGet()
{
Uri JobConfigURI = GetJenkinsURI("job/" + _args.JobName + "/config.xml", null);
RestClient restClient = new RestClient(JobConfigURI);
RestRequest restRequest = new RestRequest(Method.GET);
byte[] ua = Encoding.ASCII.GetBytes(Properties.Settings.Default.UserID + ":" + Properties.Settings.Default.UserPassword);
restRequest.AddHeader("authorization", "Basic " + Convert.ToBase64String(ua));
IRestResponse restResponse = restClient.Execute(restRequest);
if (restResponse.ResponseStatus != ResponseStatus.Completed || restResponse.StatusCode != HttpStatusCode.OK)
throw new Exception(string.Format("Unable to retrieve job config: {0}. Wrong ResponseStatus ({1}) or StatusCode ({2}) returned.\nURL: {3}", _args.JobName, restResponse.ResponseStatus.ToString(), restResponse.StatusCode.ToString(), restClient.BaseUrl.AbsoluteUri));
if (restResponse.ContentType != "application/xml")
throw new Exception("Unexpected data type returned for job config: " + _args.JobName + ". Expected 'application/xml'. Got: " + restResponse.ContentType + ".\nURL: " + restClient.BaseUrl.AbsoluteUri);
XmlDocument jobConfig = new XmlDocument();
jobConfig.LoadXml(restResponse.Content);
return jobConfig;
}
private void JobConfigUpdate(XmlDocument JobConfig, string JenkinCrumb)
{
// Update JobConfig XML as needed here.
Uri JobConfigURI = GetJenkinsURI("job/" + _args.JobName + "/config.xml", null);
RestClient restClient = new RestClient(JobConfigURI);
RestRequest restRequest = new RestRequest(Method.POST);
byte[] ua = Encoding.ASCII.GetBytes(Properties.Settings.Default.UserID + ":" + Properties.Settings.Default.UserPassword);
restRequest.AddHeader("authorization", "Basic " + Convert.ToBase64String(ua));
string[] crumbSplit = JenkinCrumb.Split(':');
restRequest.AddHeader(crumbSplit[0], crumbSplit[1]);
restRequest.AddParameter("text/xml", JobConfig.InnerXml, ParameterType.RequestBody);
IRestResponse restResponse = restClient.Execute(restRequest);
string resp = restResponse.Content;
}
为什么不回答代码本身,博客链接可能会消失最终发现这个真正有用的配方,如何更新config.xml^这个链接是完美的。但是,如果jenkins在POST请求中向您提供错误“403 crumb未包含”,则“全局安全设置”中有一个选项“为代理启用兼容模式”。关闭此选项,您的POST请求应该可以工作。作业DSL插件只能用于维护该插件以前创建的作业。看起来很不方便,没有多大用处,只好摆弄了。我一直在努力解决这个问题。