GitHub Webhook을 이용해 Jenkins Job을 자동 실행하기

2020. 3. 31. 22:53배포

 Github에서 이벤트가 발생할 때 어떤 동작을 해야할 경우 (ex: Pull Request의 발생, 이슈 생성 등) Github에서 제공하는 Webhook을 사용해 Jenkins Job을 자동으로 실행할 수 있습니다. 당연한 이야기지만 Github에서 Jenkins Job을 호출하기 위해서는 Jenkins가 외부에 공개되어 있어야 합니다.

Webhook이란

 Webhook은 어플리케이션이 다른 어플리케이션에 실시간으로 정보를 제공하는 방법입니다. Webhook은 실시간으로 데이터를 가져오기 위해 꽤 자주 polling 해야 하는 다른 API와 달리 다른 어플리케이션에 데이터를 즉시 전달하므로 데이터를 바로 얻을 수 있습니다. Webhook의 유일한 단점은 처음에 Webhook을 설정하는 어려움입니다. Webhook은 API 스펙에 해당하므로 “역방향API”라고도 하며 Webhook을 사용하기 위해서는 API를 설계해야 합니다.

Jenkins Security 설정

 Jenkins Job을 외부에서 URL로 실행하기 위해서는 Jenkins관리 > Configure Global Security에서 CSRF Protection 설정 체크를 풀어줘야 합니다. 이렇게 하면 외부에서 Job에 대한 트리거링이 가능해집니다.

Jenkins Job 생성

 Jenkins 메인 화면에서, New Item 메뉴를 선택합니다. 그리고 Freestyle Project를 선택하고 Job의 이름을 적어줍니다.

 Github project에 체크한 뒤, 프로젝트 url을 적어줍니다. 이는 Github Repository의 주소와 같습니다.

 소스 코드 관리 탭에서 Git을 선택합니다. Repository URL에는 clone에 쓰이는 url을 넣어줍니다. Github Repository 페이지에 가시면 clone or download에서 주소를 복사할 수 있습니다. url의 형태는 https://github.com/유저네임/프로젝트명.git 입니다. 그리고 나면 빨간 글로 Credential을 설정하라는 문구가 나오는데 여기서 Add 버튼을 눌러줍니다.

 여기서 다양한 방법으로 credential을 설정할 수 있는데 가장 간단한 방법인 Username with password로 설정해 보겠습니다. username에는 Github 아이디를, password에는 패스워드를 입력하시면 됩니다. Username은 Github 아이디가 아닌 Github profile에 들어가면 프로필 사진 아래 볼드 처리된 것입니다.

 아래로 내려가 빌드 유발 창에서 Github hook trigger for GITScm polling을 체크해줍니다.

 Build 탭으로 내려갑니다. 여기서 Webhook으로 진행할 작업을 설정해주고 Jenkins Job을 설정해 줍니다.

Github webhook 설정

 이제 Github에서 Webhook을 설정해 줍니다. Github repository에서 settings > webhooks 에서 add webhook을 클릭합니다.

 Payload URL에는 Jenkins주소/github-webhook/ 을 입력합니다. 참고로 마지막에 / 를 빼먹으면 안 됩니다. 그 이외의 기본 설정은 그대로 두고 add webhook을 클릭하면 Github의 Webhook 설정이 끝납니다.

 이렇게 설정을 다 한 뒤에 Github에 push를 하면 설정된 Jenkins Job이 자동 실행되는 것을 볼 수 있습니다.

728x90

'배포' 카테고리의 다른 글

Git Flow  (0) 2020.03.24
Jenkins  (0) 2020.03.19
배포와 CI/CD  (0) 2020.03.19