전공영역 공부 기록

jenkins job종료 후 discord 알림 설정

악분 2022. 6. 16. 19:27
반응형

1. 개요

CI/C 시스템에서는 Task가 끝나면 사용자에게 알림을 주는 기능이 필요합니다. jenkins에서는 job이 종료되면 post stage에서 성공/실패에 따라 알림기능을 전송할 수 있습니다. 공식문서에도  친절히 예제를 설명하고 있습니다.

참고자료: https://www.jenkins.io/doc/pipeline/tour/post/

 

이 글에서는 discord에 알림을 전송하는 예제를 다룹니다.

 

2. 원리

discord에서 제공하는 webhook기능을 이용하여 알림을 전송합니다.

 

3. 준비

3.1 jenkins 플러그인 설치

다행히 jenkins에서 discord 알림 플러그인이 있습니다. 플러그인 이름은 Discord Notifier입니다.

 

3.2 discord webbhook주소 생성

jenkins 플러그인에서 사용할 webhook주소를 생성합니다.

 

 

4. jenkinsfile

이 글에서는 jenkinsfile을 예제로 설명합니다.

 

post stage에서 discord notifier플러그인을 사용하면 됩니다. 성공메세지는 success stage에 실패메세지는 failure메세지에 설정합니다. discord notfier플러그인 사용방법은 discordSend함수를 사용하면 됩니다. webhookURL 은 필수인자이고 나머지는 옵션입니다.

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {                
                echo "hello world"
            }
        }
        
    }
    post {
            success {
                discordSend description: "알림테스트", 
                  footer: "테스트 빌드가 성공했습니다.", 
                  link: env.BUILD_URL, result: currentBuild.currentResult, 
                  title: "테스트 젠킨스 job", 
                  webhookURL: "{webhook주소}"
            }
            failure {
                discordSend description: "알림테스트", 
                  footer: "테스트 빌드가 실패했습니다.", 
                  link: env.BUILD_URL, result: currentBuild.currentResult, 
                  title: "테스트 젠킨스 job", 
                  webhookURL: "{webhook주소}"
            }
        }
}

 

stage가 성공하면 초록색 라벨, 실패하면 빨간색 라벨로 표시됩니다.

 

5. credentials과 함께 사용

[챕터 4]에서 사용한 jenkinsfile은 discord webhook주소가 하드코딩되어 있습니다. 알림기능을 한개 job만 사용하면 상관없지만, 다수의 job에 사용한다면 jenkins credentials화 함께 사용하는 것이 좋습니다.

 

"secret text"유형으로 credentials을 생성합니다.

environemnt에서 생성한 credentials을 변수로 정의합니다. 그리고 discordsend함수에서 env.{변수이름}로 변수를 사용할 수 있습니다.

pipeline {
    agent any
    environment {
        WEBHOOK_URL = credentials("DISCORD_WEBHOOK")
    }
    stages {
        stage('Hello') {
            steps {
                echo "hello world"
            }
        }
        
    }
    post {
            success {
                discordSend description: "알림테스트", 
                            footer: "테스트 빌드가 성공했습니다.", 
                            link: env.BUILD_URL, result: currentBuild.currentResult, 
                            title: "테스트 젠킨스 job", 
                            webhookURL: env.WEBHOOK_URL
            }
            failure {
                discordSend description: "알림테스트", 
                            footer: "테스트 빌드가 실싪실실패했습니다.", 
                            link: env.BUILD_URL, result: currentBuild.currentResult, 
                            title: "테스트 젠킨스 job", 
                            webhookURL: env.WEBHOOK_URL
            }
        }
}

 

참고자료

jenkins 공식문서(Cleaning up and notifications): https://www.jenkins.io/doc/pipeline/tour/post/

discord notifier 플러그인: https://www.jenkins.io/doc/pipeline/steps/discord-notifier/

공백

반응형