[Node.js] GitHub Webhook 을 이용하여 push 될 때 마다 자동으로 pull 하기


요새 한동안 vim 을 사용하여 서버에서 직접 작업하다가 오랜만에 IDE가 사용하고싶어져서 Atom 을 사용하고있다.
그나저나, Atom이 처음 나왔을때는 솔직히 별로라고 생각했는데 지금보니 꽤나 괜찮은 것 같다.
Atom에서 작업 후, push 하면 서버에서 자동으로 pull 하는 환경을 만들고 싶어서 Node.js 로 직접 Webhook 서버를 만들었다.

1. 환경

  • Linux
  • Nodejs

2. 시작하기

Github에 SSH Key 등록

이미지 3

당연하지만, 사용하고자 하는 컴퓨터의 SSH 키가 github에 등록되어있어야 한다. (그렇지 않으면 pull 할 떄 마다 ID/PW 를 입력해야하기 떄문)

등록되어있지 않다면, 다음 절차를 통해 키를 만들고 id_rsa.pub 의 내용을 github에 등록하면 된다.

참고로 passphrase는 비워놓아야한다.

root@codecatch:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c0:78:41:e9:6c:90:c4:9e:a4:c1:d4:ef:75:d3:4e:84 root@codecatch
The key's randomart image is:
+--[ RSA 2048]----+
| o.+.oo.   .     |
|  o *o..  E .    |
|   =.*+    o     |
|  . o.=.. o o    |
|     o .S. +     |
|      .     .    |
|                 |
|                 |
|                 |
+-----------------+
root@codecatch:~# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDiBrOINqUJEuMyekHdPhzH/uZTzxxaKp8u+FWWpKI7riL0r2oSPYtWGUyfXkVkvMspXoE6HMYdrL0vWueeV3kxcu2zFDjjrTwikZdPl9fTPKDe4fHh97OSnmeRoDPajs1dkXa7y2hmPVzRtVuVOe7vQPE38ZYUNglPeR7pS16EbP2ZB7NliULcbBxAu2IE+4ZjleVgC/l0ryX4yDyHB7dYL19w/npVQry2phw7IVOB84VGDLE192KwE4UIvjKvxpX+pMgztCVDKj9QBqLEvPjRggb1N2mi2aMDDEjETG9/fD/uWpeHoROY6BWdQWOeigJynXmuKAQ9GM0hPq+ixdZ3 root@codecatch

프로젝트 clone

자신의 컴퓨터에서 webhook 을 사용하기 위해 프로젝트를 clone 한다.

$ git clone https://github.com/velopert/nodejs-github-webhook.git

 

3. 설정하기

index.js 파일에서 서버의 포트와 비밀 키를 설정한다

var secret  = 'amazingkey'; // secret key of the webhook
var port    = 8081; // port

hook.sh 파일에서 git repository의 디렉터리를 설정한다.

# DIRECTORY TO THE REPOSITORY
REPOSITORY="./myRepository"

 

4. 서버 실행

$ npm start

 

5. Github repository Settings 에서  Webhook 설정

이미지 5

Payload URL 은 http://URI/push 이다. Secret 키는 index.js 에서 입력했었던 키를 입력한다.


이렇게 설정이 끝나면, push 할떄마다 서버에서 자동으로 pull 하는 환경이 완성된다.

서버를 background 에서 실행 할 수 있도록 screen 을 사용하면 유용하다.

  • 서재민

    서버컴퓨터에 nodejs app을 올려두고 작업하는 컴퓨터에서 git push 를 하면
    서버컴퓨터에서 자동을 git pull 이 되게하려면 위의 방법으로 설정하면 되는건가요?

    • 넵.

      참고로 프로젝트가 꼭 Node.js app 일 필요는 없고 위 코드를 도구로서 사용하는 것 입니다.

  • Yangeok

    1. 원격서버에서 ssh키를 생성했다면 그 파일내용을 똑같이 깃헙 ssh key에 복붙해 추가시켜주면 되나요??
    2. payload url 뒤에 붙은 /push 는 임의로 작성한거죠? 제 맘대로 작성해도 상관없는거죠?

  • 마틴튭

    혹시 특정 브랜치를 지칭할 수도 있나요?