Как удаленно запускать сборки Jenkins и передавать параметры
Я вызываю работу Jenkins удаленно, используя:
wget http://<ServerIP>:8080/job/Test-Jenkins/build?token=DOIT
Вот Test-Jenkins
работа вызывается и DOIT
это маркер безопасности, который я использовал.
Теперь мне нужно передать некоторые параметры в файл build.xml этой работы, т.е. Test-Jenkins
,
Я еще не понял, как передать переменные.
10 ответов
См. Документацию Jenkins: параметризованная сборка
Ниже приведена интересующая вас строка:
http://server/job/myjob/buildWithParameters?token=TOKEN&PARAMETER=Value
Чтобы запустить сборку с собственными / пользовательскими параметрами, вызовите следующий URL (используя POST или GET):
http://JENKINS_SERVER_ADDRESS/job/YOUR_JOB_NAME/buildWithParameters?myparam=myparam_value
Затем в конфигурации работы Дженкинса поставьте галочку в поле "This build is parameterized
", нажмите"Add Parameter
"кнопку и выберите"String Parameter
"выпадающее значение.
Теперь определите ваш параметр - пример:
Теперь вы можете использовать свой параметр в конвейере задания / сборки, например:
Чтобы добавить к этому вопросу, я узнал, что вам не нужно использовать /buildWithParameters
конечная точка.
В моем сценарии у меня есть скрипт, который запускает тесты Jenkins после развертывания. Некоторые из этих тестов требуют дополнительной информации о развертывании для правильной работы.
Если бы я попытался использовать /buildWithParameters
на задании, которое не ожидает параметров, задание не будет запущено. Я не хочу входить и редактировать каждую работу, чтобы требовать фиктивных параметров только для запуска работ.
Вместо этого я обнаружил, что вы можете передавать такие параметры:
curl -X POST --data-urlencode "token=${TOKEN}" --data-urlencode json='{"parameter": [{"name": "myParam", "value": "TEST"}]}' https://jenkins.corp/job/$JENKINS_JOB/build
С этим json=...
это пройдет парам myParam
со значением TEST
на работу всякий раз, когда вызов сделан. Тем не менее, задание Jenkins будет по-прежнему выполняться, даже если оно не ожидает параметр myParam
,
Единственный сценарий, который не охватывается, - это если задание имеет параметр, который НЕ передается в json
, Даже если для задания задано значение по умолчанию для параметра, оно не сможет выполнить задание. В этом сценарии вы столкнетесь со следующим сообщением об ошибке / трассировкой стека при вызове /build
:
java.lang.IllegalArgumentException: No such parameter definition: myParam
Я понимаю, что этот ответ опоздал на несколько лет, но я надеюсь, что это может быть полезной информацией для кого-то еще!
Примечание: я использую Jenkins v2.163
Вы можете просто попробовать это с jenkinsfile. Создайте задание Jenkins с помощью следующего конвейерного скрипта.
pipeline {
agent any
parameters {
booleanParam(defaultValue: true, description: '', name: 'userFlag')
}
stages {
stage('Trigger') {
steps {
script {
println("triggering the pipeline from a rest call...")
}
}
}
stage("foo") {
steps {
echo "flag: ${params.userFlag}"
}
}
}
}
Создайте задание один раз вручную, чтобы настроить его, и просто создайте HTTP-запрос POST для задания Jenkins следующим образом.
Формат http://server/job/myjob/buildWithParameters?PARAMETER=Value
curl http://admin:test123@localhost:30637/job/apd-test/buildWithParameters?userFlag=false --request POST
Обновление 2023 г.
Теперь изменился способ аутентификации Jenkins.
Вам нужно передать 2 токена для удаленного выполнения вашей работы.
Тебе нужно:
- apiToken для аутентификации вашей личности. Это значение создается из JENKINS_URL/me/configure. Также проверьте здесь документацию
- Другой токен проверки подлинности задания, который вы создаете, когда включаете «Удаленно запускать сборки».
Ниже приведен пример, который вы можете настроить, чтобы сделать это.
PARAM1_VALUE=<param1_value>
PARAM2_VALUE=<param2_vale>
USERNAME=dummy_user_name
JENKINS_URL="http://10.xxx.x.xxx:8080"
JOB_TOKEN="<value>" # you create this token when you enable Job>Configure>Build Triggers>Trigger builds remotely
LOGIN_API_TOKEN="<value>" #get this value from JENKINS_URL/me/configure
curl -L --user $USERNAME:$LOGIN_API_TOKEN "$JENKINS_URL/job/JobName/buildWithParameters?token=$JOB_TOKEN¶m1_name=$PARAM1_VALUE¶m2_name=$PARAM2_VALUE"
Чтобы передать / использовать переменные, сначала создайте параметры в разделе конфигурации Jenkins. Используемые параметры могут иметь тип text, String, file и т. Д.
После их создания используйте ссылку на переменную в нужных вам полях.
Например: я настроил / создал две переменные для Email-subject
а также Email-recipentList
и я использовал их ссылку в EMail-ext
плагин (прикрепленный скриншот).
Когда нам нужно отправить несколько параметров триггера в задание jenkins, работают следующие команды.
curl -X POST -i -u "auto_user":"xxxauthentication_tokenxxx" "JENKINS_URL/view/tests/job/helloworld/buildWithParameters?param1=162¶m2=store"
Вы можете запускать сборки Jenkins удаленно и передавать параметры с помощью следующего запроса.
JENKINS_URL/job/job-name/buildWithParameters?token=TOKEN_NAME¶m_name1=value¶m_name1=value
JENKINS_URL
(может быть) = https://<your domain name or server address>
TOKE_NAME
может быть создан с помощью вкладки конфигурации
curl -X POST -u Admin:<api_token> http://localhost:8080/job/<job_name>/buildWithParameters\?ColorValue\=sddddsd
curl -H "Jenkins-Crumb: <your_crumb_data>" -u "<username>:<password>" "http://<your_jenkins_url>?buildWithParameters?token=<your_remote_api_name>?<parameterA>=<val_parameter_A>&<parameterB>=<val_parameterB>"
Вы можете изменить следующие параметры по своему усмотрению:
<your_crumb_data>
<username>
<password>
<your_jenkins_url>
<your_remote_api_name>
<parameterA>
<parameterB>
<val_parameter_A>
<val_parameter_B>
Примечание. Использование двойных кавычек может иметь решающее значение. Обратите внимание пожалуйста.