본문 바로가기

study_IT/DevOps

젠킨스(Jenkins) - GitHub Webhooks 연동

728x90
반응형

1. GitHub 액세스 토큰 생성 및 레포지토리 웹훅 설정

GitHub과 Jenkins를 연동하기 위해 아래 블로그 글을 참고하여 GitHub 액세스 토큰을 생성하고 레포지토리 웹훅을 설정합니다. 만약 payload URL 오류가 발생한다면, Jenkins 서버가 로컬 호스트인 경우 [ngrok](https://ngrok.com/download)을 사용하여 외부 접속 가능한 URL을 받아와 설정합니다. 공인 IP나 도메인을 사용하는 경우, Github에서 접근할 수 있도록 ACG를 설정하여 아래 IP의 접근을 허용합니다. IP는 변경될 수 있으니 Github webhook의 문서를 참고해야 합니다. (192.30.252.0/22, 185.199.108.0/22, 140.82.112.0/20, 143.55.64.0/20)

GitHub 액세스 토큰 생성 및 레포지토리 웹 훅 설정 블로그 참고 :

https://junhyunny.github.io/information/jenkins/github/jenkins-github-webhook/

2. Jenkins 플러그인 설치

Jenkins 대시보드에서 "Jenkins 관리"로 이동한 후 "플러그인" 에서 "GitHub Integration Plugin"을 설치합니다.

3. Credentials 등록

Jenkins 대시보드에서 "Jenkins 관리"로 이동한 후 "Credentials" 의 "Stores scoped to Jenkins" 섹션에서 "Global"을 선택한 뒤, "+Add Credentials"을 클릭합니다. Kind : Secret text, Scope : Global, Secret : [위에서 생성한 github access token] 입력 후 Create 하면 Credentials ID가 생성됩니다. ID를 임의로 입력하여 설정할 수도 있습니다.

4. System 구성

"Jenkins 관리"에서 "System"으로 이동하고, "GitHub" 섹션에서 Name : GitHub 계정 이름, API URL : https://api.github.com 입력, Credentials : 위에서 설정한 Credentials 선택 후 저장합니다.

5. Jenkins 파이프라인 프로젝트 설정

- "General" 섹션에서 "GitHub project"를 체크하고 GitHub 프로젝트 URL을 입력합니다.
- "Build Triggers"에서 "GitHub hook trigger for GITScm polling"을 체크합니다.
- Pipeline 스크립트 설정

pipeline {
  agent any

  tools {
    jdk 'openjdk17'
    git 'Default'
    maven 'maven3.9.5'
  }

  stages {
    stage('Checkout') {
      steps {
        git branch: 'master',
          credentialsId: '[GitHub 토큰을 저장한 credentialsId 입력]',
          url: '[GitHub 프로젝트 URL]'
      }
    }

    stage('Maven Build') {
      steps {
        script {
          // Maven 빌드 시 SSL/TLS를 사용하도록 설정
          sh 'mvn clean compile package -DskipTests=true -Dmaven.wagon.http.ssl.insecure=true 
          -Dmaven.wagon.http.ssl.allowall=true'
        }
      }
    }

    stage('Tomcat Deploy') {
      steps {
        // Tomcat에 배포
        deploy adapters: [tomcat9(credentialsId: 'deployer_admin', path: '', 
        url: '[공인 IP 혹은 도메인 URL]/manager/text')], contextPath: '/', war: '**/*.war'
      }
    }

    stage('Tomcat SSH Deploy') {
      steps {
        // Tomcat에 배포
        sshPublisher(publishers: [sshPublisherDesc(configName: 'eta-ssh', transfers: [sshTransfer(cleanRemote: false, excludes: '', 
        execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', 
        remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.war')], usePromotionTimestamp: false, 
        useWorkspaceInPromotion: false, verbose: false)])
      }
    }
  }
}

 

728x90
반응형