github & webhook ↔︎ jenkins

minkyung·2023년 9월 13일
0
post-thumbnail

Requirement

github 저장소의 브랜치들이 update 될 때, jenkins 이벤트 발생시키기


Options

There are multiple alternatives for automatic job management, including:

Use organization folders - create, update, and delete multibranch Pipeline folders and Pipeline jobs automatically (preferred)
Use multibranch Pipelines - create, update and deleted Pipeline jobs automatically
Use Pipeline - Manually defined Pipeline jobs for more control over the job management process.


Best Practice Video

(Github multibranch Pipeline)


Steps

  1. jenkins와 연결할 github repository 만들기
  2. github 프로필 > Settings > Developer Setting > Github Apps > New Github App
  • 기본설정: GitHub App name, Hompage URL, Webhook URL 설정

  • Repository permissions 설정:
    - Administration : Read-only
    - Checks : Read and write
    - Commit statuses : Read and write
    - Contents : Read-only
    - Metadata : Read-only
    - Pull requests : Read-only
  • Subscrive to events 설정
    - Check suite ✅
    - Check run ✅
    - Pull request ✅
    - Push ✅
    - Repository ✅
  1. Generate private key
  • pem key가 보관된 디렉토리에서 아래 명령어 실행
    openssl pkcs8 -topk8 -inform PEM -outform PEM -in jenkins-minkyung.2023-09-12.private-key.pem -out converted-github-app.pem -nocrypt
  • 그러면 converted-github-app.pem 라는 이름으로 된 pem key가 생성되고, 이 key를 사용할 것임
  • cat converted-github-app.pem | pbcopy
  1. Install App
  • 본인 어카운트 옆에 있는 install 버튼 클릭
  • github app을 설치할 repository 선택
  • install
  1. 다시 Jenkins로 돌아와서, Manage Jenkins
  2. Manage Credentials > Global Credentials > Add Credentials

    내용 다 넣고 아래에 Test Connection 해보면 연결됐는지 안됐는지 체크할 수 있음
    연결 되면 Success, Remaining rate limit : .... 이렇게 뜸
  1. New Item
  • 이름 정하고, Multiple brnch pipeline 선택
  1. New Item 설정
  • Branch Source에서 위에서 추가한 Credentials와 연결하려는 저장소 URL 입력
  • Validate 버튼 클릭
  • Save
  1. Jenkins 파일 작성하기
    아까 작성한 item 옵션 목록 중에 Build Configuration 설정이 by Jenkinsfile, Script Path: Jenkinsfile로 되어있다면 repository main 브랜치에 Jenkinsfile을 추가하자
    main 브랜치가 업데이트되면, main 브랜치에 있는 Jenkinsfile 내용대로 이벤트가 발생하고
    test-123 브랜치가 업데이트 되어도, 해당 브랜치에 Jenkinsfile이 없다면 브랜치 업데이트만 감지하고 어떠한 다른 이벤트가 일어나지 않음.

    pipeline {
        agent any
        stages {
            stage('Hello') {
                steps {
                    echo 'Hello..'
                }
            }
        }
    }

profile
프론트엔드 개발자

0개의 댓글