개발/http, server

[ngrok | Jenkins] ci/cd 배포 과정에서 Jenkins까지 닿지 않을 때

prpn97 2023. 12. 23. 23:34

발단

  현재 깃헙에 커밋을 올리면 ngrok에서 포트 포워딩을 거쳐 젠킨스를 통해 ssh접속하여 배포하는 과정을 거치고 있다. 

  • 로컬에서 gitHub 에 push
  • github webhook에서 jenkins 서버로 이벤트 발생
  • jenkins는 github로부터 webhook trigger 이벤트를 수신하여 스크립트대로 빌드를 실행
  • 빌드 후, 결과 웹훅으로 알림

  나는 맥을 잘 끄지 않는 편인데.. 이유 중에 하나는 환경에 대한 세팅을 다시 하고 싶지 않은게 큰데, 이 ngrok 만 해도 avast security에 걸려서 새로 실행하려면 잠시 차단을 해제하고 실행도 해야 하고, 실행하고 나면 ngrok의 forward url이 변경되기 때문에 깃헙과 젠킨스에 다시 등록을 해줘야 하는 번거로움이 있다...  

  그래서 세팅해둔 대로 배포를 하고 잘 건들지 않다보니 이번에 다시 세팅하면서 무슨 문제가 생겼는지 커밋을 올렸을 때 배포가 되지 않는 문제가 생겼다. 

 

 

해결 과정

  일단 어디서부터가 문제인지를 찾아야 한다. 에러메세지가 어디에 나오는 것도 없고, 힌트는 ngrok에서 확인했을 때 404가 나온다.

마지막에 해결하고 200이 나온 것이고, 그 전에는 커밋을 올렸을 때 계속해서 404가 확인되었고, 젠킨스에서 수동으로 빌드를 하면 정상적으로 웹훅은 잘 발송되는 것을 확인했다. 

 

  그렇다는 것은 젠킨스에 깃헙을 연동하는 세팅이나, 웹훅으로 전송되는 부분은 문제가 없고, 커밋을 올리고 젠킨스에 도달하지 못하는 것으로 유추해볼 수 있다. 

  문제의 범위를 좁히고 나니 이거다 싶은 문제가 하나 있었다. 생각해보니 현재 젠킨스를 기본 포트인 8080포트로 두고 쓰고 있는데, ngrok을 실행할 때 ngrok http 8080이 아닌 ngrok http 80으로 실행하여 연결을 하니 닿지 않았던 것으로 파악이 됐다. 

 

  ngrok http 8080으로 실행하여 포워딩한 url을 젠킨스 url 로 적용시키고, 깃헙에 해당 Url을 웹훅으로 등록했더니 정상적으로 오는 것을 확인할 수 있었다. 

 

코멘트

  배포의 과정을 정확히 이해하는 것이 중요한 것 같다. 현재 Jenkins를 내 로컬에서 사용하고 있고, 다른 제 3자에게 로컬호스트라고 알려주는 것은 올바른 주소를 알려주는 것이 아니기 때문에 Jenkins에게 하나의 주소를 부여해야 했고, 그 방법이 ngrok을 통한 포트포워딩이다. 

  localhost:8080 을 ngrok의 url로 변환해야 Jenkins 주소를 부여하는 것과 같은데, ngrok http 80 즉, localhost:80의 주소를 변환하니 커밋을 올렸을 때 ngrok에서는 404가 나왔다. 80포트를 변환해서 url을 가져다줬더니 Jenkins의 8080주소가 아닌 다른 주소를 Jenkins에 넣은 꼴이다.

 

  결론은 github에서 커밋때문에 변동사항이 생겼을 때 github webhook을 통해 이벤트를 생성하고 Jenkins로 보내주는데, github에 입력한 url이 실제 Jenkins와는 다른 주소에 요청을 했기 때문에 404가 나온 것이고, 로컬 포트인 8080으로 생성한 url을 Jenkins와 github webhook에 등록시켰을 때 이벤트를 정상적으로 Jenkins에서 수신할 수 있는 것이다. 

 

 

 

728x90