Как удаленно запускать сборки 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 токена для удаленного выполнения вашей работы.
Тебе нужно:

  1. apiToken для аутентификации вашей личности. Это значение создается из JENKINS_URL/me/configure. Также проверьте здесь документацию
  2. Другой токен проверки подлинности задания, который вы создаете, когда включаете «Удаленно запускать сборки».

Ниже приведен пример, который вы можете настроить, чтобы сделать это.

      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&param1_name=$PARAM1_VALUE&param2_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&param2=store"

Вы можете запускать сборки Jenkins удаленно и передавать параметры с помощью следующего запроса.

JENKINS_URL/job/job-name/buildWithParameters?token=TOKEN_NAME&param_name1=value&param_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>

Примечание. Использование двойных кавычек может иметь решающее значение. Обратите внимание пожалуйста.

Другие вопросы по тегам