2023. 2. 16. 23:49ㆍ기술 창고/CI, CD
Jenkins 와 Git 의 Webhooks 를 연동하고 프로젝트를 push 하였는데 Jenkins에서 캐치하지 못하여 자동적으로 빌드가 되지 않았다.
그래서 Jenkins 에서 잘못 설정된 것인지 Git 에서 잘못 설정된 것인지 확인해보기로 했다.
우선 Jenkins 에서 지금 빌드를 눌러 수동적으로 빌드가 정상적으로 진행되는지 확인해보았는데 정상적으로 빌드되는 것을 확인할 수 있었다.
따라서 Jenkins 쪽에는 이상이 없다고 판단했다.
이번엔 Git 레포지토리로 가서 Settings의 Webhooks 항목에 에러 표시가 나있는 작업 이력을 확인해보았다.
확인해보았더니 We couldn't this payload: failed to connect to host 라는 에러가 발생하였다.
해당에러가 발생한 원인은 wifi로 인터넷을 연결을 해서 IP 가 정적이지 않아서 발생된 문제라고한다.
나는 컴퓨터 환경은 공유기 하나로 wifi를 연결하여 진행하고 있는데, 공유기에는 진짜 나의 컴퓨터 ip 주소(공인 ip)가 할당되어있다.
이 공유기를 통하여 wifi를 사용하는 사람들은 그곳에서 파생되는 가짜 ip(사설 ip) 주소를 할당받는다.
이 사설ip는 wifi에 접속할 떄마다 동적으로 바뀌기 때문에 Webhooks 에 지정한 ip주소가 고정되지 않아 발생되는 이슈라고 보면 될 것이다.
이 에러를 해결하기 위해서는 크게 두 가지가 있다.
(1) wifi 를 해제히고 본 컴퓨터에 랜선을 연결하여 고정된 ip 주소로 실행 해보는 방법
(2) ngrok를 이용하여 none 포트포워딩 서버를 만들어 실행해보는 방법
나는 랜선 포트가 없는 노트북을 사용하고 있기 때문에 1번 방법은 불가능하였다.
따라서 2번 방법으로 해결해보기로 했다.
Jenkins 추가 설정
ngrok를 사용하기에 앞서 Jenkins에 빠진 설정을 추가로 해주자.
만든 Jenkins 프로젝트애 들어가서 구성을 눌러 진입한다.
소스 코드 관리 항목에서 Jenkins가 적용될 branch를 추가로 등록해준다.
처음에는 master branch만 적용하여 map branch에서 작업하고 push 하였는데 되지않았었다.
따라서, Jenkins가 적용되어야할 branch가 있다면 Add branch를 누르고 branch명을 적어 반영시켜주자.
ngrok 사용
우선 ngrok 사이트에 들어간다.
ngrok installer를 다운받는다.
다운을 받은 뒤 반드시 압축 해제하고 installer를 실행해야한다.
installer를 실행하면 위와같은 프롬프트 화면이 나오고 명령어 ngrok http {포트번호} 를 입력한다.
포트번호는 나는 혹시 몰라서 Jenkins url 주소 포트번호로 지정하였다.
명령어를 입력하면 위와같은 화면으로 전환된다.
여기서 봐야할 부분은 Forwarding 부분이다.
io 로 끝나는 주소가 중요하다.
이제 Git 레포지토리의 Settings -> Webhooks 항목의 에러가 났었던 설정된 ip 주소로 다시 돌아와서 Payload URL 부분을 방금 ngrok 프롬프트에서 받은 io 주소로 바꿔준다.
이때 주의해야할 것은 io뒤에 /github-webhook/ 경로를 추가해주어야한다.
추가해주지 않으면 ngrok 프롬프트에서 403 Forbidden이 발생하여 Jenkins에서 캐치를 하지 못한다.
Content type은 application/json 타입으로 변경해준다.
또한, 나는 ngrok 프롬프트에서 Forwarding 주소가 https 밖에 존재하지 않아 https 주소로 넣어주었는데 혹시나 적용된 ssl 때문에 진행이 되지 않을까봐 ssl 을 Disable 시켜주었다.
아까 에러가 났었던 작업을 다시 Redeliver 한다.
해당 에러가 사라지고 응답에 200 번이 뜨면서 정상적으로 작업이 진행되었음을 알 수 있다.
ngrok 프롬프트에서도 확인해보면 200번이 뜨면서 정상적으로 진행되었음을 확인할 수 있다.
Jenkins에서도 정상적으로 빌드되었다!
이번에는 다시 프로젝트에서 간단하게 코드를 수정하고 push를 해보았다.
정상적으로 실행되었다.
+ 추가 내용
ngrok 를 사용할 때 Session Expired 시간 (만료 시간) 이 정해져있다.
이 시간이 지나면 다시 ngrok를 다시 실행해서 주소를 재발급 받아야 하기 때문에 번거로울 수 있다.
따라서, 편의성을 위해 ngrok 만료 시간을 없애 주도록 하자.
https://dashboard.ngrok.com/get-started/your-authtoken
먼저 위의 ngrok 사이트에 들어가서 계정을 생성한다.
나는 구글 아이디로 생성하였다.
생성 후 다시 위의 사이트로 들어가면 위와 같이 토큰이 발급되었다.
해당 토큰을 가지고 만료시간을 없앨 것이다.
ngrok 가 켜져있다면 다시 껏다가 켜주도록 하자.
다시 실행한 ngrok 프롬프트에서 명령어 ngrok http {포트번호} --authtoken {발급받은 토큰} 을 입력하면 위와 같은 화면으로 전환된다.
보면 Session Expires 항목이 사라지고 생성한 내 계정명이 보이는 것을 확인할 수 있다.
이제 다시 Git 레포지토리의 Settings -> Webhooks 항목에서 Payload URL을 바꿔주면 된다.
'기술 창고 > CI, CD' 카테고리의 다른 글
[CI / CD] Jenkins 와 Git 연동 (0) | 2023.02.15 |
---|---|
[CI / CD] Jenkins 설치 (0) | 2023.02.08 |
CI / CD (0) | 2023.02.08 |