Post

[JENKINS] 외부 파라미터 주입 받기(InputSubmit)

[JENKINS] 외부 파라미터 주입 받기(InputSubmit)

필요 플러그인

  • Pipeline: REST API Plugin
    • 파이프라인의 실행 상태, 실행 이력 등을 REST API로 제공하는 플러그인
    • 이 플러그인은 Jenkins 파이프라인의 상태를 조회하거나 외부 시스템에서 트리거 할 때 사용됨

InputSubmit에 대한 기능

  • Jenkins의 ⁠inputSubmit⁠ 기능은 파이프라인 중간에 사용자로부터 입력을 받아야 할 때 사용하는 ⁠input⁠ 스텝을 REST API로 처리하는 방식이다.
  • Jenkins는 REST API를 통해 파이프라인이 대기 중인 입력 요청을 승인하거나 중단 할 수 있다.

REST API 를 통항 INPUT 대기 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 pipeline {
   agent any
 
   stages {
     stage("APPROVAL WAITNG"){
       steps{
         script{
           try{
             timeout(time: 60, unit: 'MINUTES'){ // 입력을 60분 동안 대기
               def APPROVE_RESULT = input message: "DEPLOY APPROVAL ANSWER",
                                               ok: 'APPROVAL', // 승인을 OK할 버튼의 메시지
                                               id: 'Deployvalue',
                               submitterParameter: 'approval', // 입력을 승인한 사용자의 이름을 `approval`라는 파라미터에 저장
                                       parameters: [choice(name: 'APPROVERESULT', choices: 'yes\nno', description: 'APPROVAL?')]
                             
                             
                echo "RESPONSE : ${APPROVE_RESULT}"
             }
           }catch(error){
             print(error)
             env.APPROVAL = false
             currentBuild.result = "FAILURE"
           }
         } // script
       } // steps
     } // stage
 
     stage('Deploy to Production') {
       steps {
         echo "Deploying to production..."
       } // steps
     } // stage
   } // stages
 } // pipeline

입력 대기중인 대상 조회

curl로 대기 상태 조회

1
$ curl -u ${USER_NAME}:${API_TOKEN} https://jenkins.example.com/job/${YOUR_JOB_NAME}/${BUILD_NUMBER}/wfapi/pendingInputActions
  • USER_NAEM : Jenkins 사용자 이름
  • API_TOKEN : Jenkins 사용자 API 토큰
  • YOUR_JOB_NAME : Jenkins Job 이름
  • BUILD_NUMBER : 실행 중인 빌드 번호

조회 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
  {
    "id": "Deployvalue",
    "proceedText": "APPROVAL",
    "message": "DEPLOY APPROVAL ANSWER",
    "inputs": [{
              "type": "ChoiceParameterDefinition",
              "name": "APPROVERESULT",
              "description": "APPROVAL?",
              "definition": {
                  "defaultVal": "yes",
                  "choices": [
                      "yes",
                      "no"
                  ]
              }
        }],
    "proceedUrl": "/job/YOUR_JOB_NAME/BUILD_NUMBER/wfapi/inputSubmit?inputId=Deployvalue",
    "abortUrl": "/job/YOUR_JOB_NAME/BUILD_NUMBER/input/Deployvalue/abort",
    "redirectApprovalUrl": "/job/YOUR_JOB_NAME/BUILD_NUMBER/input/"
  }
]
This post is licensed under CC BY 4.0 by the author.