[PagerDuty]Jenkins 파이프라인 실패 알림 설정하기

2025. 7. 30. 22:35·DevOps
반응형

배경 상황

주말에 장애 알림이 와서 확인했더니 배치 잡을 돌리는데 사용하는 젠킨스가 죽는 바람에 중요한 비즈니스 로직이 돌지 않고 있었다. 이걸 젠킨스로 돌리는 게 맞나? 라는 의문도 들지만 그 이전에 젠킨스에 모니터링 관련된 설정이 되지 않아서 알림을 못받고 있던 게 큰 문제였는데, 최근 PagerDuty를 도입한 김에 PagerDuty로 알림 설정을 하기로 했다.

 

 

PagerDuty에서 Jenkins 파이프라인 실패 알림 설정하기

1. Jenkins에서 PagerDuty 알림을 설정하려면 먼저 PagerDuty 플러그인을 설치해야한다. Jenkins에서 Jenkins 관리 > Plugins > Available plugins를 클릭하고, pagerduty를 검색해 다운로드 받는다.

 

2. 플러그인을 선택하면 활성화를 위해 Jenkins를 재시작해야 한다. 브라우저에서 "<jenkins URL>/safeRestart"로 접근해 안내 배너에 띄울 문구를 입력하고 Restart 버튼을 클릭해 실행중인 job이 모두 정지되거나 종료되었을 때 재시작될 수 있도록 한다.

 

 

3. 이제 PagerDuty 콘솔로 이동해 Services > Service Directory에 접근한다.

 

 

4. 연동할 PagerDuty 서비스가 기존에 생성되었다면 선택하고(8번부터 진행), 적절한 서비스가 없다면 New Service를 클릭해 서비스를 생성한다.

 

 

5. (서비스를 신규 생성하는 경우) 서비스 이름과 설명을 입력하고 Next를 클릭한다.

 

 

6. (서비스를 신규 생성하는 경우) 적절한 Escalation Policy를 신규 생성하거나 기존 Escalation Policy를 선택한다.

 

 

7. Integration에서 Events API V2를 선택하고 Service를 생성한다.

 

 

8. 생성한 서비스 이름을 클릭하고, Integrations 탭에서 Events API V2가 추가 되어있다면 드롭다운을 클릭하고, 없다면 Add another integration에서 Events API V2 를 추가한다. 그리고 Integration Key를 복사한다.

 

 

9. 다시 Jenkins로 돌아가 Jenkins 관리 > Credentials > Global 도메인을 선택한 후 Add Credentials를 클릭한다.

 

 

10. 다음과 같이 Integration Key를 크레덴셜에 등록한다.

  • Kind: Secret text
  • Secret: 위에서 복사한 Integration Key 값
  • ID: 환경변수에서 참조할 때 사용할 값. 나는 PagerDuty 서비스 이름과 동일하게 설정했다.
  • Description: 키에 대한 설명 작성

 

11. Pipeline 타입의 프로젝트일 경우 Jenkinsfile에 다음과 같이 실패 시 PagerDuty Incident 트리거 구성을 위한 post 블록을 추가한다.

  • credentialsId(필수): 위에서 등록한 credential ID
  • incidentSummary(필수): PagerDuty 알림 Title에 들어갈 값
  • trigger 조건: 실패 시 알람 받을 경우 triggerOnFailure: true 필드를 추가
  • incidentSeverity, incidentSource, incidentComponent, incidentClass, incidentGroup, dedupKey은 필수값은 아니지만 PagerDuty에서 알림 상세에 표시되는 값이므로 적절히 입력한다.
    post {
        failure {
            echo "빌드 실패: PagerDuty 알람 전송중..."
            script {
                withCredentials([string(credentialsId: '<위에서 등록한 credential ID>', variable: 'PD_KEY')]) {
                    def jobName = env.JOB_NAME
                    def buildNumber = env.BUILD_NUMBER
                    def buildUrl = env.BUILD_URL
                    
                    pagerduty(
                        routingKey: env.PD_KEY,
                        incidentSummary: "Build failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                        incidentSeverity: 'critical',
                        incidentSource: 'jenkins',
                        dedupKey: "${env.JOB_NAME}-${env.BUILD_NUMBER}",
                        incidentComponent: "${env.JOB_NAME}",
                        incidentClass: 'build-failure',
                        incidentGroup: 'jenkins-builds',
                        triggerOnFailure: true,
                    )
                }
            }
        }
    }

 

 

12. 만약 Pipeline타입이 아닌 Freestyle 타입의 프로젝트일 경우 파이프라인에서 구성을 클릭 > 빌드 환경 영역에서 Use secret text(s) or file(s) 체크박스를 활성화한다.

 

Secret text를 클릭한다.

Variable에 PD_KEY 를 입력하고, 위에서 설정한 Credential을 드롭다운에서 선택한다.

스크롤 다운 후 빌드 후 조치 영역에서 빌드 후 조치 추가 버튼을 클릭 > PagerDuty Incident Trigger를 선택한다.

아래와 같이 Routing Key($PD_KEY 환경변수 사용) 및 필요한 필드를 설정한다($JOB_NAME 등의 환경변수는 젠킨스에서 기본으로 제공됨).

 

 

13. 이렇게 구성하면 젠킨스 파이프라인 실패 시 아래처럼 PagerDuty에서 Incident & 알림이 발생하게 된다.

 

 

위 구성은 특정 Job이 실패할 경우의 알림이기 때문에 Jenkins나 인프라 자체에 문제가 생길 경우에는 알림이 아예 발생하지 않기 때문에 해당 알림 구성도 별도로 진행해야 한다.

저작자표시 비영리 동일조건 (새창열림)

'DevOps' 카테고리의 다른 글

[Harbor]레지스트리 로그인 실패 에러 해결 방법(Error: login attempt to harbor failed with status: 401 Unauthorized)  (0) 2025.08.24
[AWS]AI 학습용 크롤러 봇 리스트 및 WAF를 활용한 차단 방법(GPTBot, Meta, ClaudeBot, PerplexityBot , Google-Extended등)  (3) 2025.07.22
[Teleport]Proxy Pod가 NLB에서 Health check Failed 되는 이슈 해결 방법  (1) 2025.07.20
[Istio]헬름 차트 배포 후 Istiod Pod에서 "webhook is not ready, retry controller=validation" 에러 해결 방법  (0) 2025.07.19
[cert-manager]error instantiating route53 challenge solver: unable to construct route53 provider: empty credentials; perhaps you meant to enable ambient credentials?" 에러 해결 방법  (1) 2025.07.12
'DevOps' 카테고리의 다른 글
  • [Harbor]레지스트리 로그인 실패 에러 해결 방법(Error: login attempt to harbor failed with status: 401 Unauthorized)
  • [AWS]AI 학습용 크롤러 봇 리스트 및 WAF를 활용한 차단 방법(GPTBot, Meta, ClaudeBot, PerplexityBot , Google-Extended등)
  • [Teleport]Proxy Pod가 NLB에서 Health check Failed 되는 이슈 해결 방법
  • [Istio]헬름 차트 배포 후 Istiod Pod에서 "webhook is not ready, retry controller=validation" 에러 해결 방법
Canary_카나리아
Canary_카나리아
어쩌다 데브옵스 엔지니어가 된 문과생의 기록용 블로그
    반응형
  • Canary_카나리아
    release: canary
    Canary_카나리아
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • DevOps (67)
      • Programming (28)
      • Certifications (3)
      • ETC (20)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백엔드개발
    클라우드엔지니어자격증
    그라파나
    terraform
    백엔드
    네이버클라우드서비스
    자바개념
    argocd
    네이버클라우드자격증
    ncp서비스
    백엔드스쿨
    제로베이스
    spring
    kops란
    프로메테우스예제
    데브옵스엔지니어
    Prometheus
    kops사용법
    NCP자격증
    그라파나예제
    Java
    한빛출판네트워크
    백엔드공부
    클라우드자격증
    Grafana
    java개념
    개발자
    프로메테우스
    NCPprofessional자격증
    NCPassociate자격증
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Canary_카나리아
[PagerDuty]Jenkins 파이프라인 실패 알림 설정하기
상단으로

티스토리툴바