when triggering secret pushed ocean from for change blue api jenkins

triggering - ¿Cómo puedo actualizar un trabajo jenkins usando la API



triggering a jenkins build from a push to gitlab (6)

Tengo que crear / actualizar un trabajo jenkins utilizando su API porque todos mis trabajos están usando parámetros que también utilizan otros scripts y estoy tratando de centralizar los scripts para que cuando lo cambie en un lugar, el cambio se refleje en todos.

actualmente, si alguien cambia el guión, también debe editar manualmente los parámetros del trabajo jenkins.

Vi el ejemplo de Remote API para crear trabajos y pude crear con éxito trabajos de prueba, pero ¿cómo puedo editar un trabajo existente además de eliminarlo y volver a crearlo (lo cual no es una opción ya que tengo que mantener el historial de compilación).


en caso de que alguien más también esté buscando la misma respuesta,

Parece que la solución es mucho más fácil, todo lo que tienes que hacer es actualizar config.xml y publicar el config.xml actualizado de nuevo a jenkins y tu trabajo se actualizará.



Podrías usar Python así:

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)


También puede PUBLICAR un config.xml actualizado en la URL que puede recuperar config.xml , para actualizar programáticamente la configuración de un trabajo.

El patrón de URL de recuperación: $JENKINS_SERVER/job/$JOB_NAME/config.xml

patrón de documento detallado: $JENKINS_SERVER/job/$JOB_NAME/api

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


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

Ese poquito de secuencias de comandos parece ser lo que estás buscando. Utiliza la API REST para obtener y establecer la configuración con algunas expresiones regulares S & R en el medio.

Editar: Código a continuación basado en el comentario. Se copia directamente del blog, así que no me atribuyo ningún mérito.

# 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


Para aquellos que usan RestSharp, descubrí que necesitaba asegurarme de que:

  1. El ID de usuario que realiza la actualización tiene permiso para hacerlo en Administrar> Seguridad global> Matriz de autorización
  2. Tenía un token Jenkins Crumb actual, requerido una vez que CSRF (también en Administrar> Seguridad) esté habilitado.
  3. Envíe el XML actualizado utilizando un parámetro del objeto Request con el valor de [ParameterType.RequestBody] (link) 1 para el argumento de tipo.

    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; }