위 화면처럼 git로 관리되는 프로젝트에서 .git/hooks 폴더를 보면 여러가지 샘플파일들이 있는 것을 볼수 있습니다. 파일명을 보면 대충 어떤 액션인지 볼 수 있는데 예를 들어 pre-commit.sample는 커밋전에 실행되는 쉘스크립트이고 post-commit.sample는 커밋후에 실행되는 쉘 스크립트입니다. 이 파일을 뒤에 .sample확장자를 삭제하고 pre-commit나 post-commit라고 저장해 두면 해당 액션이 실행될때 자동으로 쉘스크립트를 실행해 줍니다.
샘플파일을 열어보면 위와 같은데 일반적인 쉘 스크립트를 작성하면 됩니다. 저같은 경우는 커밋후에 자동으로 git push를 실행하려고 하기 때문에 아래와 같이 작성하였습니다.
#!/bin/sh
expect -c "
spawn git push origin master
expect \"Enter passphrase for key '/.ssh/id_rsa':\"
send \"RSA키\r\"
expect \"end\"
exit
"
exit
git push를 실행할 때 RSA에 대한 키를 입력해 주어야 하기 때문에 이를 자동화 하기 위해서 프롬프트에 자동으로 키값을 입력해 주어야 할 필요가 있기 때문에 찾아보니 Expect라는 것이 있어서 사용했습니다. 여러가지 찾아봤는데 프롬프트를 쉘스크립트에서 자동화 하려면 Expect밖에 방법이 없는것 같더군요. 설치되어 있지 않다면 설치해야 합니다.
위와 같이 expect를 이용해서 git push origin master를 실행하고 프롬프트가 나올경우 RSA키를 자동으로 입력하도록 작성하였습니다.(expect에 대해서는 저도 자세히 모르는데 검색하면 많은 자료가 나오더군요.)
이렇게 post-commit 파일을 저장해 두고 커밋을 수행하면 위처럼 자동으로 git push가 실행되는 것을 볼수 있습니다.
원하는 기능은 다 만들었는데 Gollum에서 웹으로 파일을 수정해서 커밋이 발생할때는 아직 githook까지는 지원하지 않더군요. 미리 확인못하고 이것부터 만들었더니 삽질을 했군요 ㅠㅠ
아싸님 안녕하세요
블로글 글 잘보고 있습니다 ,, 좋은 자료들 감사합니다.
현재 github를 이용해서 소스 디플로이 시스템 구축하는데요,
github 레포지토리에 client서버가 push하게되면 호스트서버에 자동으로 pull이 되게 하려합니다.
문제는 호스트서버의 hook쉘스크립트로 request가 안날라가네요 ㅠㅠ 허~~
답답합니다 ㅠㅠ
Github의 등록한 웹 훅이 동작하지 않는다는 말씀이신가요?
네
잘되던 훅이 안되니 답답하네요 ㅠㅠ
git hook에 필요한 acl도 다 열었는데 서버로 리퀘스트를 못날리네요;
등록된 url로 브라우저에서 직접 입력하면 되더라고요 ?
이렇게 장기간 안되는걸 보면 단순히 github의 장애는 아닌것 같은데요... 해당서버 혹은 IDC에서 해외 IP같은걸 차단한건 아닌가요?
Outsider님 안녕하세요..
포스팅을 보다가 잘 이해가 안가는 부분이 있어서 질문드립니다..
현재 세팅은 github를 주 저장소로 사용하고..
내부 서버에 redmine을 설치하여 사용하고 있습니다.
내부 서버에는 github 저장소를 --mirror로 클론하였습니다.
client에서 github로 push할 경우에 redmine에 commit 이력이 자동으로 갱신되도록 하고 싶은데,
웹훅 사용법을 잘 모르겠습니다.
다른 글들에는 hooks/post-receive를 등록하고,
redmine의 sys/fetch_changesets을 통해 리프레쉬하면 된다고 하는데,
이건 아무래도 내부서버에 git 저장소를 운용하는 경우라고 생각이 들고..
github의 웹훅을 이용해야 할듯한데.. (혹은 service hooks/redmine도 있던데)
위와 같은 기능을 하는 웹훅을 작성하려면 어찌해야 할까요?
도움 부탁드립니다..
저도 웹훅을 직접 작성해 보진 않아서 모르겠는데 지금 github에 레드마인 서비스훅을 이미 지원하고 있네요.
github 저장소에 설정에 가셔서 Service Hooks에 가시면 Readmine이 있습니다. 레드마인 써본지는 오래됐는데 여기서 주소 설정하시면 될듯합니다. 설명도 어느정도 자세히 나와있네요.