레이블이 webhook인 게시물을 표시합니다. 모든 게시물 표시
레이블이 webhook인 게시물을 표시합니다. 모든 게시물 표시

github Invalid webhook signature error

# drone ci 에서 사용할 github webhook 생성했는데, 400 응답에 다음 에러 발생했다.
{"message":"Invalid webhook signature"}

# drone 용 webhook 설정시 필요 없는 secret 설정을 했고,
# 이후 secret 부분을 삭제하고 webhook 업데이트만 했는데 계속 에러가 발생했다.
# 이전 잘못된 secret 가 drone db 에 저장되어 있기 때문이다.

# 다음 링크를 보면 drone webhook 은 수동으로 설정할 수 없다고 한다.
# drone 이 secret 없는 webhook 에 응답해 secret 을 설정할 수 있도록해야 한다.

# 해결 방법
1. 기존 github webhook 을 수정하면 안되고 삭제 후 github webhook 새로 만든다. 이때 secret 는 비워둔다.
2. drone -> repositories -> 저장소 -> settings -> disable repository 후 다시 저장소를 찾아 active 시킨다.
3. drone 저장소 재시작 후 github webhook 의 secret 값이 자동 채워진다. 이제 push 하면 성공한다.


#####

# 추가로 github webhook 에서 다음과 같이 타임아웃 에러 발생시
We couldn’t deliver this payload: timed out

# drone 로그 메시지를 확인해보면
# drone configuration (.drone.yml) 파일을 찾지 못하는 경우 일 수 있으니
docker logs -f drone
{"commit":"xxxxx","error":"Not Found","event":"push","level":"warning","msg":"trigger: cannot find yaml","ref":"refs/heads/test123","repo":"ysoftman/test-drone","time":"2022-03-17T07:48:41Z"}

# drone -> 저장소 -> settings -> configuration 파일을 변경하자.

github jenkins webhook 사용

# github repository(저장소)에서 commit, push 등 이벤트가 발생할 경우 jenkins 로 알리는 webhook(웹훅)을 사용할 수 있다.

# 우선 jenkins 에서 github plugin 이 설치되어 있어야 한다.
https://wiki.jenkins.io/display/JENKINS/GitHub+Plugin

# 방법1
# jenkins job(잡) -> 구성 -> 빌드유발 -> Poll SCM 체크
# 이 방법은 주기적 폴링(체크)해야 하기 때문에 추천하지 않는다.

# 방법2
# github 저장소 설정에 jenkins hook url 을 설정한다.
github 저장소 -> setings -> integration&services -> add services -> jenkins(github plugin) -> jenkins hook url

# 그리고 jenkins job(잡) -> 구성 -> 빌드유발 에서 다음 항목을 체크한다.
GitHub hook trigger for GITScm polling

# 참고로 jenkins(github plugin) deprecated 되서 사용하지 않는것이 좋다.
Note: GitHub Services are being deprecated. Please contact your integrator for more information on how to migrate or replace a service with webhooks or GitHub Apps.

# 방법3
# 위 방법2은 github 저장소 설정에 jenkins(github plugin)를 다수 등록 수 없다.
# 그래서 2개 이상의 jenkins 서버를 사용하기 위해 웹훅으로 설정해야 한다.
# github 설정에서 web hook 추가
github 저장소 -> settings -> hooks -> webhooks -> add webhook
# 마지막은 /으로 끝나야 동작한다.
Payload URL : https://젠키스도메인/github-webhook/
Content type : application/x-www-form-urlencoded
Secret: 빈값
Let me select individual events.
Pull requests, Pushes ... 등 웹훅이 필요한 상황 체크
Recent Deliveries 에서 체크할 ping 결과를 테스트 할 수 있다.

# 그리고 jenkins job(잡) -> 구성 -> 빌드유발 에서 다음 항목을 체크한다.
GitHub hook trigger for GITScm polling

# pipeline 으로 구성한 잡의 경우 별도의 설정 없이 /github-webhook 으로 요청이 들오면 파이프라인이 시작된다.

# 이제 github(jenkins 잡에서 설정한 브랜치)에 푸시(github 에서 설정한 이벤트들) 이벤트가 발생하면 잡을 트리거할 수 있다.