
1. 사전 필요사항
- Gmail SMTP 세팅 (잘 설명된 포스트가 많아 생략합니다.)
- Jenkins SMTP 세팅 : https://onestone-note.tistory.com/155
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면 그만 파이프라인을 종료하게 함
'인프라 > Jenkins' 카테고리의 다른 글
Jenkins Email 보내기 (with 파일 첨부, 이메일 템플릿) (0) | 2023.05.29 |
---|---|
Jenkins Redmine 이슈 티켓 연동 (Redmine REST API, Jenkins input multiselect) (0) | 2023.05.29 |
Jenkins 배포 승인 프로세스 구성 2 - API (Python Flask) (0) | 2023.05.28 |
Jenkins 배포 승인 프로세스 구성 1 - 개요 (0) | 2023.05.21 |
[Jenkins] install offline (0) | 2022.04.07 |