1. 사전 필요사항

 

Jenkins Email 보내기 (with 파일 첨부, 이메일 템플릿)

Jenkins SMTP 설정 Jenkins 관리 > Configure System > Extended E-mail Notification SMTP server : STMP 도메인 or IP (Gmail) smtp.gmail.com SMTP Port : SMTP 포트 (Gmail) 465 Credential : SMTP 계정 정보 Use SSL 체크 Jenkins 파이프라인 attach

onestone-note.tistory.com

  • Jenkins Email Extension 플러그인 설치

2. 스크립트 (이메일에서 승인)

중간에 ____ 밑줄 친 부분은 알맞은 값을 넣으셔야 합니다.

승인(yes)인지 취소(no)인지에 따라 어떻게 하위 프로세스를 진행할지는 추가로 작성을 해야합니다.

pipeline {
    agent any

    stages {
        stage('Approval') {
            steps {
                script {    
                    def html = """
                        <body>
                            <a href="http://____/approval?build_number=${env.BUILD_NUMBER}&job_name=${env.JOB_NAME}&approval=yes">승인하기</a>
                            <a href="http://____/approval?build_number=${env.BUILD_NUMBER}&job_name=${env.JOB_NAME}&approval=no">취소하기</a>
                        </body>
                    """
                    
                    echo "${html}"
                    emailext body: "${html}",
                    subject: '[Jenkins] Request deployment', 
                    to: '____',
                    mimeType: 'text/html'
                    
                    try {
                        timeout(time:10, unit:'MINUTES') {
                            def APPROVE = input message: 'Deploy', 
                                ok: 'Approve', 
                                submitterParameter: 'approver',
                                parameters: [choice(name: 'APPROVE', choices: 'yes\nno', description: 'Approve?')]
                            
                            if (APPROVE['APPROVE'] == 'yes'){
                                if (APPROVE['approver'] == '____') {
                                    env.APPROVAL = true
                                	currentBuild.result = 'SUCCESS'
                                } else {
                                    env.APPROVAL = false
                                    currentBuild.result = 'FAILURE'
                                }
                            } else {
                                env.APPROVAL = false
                                currentBuild.result = 'FAILURE'
                            }
                        }
                    } catch (error) {
                        print(error)
                        env.APPROVAL = false
                        currentBuild.result = 'FAILURE'
                    }
                }
            }
        }
    }
}

 

3. 승인 프로세스

  • 젠킨스에서 파이프라인 빌드 클릭
  • 실행된 젠킨스 파이프라인에서 승인 요청 이메일을 발송함
  • 그리고 젠킨스 파이프라인은 timeout 구문에 의해 잠시 pause 상태가 됨
  • 이메일 내용을 확인하고, 승인하기/취소하기 버튼을 클릭

  • 승인하기/취소하기 버튼을 누르면 앞서 만든 Flask API에 yes/no 값을 전달하며 호출함
  • Flask API는 Jenkins WFAPI를 호출해 pause 상태를 풀고, yes면 하위 배포 stage를 진행하게 하고 no면 그만 파이프라인을 종료하게 함
복사했습니다!