Jenkins 로 빌드 자동화하기 1 - GitHub 에 push 되면 자동 빌드하도록 구성

Jenkins 로 빌드 자동화하기 1 - GitHub 에 push 되면 자동 빌드하도록 구성

개요

  • GitHub private repository 에 소스를 push 했을때, Jenkins 서버에 webhook 을 날려서 자동으로 빌드가 되도록 세팅하는 과정을 알아본다.


1. GitHub Repository Setting

Private repository 에 있는 GitHub 소스를 Jenkins 에서 접근하기 위해서는 공개키 암호화 방식의 SSH key 세팅이 필요하다.

이 세팅을 통해 비공개 저장소에 id, pw 를 사용하지 않고 접근이 가능하다. 비공개 GitHub repository 에 push 된 코드를 젠킨스에서 읽어와서 빌드하기 위해서 필요한 과정이다.


1-1. GitHub Integration Plugin 설치

Jenkins 관리 > 플러그인 관리 로 가서 GitHub Integration Plugin 을 설치한다.


1-2. SSH Key Setting
$ sudo su -s /bin/bash jenkins
$ ssh-keygen

명령을 실행하면 public key 와 private key 가 생성되고, 생성된 public key 를 복사한다.

$ cat /var/lib/jenkins/.ssh/id_rsa.pub

자신의 GitHub private 저장소에서 Settings > Deploy keys 에서 복사한 공개키를 등록해준다.

deploy keys
deploy keys


1-3. Webhook Setting

Webhook 은 웹상의 Trigger 같은 존재다. GitHub 의 지정한 브랜치에 소스가 push 되면 webhook 으로 젠킨스에게 알려주어 빌드를 유발하도록 설정한다.

Settings > Integrations & services > Add service 에서 jenkins 로 검색해서 나오는 Jenkins (GitHub plugin) 을 등록한다.

Add Service from GitHub Repository Setting
Add Service from GitHub Repository Setting

다음 화면에서 아래와같이 http://YOUR-JENKINS-SERVER/github-webhook/ 을 Jenkins hook url 로 지정해주고 Active 에 체크한다. 나의 경우 http://build.oyabun.cc:8080/github-webhook/ 으로 등록했다.

참고한 다른 글들에서 마지막 / 를 빼면 안된다고 하는데 빼고 해보지는 않았다. (굳이 뺄 이유가.. ^^;)

Jenkins Webhook
Jenkins Webhook


2. Jenkins Project Setting

예제를 위해 my-first-jenkins 라는 이름으로 freestyle 프로젝트를 하나 만들었다.

2-1. GitHub Credentials

소스 코드 관리 탭에서 GitHub Repository 의 Clone with SSH 항목을 복사해서 Repositoy URL 에 입력한다.

소스 코드 관리 탭
소스 코드 관리 탭

입력만 하면 위와같이 Failed to connect to repository : … 오류가 난다. 접근권한이 없음을 의미하는데, 처음에 설정해 둔 private key 를 설정해줘야 한다. 오류 메시지 바로 아래 Credentials 항목 Add 버튼을 눌러 아래와 같이 세팅해준다.

Add GitHub Credential
Add GitHub Credential

Username 은 깃헙 계정명이고, ID 는 Jenkins 에서 사용할 이 Credential 에 대한 식별자이다. Passphrase 는 제일 처음 단계에서 ssh-keygen 수행시 입력한 passphrase 를 적어주면 된다.

그리고 나서 Add 버튼을 누르고, Credentials 에 본인이 방금 등록한 것을 선택해주면 오류메시지가 사라진다.

(그래도 사라지지 않는다면 jenkins 서버에 git 이 설치되어 있는지 확인)


2-2. 빌드 유발

빌드 유발 탭에서는 GitHub hook trigger for GITScm polling 를 선택해준다. 말 그대로 GitHub 의 hook trigger 를 받으면 빌드를 하겠다는 것이다.

빌드 유발 탭
빌드 유발 탭


2-3. 빌드 스크립트

Build 탭에서 Execute shell 에 테스트용 문구를 하나 넣어준다. 이 예제에서는 GitHub 의 Webhook 으로 Jenkins 에서 자동 빌드를 할 수 있도록 설정하는 것이 목적이므로, 실제 빌드 스크립트가 아닌 간단한 스크립트를 적어준다. 나중에 로그로 확인할 것이다.

Build Command
Build Command


3. 테스트

이제 모든 설정은 끝났으니 소스를 push 해서 Jenkins 에서 빌드를 수행하는지 확인해보자.

Git Push
Git Push

소스를 변경하고 Commit and Push 를 했더니,

빌드 대기 목록
빌드 대기 목록

왼쪽 네비게이션 바 아래 빌드 대기 목록에 my-first-jenkins 가 뜬다. Push 만 했지 Jenkins 관리화면에서는 아무것도 안했음에도 알아서 빌드작업을 수행한다.

그리고 잠시 기다리니까 빌드 실행 상태 창에 진행상황과 함께 #1 으로 my-first-jenkins 프로젝트가 뜬다. (아래 그림)

빌드 실행 상태
빌드 실행 상태

모두 끝나고 페이지를 새로고침 해주면, 원래 회색이었던 아이콘이 아래와 같이 파란색 공모양으로 변하고 최근 성공에 빌드넘버가 #1 으로 표시된다.

빌드 완료
빌드 완료

해당 프로젝트의 Console Output 으로 가보면,

Console Output
Console Output

아까 빌드 스크립트에 작성했던 GitHub hook trigger is working 명령이 수행된 것을 확인할 수 있고, Finished: SUCCESS 로 빌드가 성공적으로 이루어졌음을 알리는 로그도 함께 출력 되었다.

지금까지 AWS EC2 에 Jenkins 서버 구축하기 로 Jenkins 서버 구축과, GitHub 저장소에 Push 하면 자동으로 빌드하도록 구성까지 해 보았다.

다음 포스팅에서는
  • Jenkins Pipeline 사용
  • 빌드시 Jenkinsfile 의 pipeline script 를 읽어서 빌드
  • 빌드시 Docker Image 생성
  • 생성한 Docker Image AWS ECR 에 Push

하는 과정을 다루어 봐야겠다.


참고한 자료

Comments

Yaboong's Picture

Yaboong

오스카 쉰들러는 흔해빠진 기회주의자요 부패한 사업가였다. 그러나 거대한 악이 세상을 점령하는 것처럼 보일 때 그 악에 대항해서 사람의 생명을 구한 것은 귀족도 지식인도 종교인도 아닌 부패한 기회주의자 오스카 쉰들러였다.

Seoul, South Korea https://github.com/yaboong