이 글은 젠킨스에서 github으로 부터 전달되는 payload를 받아서 사용하고 싶은데 괜찮은 플러그인이 없을까 해서 찾아보다가 알게된 방법을 적고 있다.
시작하기 전에 젠킨스가 외부(즉 깃헙)에서 접근이 되어야 하기 때문에 외부 도메인이 필요한데, 나는 집에서 젠킨스를 도커로 띄우고 있어 외부 도메인이 없었다. 나같이 테스트 환경에서 테스트하고 싶은 사람들은 "ngrok"을 통해서 외부 도메인을 연결해주면 된다.
Ngrok 설치 및 실행 (젠킨스 외부 도메인 오픈)
1. mac인 경우 brew로 설치
brew install --cask ngrok
2. 8080포트를 ngrok 도메인에 연결
나는 현재 젠킨스를 8080으로 포트포워딩 해서 사용중이라 8080포트로 연결했다.
ngrok http 8080
처음에 사용하면 Session Expires가 존재하는데, ngrok에 회원가입하여 auth token을 입력해주면 시간 제한 없이 사용할 수 있다.
회원가입 후 나오는 토큰을 입력해주면 된다. (토큰 입력하는 방법은 두가지 존재)
# ngrok cli통해서 토큰 추가
grok config add-authtoken {YOUR_TOKEN}
# ngrok yaml에 직접 추가
# in ngrok.yml
authtoken: {YOUR_TOKEN}
3. ngrok 도메인으로 젠킨스 접속
위 도메인으로 젠킨스에 접속할 수 있다.
깃헙설정
1. credential 생성
github > Settings > Developer Settings > Personal access tokens > Tokens(classic)에서 토큰 생성
2. webhook 생성
위의 plugin 사이트에도 나와있지만 깃헙에서 젠킨스로 정보를 전달해 주기 위해 webhook url을 추가해주어야 한다.
token값은 필수값은 아니지만 token을 사용하고 싶지않다면 다음처럼 도메인에 계정정보를 입력해야한다.
http://user:passsword@example.org/generic-webhook...
webhook url : http://{JENKINS_URL}/generic-webhook-trigger/invoke?token=test
젠킨스에서 플러그인 설치
Jenkins 관리 > Plugins > Available plugins 에서 "generic Webhook Trigger Plugin"을 설치한다.
https://plugins.jenkins.io/generic-webhook-trigger/
Generic Webhook Trigger
Can receive any HTTP request, extract any values from JSON or XML and trigger a job with those values available as variables. Works with GitHub, GitLab, Bitbucket, Jira and many more.
plugins.jenkins.io
젠킨스에서 파이프라인 설정
Generic Webhook Trigger를 선택하고 payload로부터 입력받을 변수를 추가해준다.
일반적인 github push의 payload는 다음과 같다. (Webhook에서 Recent Delivers 탭에서 확인 가능)
예제에서는 ref변수 즉 브랜치 정보만 가져오도록 했는데 만약 사용하고 싶은 변수가 여러개라면 $.ref 대신 $ 이용해서 전체 가져올 수도 있다.
webhook에서 invoke?뒤에 잇던 token=test 에 들어가는 토큰값을 여기서 명시해준다. 토큰별로 젠킨스 잡을 나눠서 실행할 수 있다.
위의 Token과 아래 Token Credential은 동일한데 아래에는 secret text로 들어간다.
그외에 많은 내용을 설정할 수 있는데, 일단 동작 확인을 위해서 필수적인 값은 이정도이다.
나는 github에 jenkinsfile을 올려두고 해당 파일이 push되면 파이프라인이 빌드되도록 설정했다.
실행 확인
'CI CD > jenkins' 카테고리의 다른 글
[Jenkins] Jenkins에서 sonarQube 추가하기 (0) | 2023.09.04 |
---|