[INFRA / EC2 /Jenkins] 서버 자동 배포 A to the Z (4) - 젠킨스 빌드 가시화 및 Slack 연동

sammy·2024년 8월 16일
0

INFRA

목록 보기
7/7
post-thumbnail

잘못된 부분 지적 및 피드백은 큰 힘이 됩니다 😃


이번 포스팅에서는 젠킨스 빌드 스테이지를 가시화하여 볼 수 있도록 설정하고, 빌드 성공유무를 Slack 채널 알림으로 받아볼 수 있도록 설정해보도록 하겠습니다.

젠킨스 빌드 스테이지 가시화

1. 플러그인 설치

  • Jenkins 관리 화면에서 Manage Jenkins -> Manage Plugins -> Available로 이동합니다.
    • Pipeline Stage View Plugin을 검색하여 설치합니다. 이 플러그인은 파이프라인의 각 스테이지에 대한 실행 시간을 시각적으로 보여줍니다.
      이미지 설명

2. Jenkinsfile 구성

  • 이미 Jenkinsfile을 사용 중이라면, 별도의 수정 없이 "Pipeline Stage View" 플러그인이 자동으로 각 빌드에 대해 그래프를 생성합니다.

3. 파이프라인 뷰 확인

  • Jenkins 프로젝트로 이동하면, Pipeline 섹션 아래에서 시각적인 뷰를 확인할 수 있습니다.
    • 각 스테이지별로 얼마나 시간이 걸렸는지, 어떤 스테이지가 실패했는지 등을 다음과 같이 시각적으로 확인할 수 있습니다.
      이미지 설명

젠킨스 Slack 채널 연동

1. Jenkins에 Slack 플러그인 설치

  1. Jenkins의 관리 페이지로 이동합니다.

  2. Jenkins 관리 -> Manage Plugins로 이동합니다.

  3. Available 탭에서 Slack Notification Plugin을 검색하여 설치합니다.

    이미지 설명
  4. 설치가 완료되면 Jenkins를 재시작합니다.

2. Slack에서 Jenkins 앱 설정

  1. Slack 워크스페이스에서 앱 디렉토리로 이동합니다 (https://slack.com/apps).

  2. Jenkins CI 앱을 검색하고 추가합니다.

    이미지 설명
  3. Jenkins CI 앱을 추가한 후, 연동할 채널을 선택합니다.

  4. 설정 후, Slack에서 Jenkins에 사용할 Incoming Webhook URL을 생성합니다. 이 URL은 Jenkins가 Slack으로 메시지를 보낼 때 사용됩니다.

3. Jenkins에서 Slack 설정

  1. Jenkins 관리 페이지에서 Jenkins 관리 -> Configure System으로 이동합니다.

  2. 페이지 하단으로 스크롤하여 Slack 섹션을 찾습니다.

  3. 다음과 같은 정보를 입력합니다:

    • Workspace: Slack 워크스페이스 이름을 입력합니다.

    • Credential: Incoming Webhook URL을 설정할 때 생성된 토큰을 입력합니다.

      이미지 설명
    • Default Channel / Channel: 기본적으로 메시지를 보낼 Slack 채널을 설정합니다 (예: #general).

    • Integration Token Credential ID: Slack에 설정한 토큰을 Jenkins의 Global Credentials로 추가(global > Secret text)하고, 해당 Credential ID를 여기 입력합니다.

      이미지 설명
  4. 설정을 저장합니다.

4. Jenkins Pipeline에서 Slack 알림 설정

이제 이전 포스팅에서 작성한 Jenkins Pipeline에서 특정 이벤트에 Slack 알림을 추가할 수 있습니다. 다음과 같이 빌드 성공 및 실패 시 알림을 보내는 파이프라인을 추가합니다.

pipeline {
    agent any

    environment {
        DOCKERHUB_CREDENTIALS = '직전에 만든 dockerhub 식별 ID'
        REPO_URL = 'https://github.com/your-repository.git'
        IMAGE_NAME = 'your-dockerhub-username/repository-name'
        SLACK_CHANNEL = '#알림가길원하는slack채널'
        SLACK_CREDENTIALS_ID = 'CREDENTIALS등록한ID'
    }

    stages {
        stage('Checkout') {
            steps {
                git url: "${env.REPO_URL}", branch: 'your-branch', credentialsId: '직전에 만든 github-accesskey 식별 ID'
            }
        }

        stage('Build Gradle') {
            steps {
                dir('your-gradlew-folder') {
                    sh './gradlew build -x test'
                }
            }
        }

        stage('Build Docker Image') {
            steps {
                script {
                    def image = docker.build("${env.IMAGE_NAME}:${env.BUILD_NUMBER}", "-f path/to/Dockerfile .")
                    docker.withRegistry('', "${env.DOCKERHUB_CREDENTIALS}") {
                        image.push()
                    }
                    sh """
                    docker images --filter=reference='${env.IMAGE_NAME}*' --format '{{.ID}}' | tail -n +4 | xargs -r docker rmi -f
                    """
                }
            }
        }

        stage('Deploy to Server') {
            steps {
                script {
                    sh "docker pull ${env.IMAGE_NAME}:${env.BUILD_NUMBER}"
                    sh "docker stop app-container || true"
                    sh "docker rm app-container || true"
                    sh "docker run -d --name app-container -p 8084:8084 ${env.IMAGE_NAME}:${env.BUILD_NUMBER}"
                }
            }
        }
    }

    post {
        success {
            slackSend(channel: env.SLACK_CHANNEL, color: 'good', message: "Build Successful: ${env.JOB_NAME} [${env.BUILD_NUMBER}] (<${env.BUILD_URL}|Open>)")
        }
        failure {
            slackSend(channel: env.SLACK_CHANNEL, color: 'danger', message: "Build Failed: ${env.JOB_NAME} [${env.BUILD_NUMBER}] (<${env.BUILD_URL}|Open>)")
        }
    }
}

5. Slack 알림 테스트

  • 위의 Jenkins 파이프라인을 실행하고, Slack 채널에서 알림이 제대로 오는지 확인합니다.
    이미지 설명

지금까지 완료하셨다면, Jenkins 기본 설정 및 가시화 그리고 Slack 연동까지 완료했습니다. 다음 포스팅에서는 SSL 인증서를 적용시켜 HTTPS 통신을 하도록 해보겠습니다.

profile
누군가에게 도움을 주기 위한 개발자로 성장하고 싶습니다.

0개의 댓글

관련 채용 정보