티스토리 뷰

Github plugin

Jenkins pipeline job의 경우 기본 github plugin으로는 job 실행이 되지 않는다.

물론 우회할수 있는 방법이 있긴하다.

우회방법은 아래와 같다.

  1. freestyle job을 생성 (해당 job은 build other projects를 post-build actions으로 지정)하고 아래 trigger 설정을 추가한다.

  2. projects to build에 지정된 job에 pipeline 선언 (사전에 pipeline Job은 생성되어 있다는 가정)

  3. 이후 github에 설정을 추가한다.

요약하자면 두개의 job을 생성한다.
하나는 freestyle job, 나머지는 pipeline job으로 생성하고 freestyle job에서 먼저 github plugin을 통한 webhook을
받고 해당 job이 완료됨과 동시에 pipeline job을 자동으로 실행하도록 하는것이다.

해당 job을 구별하는 방식은 scm section에 정의된 주소와의 매핑을 검사하는것으로 소개되어 있다.

테스트 해본 결과 특정 버전에서만 동작하는 경우가 발생되었다. 실제 테스트중인 현시점 최신버전(Jenkins 2.249.1)에서는 호출은 되나 job trigger가 되지 않았다. 해당 부분은 디버깅이 필요하여 추가적인 분석을 해볼 예정이다. 하여 버전 정보를 확인하고 테스트를 해볼거나 아래의 Generic Webhook plugin을 사용할 것을 추천한다.

Trouble shooting 방법

Generic Webhook Plugin

github plugin의 경우 pipeline에 대한 trigger는 제한적이다. 하여 generic webhook trigger의 사용을 권장한다.

Generic webhook trigger plugin을 설치하게 되면 Jenkins Job에서 아래와 같은 Build Triggers에 Generic Webhook Trigger 항목을 확인할 수 있다.

Job내에 Build Triggers 항목에서 Generic Webhook Trigger를 선택하고 아래 Highlight된 항목인 Token에 임의의 값을 추가한다.

위 예제는 간단한 Token을 이용한 webhook 호출이기에 highlight되어 있는 Generic Webhook Trigger 와 Token에 대한 설정만 추가하면 된다. 그리고 실제 호출될 URL은 위 예제에 나와있듯이

  • https://JENKINS\_URL/generic-webhook-trigger/invoke?token=jacobbaek-github-token 이런식으로 호출하면 된다.
    아래와 같이 실제 browser를 통해 호출해보면 정상적으로 호출되어 trigger되는 것을 확인할 수 있다.

  • 혹은 header 상에 token: jacobbaek-github-token으로 추가해도 되고

  • Bearer header로 Authorization: Bearer jacobbaek-github-token으로 추가해도 된다.

여기서는 Github과의 연동이기 때문에 1번째로 소개한 query parameter 방식으로 진행한다.

위와 같이 앞서 소개된 webhook url을 추가하고 webhook을 설정하게 되면 test용의 webhook이 발생된다.

이때 정상적으로 webhook 호출이 안되는 경우는 이유를 확인 및 해결하고 최하단에 보이는 실패된 delivery를 클릭하여 들어가 redelivery를 수행해보면 다시 webhook 호출을 수행하기 때문에 이를 통해 확인할수 있다.

참고로 Github Webhook은 다양한 event를 선택하여 webhook을 호출할수 있으며 다음과 같은 선택을 Github의 webhook 메뉴에서 할수 있다.

개인적으로는 Pull requests 나 Pushes 항목을 많이 사용중이라 해당 부분도 참고용으로 캡처된 화면을 추가하였다.

branch 식별 방법

Github 설정

Github에서 webhook 설정시 parsing 이 가능하도록 json 형태로 content type을 지정한다.

Jenkins 설정

아래와 같이 variable을 지정한다. (이는 원하는 값으로 지정하면 된다. 아래 optional filter에서 사용되니 두값만 맞춰주면 된다.)

또한 expression은 $.ref와 같이 지정한다. ref가 branch를 의미한다. (뒤에서도 나오겠지만 ref 항목에

아래는 앞서 post content parameters에 설정했던 variable에 실제 데이터를 가져와 regex를 통해 식별하는 과정이다.

이후 github webhook을 발생시켜보면 main branch 외에는 trigger가 되지 않음을 확인할 수 있다.

참고로 아래 print post content의 checkbox를 선택하고

실제 github의 webhook을 발생시켜보면 아래와 같이 실제 job 실행과 함께 webhook post에 대한 데이터를 확인할 수 있다.

'DevOps > System&Tools' 카테고리의 다른 글

Ansible run at the special point  (0) 2020.10.29
Jenkins Slave with SSH  (0) 2020.09.09
Jenkins Directories  (0) 2020.08.14
Jenkins Debugging  (0) 2020.08.13
How to use minio as Terraform backend  (0) 2020.05.28
댓글
댓글쓰기 폼