Jenkins로 배우는 CI/CD 파이프라인 구축
1. Install and Run Jenkins With Docker Compose
2. Jenkins Pipeline 개념 및 예제
3. Github WebHooks 연동하여 Jenkins 빌드 자동화
4. Jenkins Multibranch Pipeline: 효과적인 브랜치 관리와 CI/CD 구축
GitHub Webhook을 사용하여 GitHub 리포지토리에 커밋이 발생할 때 Jenkins에서 자동으로 빌드되도록 설정해 보겠습니다.
1. Github Personal Access Token 생성
Github private repository 를 이용하고 있으므로 먼저 GitHub 개인 액세스 토큰을 생성해야 합니다.
- GitHub 웹사이트에서 프로필 아이콘을 클릭합니다.
- 드롭다운 메뉴에서 "Settings"를 선택합니다.
Personal Access Tokens 메뉴로 이동합니다.
"Settings" 페이지에서 좌측 메뉴에서 "Developer settings"로 이동합니다.
1. Personal access tokens 클릭
2. Tokens(classic) 클릭
3. Generate new token 클릭
4. Generate new token (classic) 클릭
repo 와 admin:repo_hook 를 선택해 주고 Generate token 버튼 클릭
토큰이 생성되면 보안 상의 이유로 토큰 값을 복사하여 안전한 장소에 보관하는 것이 중요합니다. "복사" 버튼을 클릭하여 토큰 값을 클립보드에 복사한 후, 안전한 장소에 붙여넣기하여 기억해 두시면 됩니다. 이렇게 안전하게 토큰 값을 관리하면 나중에 Jenkins 설정에 사용할 수 있습니다.
2. Jenkins Credentials 생성
이제 생성한 GitHub Personal Access Token을 Jenkins에 등록하도록 하겠습니다.
Jenkins 관리 클릭 > Manage Credentials 클릭
Domains밑에 있는 (global) 클릭
Add Credentials 버튼 클릭
Username은 Github ID를 적어줍시다.
Password는 위에서 생성한 Github Personal Access Token 를 입력해 주면 됩니다.
ID필드에 식별 가능한 자격 증명 ID를 입력합니다.
다 입력해 주고 Create 버튼을 클릭해 주면 됩니다.
3. Github Repository Webhook 생성
이제 Jenkins와 연동할 Github Repository에 들어가서 Webhook를 생성하겠습니다.
Settings 클릭 > Webhooks 클릭 > Add webhook 버튼 클릭
Payload URL에 젠킨스주소에 /github-webhook/ 를 추가해서 입력하면 됩니다.
Content type 은 _application/json_를 선택해 주고 Add webhook 버튼을 클릭하면 webhook이 생성됩니다.
만약에 Jenkins를 로컬에서 실행했다면 로컬환경을 인터넷으로 노출해줘야 합니다.
ngrok
를 이용하면 로컬에 구성한 환경을 외부에 공개할 수 있습니다.
Mac OS 기준으로 아래와 같이 할 수 있습니다.
1. ngrok 설치
brew install ngrok/ngrok/ngrok
2. authtoken 추가
ngrok 사이트에서 로그인하면 authtoken를 준다. 해당 토큰을 설정에 추가해 주면 됩니다.
ngrok config add-authtoken <token>
3. http 터널링
로컬 웹서비스가 8080 포트에 실행되고 있다면 다음과 같이 실행하면 됩니다.
ngrok http 8080
4. 아래와 같은 메시지를 확인할 수 있는데 Forwarding옆에 나와 있는 *.ngrok.io
URL를 Payload URL 에 젠킨스 주소로 입력해 주면 됩니다.
4. Github Repository 에 Pipeline script 추가
아래와 같은 Pipeline script를 Jenkinsfile로 Github repository에 추가하였습니다.
pipeline {
agent any
stages {
stage('build') {
steps {
echo 'building the application...'
}
}
stage('test') {
steps {
echo 'testing the application...'
}
}
stage('deploy') {
steps {
echo 'deploying the application...'
}
}
}
}
5. Jenkins pipeline 생성
GitHub project 클릭하고 Project url를 입력하면 됩니다.
- branch 부분은 없이 project url를 입력해야 합니다.
- 예시) https://github.com/rails/rails
GitHub hook trigger for GITScm polling 클릭
Pipeline script를 Github repository에 생성하였으므로 Definition에서 Pipeline script from SCM를 선택합니다.
SCM은 GIT으로 선택하고
Repository URL를 입력하고 Credentials 위에 생성한 것을 선택하면 됩니다.
Branch Specifier 에서 ****job를 빌드할 브랜치를 선택하고
Github repository에 Pipeline script 가 있는 Path를 Script Path에 입력하면 됩니다.
저장 버튼을 누르고 해당 Github repository에 커밋을 발생시키면 Pipeline이 실행되는 것을 확인할 수 있습니다.