Как обновить файл config.xml работы Jenkins Job с помощью curl
Как я могу отредактировать параметр задания jenkins, обновив config.xml задания jenkins с помощью curl?
3 ответа
Ты можешь использовать:
curl -X POST 'http://my-cool-jenkins.com:8080/createItem?name=mycooljob' -u username:password --data-binary @config.xml -H "Content-Type:text/xml"
Обновить:
Этот URL для создания работы, для обновления использования:
curl -X POST 'http://my-cool-jenkins.com:8080/job/mycooljob/config.xml' -u username:password --data-binary @config.xml -H "Content-Type:text/xml"
Простого обновления содержимого файла config.xml, вероятно, недостаточно для изменения состояния работы Jenkins в памяти. Вам все еще нужно перезагрузить конфигурацию с диска, что можно сделать либо в графическом интерфейсе с помощью jenkins/manage/, с помощью скрипта groovy, либо просто перезагрузив сервер. После этого ваш пример должен работать.
Это на самом деле сводится к тому, что Jenkins config.xml - это сериализованные Java-объекты XStream, а не фактические файлы конфигурации. Поэтому изменение параметров задания путем ручного редактирования XML-файлов, вероятно, не лучшее решение. Вместо этого вы можете изменить конфигурацию задания с помощью консоли сценариев Jenkins. Например, чтобы изменить значение параметра по умолчанию для параметра String, вы можете запустить скрипт ниже в консоли Jenkins (например, http://localhost:8080/jenkins/script):
import hudson.model.ParametersDefinitionProperty
def jobName = "job_name"
def paramName = "param_to_be_changed"
def newParamValue = "param_new_value"
def job = Jenkins.instance.getItem(jobName)
def params = job.getAction(ParametersDefinitionProperty)
def paramToModify = params.getParameterDefinitions().find { param -> param.getName() == paramName }
paramToModify.setDefaultValue(newParamValue)
job.save()
Если задание находится внутри папки или организации, необходимо пройти еще один уровень, то есть:
def folderName = "folder_name"
def job = Jenkins.instance.getItem(folderName).getItem(jobName)
После этого состояние задания будет сохранено в файле config.xml. После этого вы можете выполнить скрипт удаленно, используя curl. Предполагая, что вы сохранили скрипт выше в файле script.groovy:
# Get breadcrumb from Jenkins
curl -u <username>:<password> 'http://localhost:8080/jenkins/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
# Send script to Jenkins console
curl -X POST -u <username>:<password> -H 'Jenkins-Crumb: <crumb>' -H 'Content: text/plain' --data-urlencode "script=$(< script.groovy)" http://localhost:8080/jenkins/scriptText
Подробнее об API параметров в javadoc
Вот ссылка на скрипт, который я использовал для изменения конвейера задания для оболочки: https://raw.githubusercontent.com/iocanel/presentations/382074b5012d6c3ed87042298114e688424eeaed/workspace/editor/jenkins-run-pipeline