Program Club

Jenkins 빌드를 원격으로 트리거하고 매개 변수를 전달하는 방법

proclub 2020. 12. 11. 18:57
반응형

Jenkins 빌드를 원격으로 트리거하고 매개 변수를 전달하는 방법


다음을 사용하여 원격으로 Jenkins 작업을 호출하고 있습니다.

wget http://<ServerIP>:8080/job/Test-Jenkins/build?token=DOIT

여기서 Test-Jenkins작업이 호출되고 DOIT내가 사용한 보안 토큰입니다.

이제이 작업의 build.xml 파일에 몇 가지 매개 변수를 전달해야합니다 Test-Jenkins.

아직 변수를 전달하는 방법을 아직 파악하지 못했습니다.


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

그런 다음 Jenkins 작업 구성에서 " This build is parameterized" 상자를 Add Parameter선택하고 " String Parameter" 버튼을 클릭 한 다음 " "드롭 다운 값을 선택합니다 .

이제 매개 변수를 정의하십시오-예 :

여기에 이미지 설명 입력

이제 작업 / 빌드 파이프 라인에서 매개 변수를 사용할 수 있습니다. 예 :

여기에 이미지 설명 입력


변수를 전달 / 사용하려면 먼저 Jenkins의 구성 섹션에서 매개 변수를 만듭니다. 사용하는 매개 변수는 텍스트, 문자열, 파일 등의 유형일 수 있습니다.

생성 한 후 원하는 필드에서 변수 참조를 사용합니다.

예 : Email-subjectEmail-recipentList대해 두 개의 변수를 구성 / 생성 했으며 EMail-ext플러그인 에서 해당 참조를 사용했습니다 (첨부 된 스크린 샷).

여기에 이미지 설명 입력


이 질문에 추가하기 위해 /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=...매개 변수 myParamTEST작업에 전달합니다 . 그러나 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}"
            }
        }

    }
}

작업을 수동으로 한 번 빌드하여 구성하고 다음과 같이 Jenkins 작업에 대한 http POST 요청을 만듭니다.

형식은 http://server/job/myjob/buildWithParameters?PARAMETER=Value

curl http://admin:test123@localhost:30637/job/apd-test/buildWithParameters?userFlag=false --request POST

참고 URL : https://stackoverflow.com/questions/20359810/how-to-trigger-jenkins-builds-remotely-and-to-pass-parameters

반응형