Как передать параметр в curl при вызове задания Jenkins без использования buildWithParameters - PullRequest
0 голосов
/ 12 октября 2018

Мое задание конвейера Jenkins не параметризовано, но при вызове задания из сценария конвейера я могу указать параметры, которые используются внутри моего текущего задания.

Я бы хотел передать эти параметры извне, используякоманда curlЯ испробовал следующие варианты, но пока не добился успеха.

curl -i -X POST 'https://<USERNAME>:<API_TOKEN>@JENKINS_URL/job/DS_JOB1/build?token=remotejob' --data-urlencode json='{"parameter": [{"PLATFORM":"Value1", "PROJECT": "Project_Type"}]}' 

Это не работает, так как я не могу получить параметры в вызываемом задании.

curl -i -X POST 'https://<USERNAME>:<API_TOKEN>@JENKINS_URL/job/DS_JOB1/buildWithParameters?token=remotejob&TestProject=NewCurlTesting'

Этот вызов завершается сбоемпотому что мое текущее задание DS_JOB1 не параметризовано.

Мне интересно, если кто-то уже использовал такие задания и исправил проблему.

В качестве примера я предоставляю 2 простых файла jenkins, которые прекрасно работаютв способе реализации jenkins pipe.

node('LABEL_NAME') {
    timestamps {
        try {
            stage("Calling Downstream Job") {
                job_downstream = build(job: "DS_JOB1",
                             parameters: [[$class: 'StringParameterValue', name: 'PLATFORM', value: "pf-1"],
                                          [$class: 'StringParameterValue', name: 'PROJECT', value: "Dummy1"]],
                             propagate: false,
                             wait: true)
                if(job_downstream?.result.toString() == 'FAILURE') {
                    currentBuild.result = job_downstream?.result.toString()
                    println("Downstream job for PLATFORM: ${PLATFORM}")
                }
            }
        }
        catch (err) {
            println(err)
            currentBuild.result = 'FAILURE'
        }
        finally {
            stage('Post build actions') {
                // Mailer notification
                step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: '<GroupMail_ID>', sendToIndividuals: false])
                deleteDir()
            }
        }
    }
}

Jenkinsfile для задания DS_JOB1, которое вызывается из указанного выше задания:

node('LABEL_NAME') {
    stage('Trigger Testlauncher') {

        if("${PLATFORM}" == "pf-1")
        {
            <Take some action>
        }
        else if("${PROJECT}" == "Dummy1")
        {
            < Take some action>
        }
        else
        {
            <Take something>
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Добавлен следующий фрагмент кода внутри DS_JOB1 Jenkinsfile.

properties(
    [
        parameters(
        [
            string(defaultValue: 'PF-1', description: 'Project repo name to checkout for static analysis', name: 'PLATFORM'),
            string(defaultValue: 'Dummy1', description: 'Project branch to be used', name: 'PROJECT')
        ])
    ])

После добавления этого я могу запустить задание с помощью следующей команды curl.

curl -i -X POST 'https://<user>:<Token>@JENKINS_URL/job/DS_JOB1/buildWithParameters?token=remotejob&PLATFORM=NewCurlTesting&PROJECT=Test1'

Если кто-либо имеет какую-либо подсказку, не сделавизмените на "DS_JOB1", пожалуйста, поделитесь.

0 голосов
/ 12 октября 2018

Мое конвейерное задание Jenkins не параметризовано, но при вызове задания из конвейерного скрипта я могу указать параметры, которые используются внутри моего текущего задания.

Чтобы подтвердить, что я его понялправильно, ваш конвейерный сценарий способен «успешно» вызывать параметры передачи DS_JOB1, даже если задание DS_JOB1 не параметризовано?

Какую версию Jenkins вы используете?Я быстро протестировал на Jenkins версии 2.146, и он не работает на моем конце, так как он говорит, что не распознает свойство PLATFORM в последующем задании.

Можете ли вы параметризировать задание DS_JOB1, и тогда вам следуетбыть в состоянии вызвать с помощью curl

curl -X POST JENKINS_URL/job/JOB_NAME/build \
  --user USER:TOKEN \
  --data-urlencode json='{"parameter": [{"PLATFORM":"Value1", "PROJECT": "Project_Type"}]}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...