nc 명령으로 만드는 간단한 webhook 배포 서버

nc 명령이란?



nc는 netcat의 약자로 TCP, UDP의 원시 패킷을 읽고 쓰는 명령입니다.
예를 들어, netcat에서 HTTP 요청을 발행하려면 echo “GET / HTTP/1.0\n”와 HTTP 요청을 nc 명령으로 리디렉션하여 실행할 수 있습니다.

nc 명령은 클라이언트 측뿐만 아니라 -l 선택적으로 TCP 서버로 실행할 수 있으므로 여기에서 사용합니다.

webhook이란?



Webhook은 서로 다른 서비스간에 애플리케이션 업데이트 정보 등을 실시간으로 제공하는 개념이다.
예를 들어, GitHub에는 리포지토리에 push되었을 때에, 지정한 Webhook URL에 HTTP POST 리퀘스트를 보내 주는 기능등이 있다.

GitHub에 push되었을 때 자동으로 배포


nc -l는 요청을 받았을 때 요청을 표준 출력하고 exit하기 때문에 nc -l에 이어 명령을 쓰면 요청을 받은 타이밍에 명령을 실행할 수 있다.
이것으로,nc -l 8080 && git pull origin master && docker-compose down && docker-compose up -d —build 라는 바람에 실행하면 8080번 포트에 http의 리퀘스트가 오면 최신의 커밋을 취득해, 재기동할 수 있다.
그리고 8080에 대한 URL을 GitHub 리포지토리의 Webhook에 추가하면 자동 배포가 완성된다.

마스터 브랜치 만 자동 배포하고 싶습니다.



Master 브랜치만 배포하고 싶은 경우는 조금 절차가 번거롭게 된다. nc -l 가 표준 출력하는 내용은 원시 TCP이므로 HTTP Header와 HTTP Body가 개행으로 단락지어져 있는 것만이 출력된다

그 때문에, HTTP Header와 HTTP Body를 분할해, HTTP Body를 jq로 퍼스(GitHub로부터 보내 오는 Body는 JSON이기 때문에), 브랜치명을 취득해 master인가 어떤지 판단할 필요가 있다.

좋은 웹페이지 즐겨찾기