Github 특정 repo의 branch로 push를 하게 되면 Jenkins에서 빌드가 진행 되도록 해보겠다.
# 도커 터미널 접속
docker exec -it jenkins_cicd bash
# ssh 키 저장을 위한 디렉토리 생성
cd /var/jenkins_home
mkdir .ssh
cd ./.ssh
# ssh 키 생성
ssh-keygen -t rsa -f key
# ls -l 명령어 결과
root@0f25c71d18db:/var/jenkins_home/.ssh# ls -l
total 8
-rw------- 1 root root 2602 Jan 28 13:53 key
-rw-r--r-- 1 root root 571 Jan 28 13:53 key.pub
root@0f25c71d18db:/var/jenkins_home/.ssh#
이제 이 키를 Jenkins에 등록해보자.
Jenkins 관리
-> Manage Credentials
클릭
(global)
위체에 화살표를 누르면 Add credentials
버튼을 누르면 다음 화면으로 넘어간다.
Kind
아래의 Selector에서 SSH Username with private key
를 누르고 -> username
입력 -> Private Key
에 아까 위에서 cat
명령어로 결과를 copy 해서 붙여넣으면 된다.
정상적으로 등록되었다.
생성한 공개키를 /var/jenkins_home/.ssh/key.pub
에서 cat
명령어로 출력해서 copy 한다.
https://github.com/{username}/{repo}/settings/keys/new
로 들어가서 Key 제목과 내용을 입력 해준다.
Key 등록 완료 화면
이제 Commit 시 Jenkins에 알림이 가도록 webhook
을 설정 할 것이다.
Jenkins에서 해당 기능을 사용하기 위해서는 plugin으로 github plugin
이 설치되어 있어야 한다.
기본 Plugin 설치를 했다면 따로 설치를 할 필요가 없다.
https://github.com/{username}/{repo}/settings/hooks/new
로 이동해서webhook
을 추가하도록 하겠다.
해당 링크로 가서 Payload URL
항목에 [IP:PORT]/github-webhook/
을 입력 후, 다른 옵션은 건드리지 않고 바로 Add webhook
버튼을 눌러 추가해준다.
Github에 SSH 키 설정과 WebHook 설정이 끝났다.
그전에 내가 빌드를 테스트 하기 위한 환경 구성이 필수적이다.
# jenkins container 터미널 접속
docker exec -it jenkins_cicd bash
# node 16 테스트를 위한 준비
apt-get update -y
curl -sL https://deb.nodesource.com/setup_16.x | bash -
apt install -y nodejs
이제 빌드를 위한 Job을 생성한다.
Jenkins 메인 화면에서 새로운 Item
버튼을 눌러준다.
원하는 item 이름을 입력하고 Freestyle project
을 선택 후 OK
버튼을 눌러준다.
소스 코드 관리 탭으로 이동.
Repository URL
: git@github.com:{username}/{repo}.git
붙여 넣어준다.Credentials
: git 접근을 위한 ssh 키를 등록한 user 선택Branch Specifier
: push 된 내용을 탐지할 branch들을 추가해주면 된다.(여러개 가능)빌드 유발 탭으로 이동.
GitHub hook trigger for GITScm polling
체크.Build 탭으로 이동.
Add build step
버튼을 눌러서 Execute shell
을 눌러준 뒤 빌드에 필요한 코드를 작성해주면 된다.이제 테스트를 진행할 레포지토리에 commit을 push를 해보도록 하겠다.
좌측 하단에 보면 #1은 빌드 테스트 코드를 잘못 작성하는 바람에 테스트 실패가 되었다.
이후 다시 코드를 수정하고 Build 탭에 Excute Shell 코드도 수정 한 뒤 결과를 보니 정상적으로 완료되었다.
우선 Github와 Jenkins의 연동 작업은 끝났다.
하지만 이것만으로는 CI/CD가 아니다.
CD의 배포가 되는 것까지를 목표로 해야하기 때문에 다음 글에서 진행해도록 하겠다.