본문 바로가기
CI.CD/Jenkins

[Jenkins] Slack 연동의 정석: 실시간 빌드 알림 봇 셋업 가이드

반응형

파이프라인 구축의 최종 목표는 '개발자가 배포에 신경 쓰지 않고 코드에만 집중하게 만드는 것'입니다. 배포 버튼을 누르고 빌드가 끝날 때까지 10분 동안 젠킨스 화면만 멍하니 쳐다보고 있다면 그것은 반쪽짜리 자동화입니다. 젠킨스가 빌드를 돌리는 동안 개발자는 커피를 마시거나 다른 코드를 짜고, 빌드가 끝나면 젠킨스가 알아서 사내 메신저인 Slack(슬랙)으로 성공/실패 여부를 보고하게 만들어야 합니다. 이번 [Jenkins 실무 완벽 가이드] 시리즈에서는 인프라 관리자와 개발팀 모두에게 사랑받는 Jenkins-Slack 실시간 알림 연동 및 커스텀 봇(Bot) 구축 기법에 대하여 3,000자 분량으로 아주 치밀하게 딥다이브 해보겠습니다.

📧 1. 왜 이메일 알림은 버림받았는가?

불과 몇 년 전만 해도 빌드가 터지면 젠킨스가 개발팀 전체 이메일로 [에러] 빌드 실패 알림 메일을 발송했습니다. 그러나 이메일은 실시간 확인이 어렵고, 스팸 메일함으로 빠지기 일쑤이며, 무엇보다 '팀원 간의 즉각적인 소통(장애 대응)'이 불가능합니다.

반면 Slack 특정 채널(예: #deploy-alerts, #backend-dev)에 알림을 쏘면 어떨까요? 모바일 앱으로 즉시 푸시 알림이 가며, 누군가 에러 메시지 아래에 댓글(Thread)을 달아 "제가 방금 푸시한 커밋 때문인 것 같습니다. 지금 바로 핫픽스(Hotfix) 올리겠습니다!"라고 즉각적인 장애 대응 커뮤니케이션을 시작할 수 있습니다. 이것이 바로 현대 데브옵스(DevOps)가 추구하는 ChatOps(채팅 기반 운영)의 핵심입니다.


⚙️ 2. Slack 앱 추가 및 Token 발급 (Slack 측 셋업)

젠킨스가 슬랙에 메시지를 쏘려면, 슬랙 채널 입장권(Token)이 필요합니다.

  1. Slack 좌측 하단의 [Apps (앱)] 메뉴를 클릭하거나 Slack App Directory 웹사이트로 이동합니다.
  2. 검색창에 Jenkins CI를 검색하고 앱을 워크스페이스에 추가(Install)합니다.
  3. 이 봇이 기본적으로 메시지를 쏘게 될 채널(Channel)을 하나 선택합니다. (예: #deploy-alerts)
  4. 추가를 완료하면 화면에 Integration Token (통합 토큰)이라는 긴 암호 문자열이 나타납니다. 이 값을 복사해 둡니다.

🔐 3. Jenkins 플러그인 설치 및 Credentials 등록 (Jenkins 측 셋업)

이제 슬랙에서 받아온 입장권을 젠킨스에 세팅할 차례입니다.

  1. 플러그인 설치: [Jenkins 관리] -> [플러그인 관리]에서 Slack Notification Plugin을 검색하여 설치합니다.
  2. 자격 증명 등록: 이전에 배웠던 Credentials 관리를 떠올려봅시다. 토큰은 민감한 보안 정보이므로 [Manage Credentials] 메뉴에 들어가서, Secret text 타입으로 방금 복사한 슬랙 토큰을 붙여넣고 ID를 slack-token이라고 저장합니다.
  3. 시스템 글로벌 설정: [Jenkins 관리] -> [시스템 설정(Configure System)]으로 들어가 맨 밑의 Slack 섹션을 찾습니다.
  4. Workspace 입력칸에 슬랙 워크스페이스 이름(예: my-company)을 적고, Credentials 드롭다운에서 아까 만든 slack-token을 선택합니다. Default channel 입력칸에는 #deploy-alerts를 적어줍니다.
  5. 우측 하단의 Test Connection 버튼을 누릅니다. Success가 뜨면서 슬랙 채널에 반가운 테스트 메시지가 날아왔다면 완벽하게 연결된 것입니다!

💻 4. 실무 파이프라인 코드: slackSend() 함수 응용

연동이 끝났다면 이제 14단계에서 배웠던 파이프라인의 post 섹션에 slackSend 함수를 결합할 차례입니다. 실무에서는 시각적인 구분을 위해 성공(초록색), 실패(빨간색), 취소(회색) 등 색상을 다르게 주고, 에러 발생 시 특정 개발자나 채널 전체를 호출(Mention)하는 기법을 씁니다.

pipeline {
    agent any
    stages {
        stage('Build') {
            steps { sh 'npm run build' }
        }
    }
    
    // 전체 빌드가 끝난 후 상태별 슬랙 알림 발송
    post {
        success {
            // 빌드 성공 시: 초록색(good) 바와 함께 조용히 보고
            slackSend (
                channel: '#deploy-alerts',
                color: 'good',
                message: "✅ [SUCCESS] ${env.JOB_NAME} 배포 성공!\n버전: #${env.BUILD_NUMBER}\n상세 확인: ${env.BUILD_URL}"
            )
        }
        failure {
            // 빌드 실패 시: 빨간색(danger) 바와 함께 채널 멤버 전체(@channel) 호출!
            slackSend (
                channel: '#deploy-alerts',
                color: 'danger',
                message: "🚨 [FAILURE] <!channel> ${env.JOB_NAME} 배포가 터졌습니다!\n버전: #${env.BUILD_NUMBER}\n원인 분석 로그: ${env.BUILD_URL}console"
            )
        }
        aborted {
            // 사용자가 수동 취소했을 때: 경고(warning/회색) 색상으로 알림
            slackSend (
                channel: '#deploy-alerts',
                color: 'warning',
                message: "⏸️ [ABORTED] 누군가에 의해 ${env.JOB_NAME} 배포가 취소되었습니다."
            )
        }
    }
}

💡 실무 꿀팁: 슬랙에서 멘션(Mention)을 날릴 때 @channel이나 특정 유저를 호출하려면 위 코드처럼 <!channel> 또는 유저 고유 ID인 <@U12345ABC> 형식으로 적어주어야 슬랙 봇이 멘션으로 제대로 인식하고 푸시 알림을 울립니다.


🎯 5. 마무리 및 다음 단계

지금까지 단방향의 답답했던 젠킨스를 실시간 소통이 가능한 최첨단 알림 봇으로 진화시키는 Slack 연동의 모든 것을 3,000자에 걸쳐 아주 꼼꼼하게 다루어 보았습니다. 이제 여러분의 개발팀은 배포가 잘 되었는지 물어보러 데브옵스 팀의 자리에 찾아올 필요 없이, 슬랙 채팅방 하나만 켜두면 됩니다.

지금까지 우리는 하나의 Jenkinsfile을 만들고, 하나의 Job을 만들어 브랜치를 빌드했습니다. 하지만 개발자가 새로운 브랜치(feature/login)를 만들 때마다 젠킨스 웹에 접속해서 "새로운 브랜치용 잡(Job)을 하나 더 만들어주세요"라고 요청한다면 어떨까요? 인프라 팀은 하루 종일 젠킨스 화면만 누르다 퇴근하게 될 것입니다. 이어지는 17단계 포스팅에서는 새로운 브랜치를 감지하면 젠킨스가 스스로 파이프라인을 복제하여 셋업해 주는 자동화의 끝판왕, 'Multibranch Pipeline (다중 브랜치 파이프라인) 구축 기법'에 대해 아주 치밀하게 파헤쳐 보겠습니다!

반응형