Redmine gitolite doxygen
- Redmine과 gitolite를 이용하는경우 doxygen 을 자동화하는 방법
관련자료
- redmine :: http://www.redmine.org
- gitolite :: http://github.com/sitaramc/gitolite
- doxygen :: http://www.doxygen.org
개요
redmine과 gitolite를 사용해서 git를 연동하는 방법은 여기 에 이미 설명되어 있다. 이 문서에서는 이렇게 연동된 gitolite 의 저장소에 file이 commit 될때마다 gitolite 에서 제공하는 hook 기능을 이용해서 자동으로 doxygen 으로 문서를 만들고 확인하는 과정까지를 설명한다.
작동순서
기본적으로 작동되는 순서를 설명하고 각 순서대로 필요한 과정들을 순서대로 알아보도록 한다.
- redmine에서 관리되는 repository 에 파일이 존재하는 경우를 가정한다
- 특정한 계정을 시스템에 만들고 해당되는 계정에 virtual hosting을 건다
- 해당되는 계정에서 git checkout , doxygen문서만들기, 뒷처리 를 하는 shell script를 만든다
- redmine의 계정에서 post-action 을 원하는 repository 에 event 에서 작동하는 스크립트 작업을 한다
- 작업이 다 되고나면 작동을 테스트해서 doxygen 으로 생성된 문서가 web으로 제대로 보이는지 확인한다
사전주의사항
- 이 문서는 서버가 gentoo 라는것을 전제로 한다
- 이 문서에서 언급되는 web daemon 은 nginx 이다
- system 에 sudo 가 설치되어 있어야 한다
- doxygen에 대한 부분은 여기 를 참고해서 서버상에서 미리 작동되게 만들어놓아야 한다
- redmine 등은 portage 로 설치를 했다는것을 가정한다
- doxygen 작업을 진행할 계정은 미리 추가해놓도록 한다
- gitolite 는 gitolite v2 를 사용하는 것으로 기준한다.
작업내용
Level1::repository확인
시스템상 아래의 디렉토리로 가서 작업대상이 될 repository 를 미리 확인하도록 한다
$ ls -al /var/lib/redmine/repositories/
or
$ ls -al ~/repositories/
원하는 repository 가 존재한다면 다음 작업을 진행해도 된다.
Level2::virtual hosting
작업을 진행하기 위해 미리 준비한 계정에 nginx virtual hosting 을 설정하도록 한다.
server {
server_name web에서접근할도메인이름;
root /home/doxygen을사용할계정이름/public_html/;
if ($host ~ "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$") {
return 444;
}
location ~* \.(jpg|jpeg|gif|png|js)$ {
access_log off;
error_log off;
expires 30d;
}
}
해당되는 계정에서 public_html 이라는 디렉토리를 만들면 virtual hosting 을 할 준비는 끝나게 된다.
때에 따라서 index.html 을 넣어서 제대로 동작하는지 확인하면 좋다.
Level3::doxygen 을 위한 준비작업
준비된 계정에서 다음과같은 doxygen 설정파일은 미리 준비해놓고 script를 다음과같은 내용을 작성한다. 물론 내용은 사용자의 용도에 맞게 편집하면 된다.
#!/bin/sh
cd ~/
rm -rf ~/repository이름
rm -rf ~/public_html/*
git clone ssh://repository주소/repository이름.git
cd repository이름
git checkout branch이름
cd application
cp ~/doxygen설정파일 ./
doxygen doxygen설정파일
mv html/* ~/public_html/
rm -rf html
rm -rf doxygen설정파일
cd ~/
script 를 작동시켜서 doxygen 을 이용해서 문서를 만들어 그게 제대로 public_html 로 들어가는지를 확인하면 된다.
script 는 ~/ 에 위치시키도록 한다.
Level4::Redmine 계정에서 repository 에 post-action 설정을 위한 사전준비
visudo 라는 명령을 치면 sudo 에 대한 권한을 지정할수 있는 상태가 된다. 파일에서 제일 아랫줄에 다음과같은 내용을 추가한다.
redmine계정 ALL=(준비된계정) NOPASSWD: /home/준비된계정/doxygen_shellscript_name
위와 같은 내용을 추가한 후 저장하면 sudo 를 이용해서 명령어를 실행하게 할 준비는 끝난다.
Level5::Redmine 계정에서 repository 에 post-action 설정하기
redmine을 운영하는 계정으로 login 한다음 관리하는 repository 를 하나 대상으로 잡고 다음의 folder 로 이동한다
cd ~/repositories/projectname.git/hooks/
위의 디렉토리에서 post-update.sample 이라는 파일을 post-update 로 바꾸고 다음과 같은 내용으로 편집해서 저장한다.
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
sudo -u 준비된계정 /home/준비된계정/doxygen_shellscript_name
편집이 종료된 post-update 스크립트를 실행해서 스크립트로 인한 결과가 doxygen 결과를 처리하는 계정에서 제대로 처리되는지를 확인한다.
Level6::결과테스트
최종테스트를 진행하는것은 결코 복잡하지 않다.
평상시 git 를 이용해서 프로그래밍을 진행하는 작업계정으로 git commit 및 git push 를 진행하면 서버에서 해당되는 작업이 진행되어 doxygen 으로 인한 document 가 생성되면 된다.
생성된 결과물을 web browser로 확인해서 작업이 자동으로 진행되는것을 확인한다.
주의사항
- 이 문서는 gitolite v2를 대상으로 한 문서이다. 왜냐하면 redmine과 연동되는 gitolite plugin이 gitolite v2를 요구하기 때문이다. gitolite v3를 쓰게되면 redmine 버전을 2.0 이상으로 올려야한다.
- gitolite v3 는 아래쪽 참고자료에 있는 Link를 참고하도록 한다.
- doxygen 용으로 사용하기는 했지만 다른용도로 사용해도 상관은 없다. 관련된 script만 잘 짜주면 된다.
참고자료
- Gitolite에 대한 후킹 시스템 for gitolite v3-초벌번역 :: Gitolite에 대한 후킹 시스템 원본문서]
- gitolite v2 에서 hook 디렉토리에 대한 질문과 답변 :: http://stackoverflow.com/questions/11054194/per-branch-per-repo-commit-hook-in-gitolite
- gitolite v2 에서의 hook 메커니즘에 대한 내용 :: http://gitolite.com/gitolite/g2/hooks.html#hookchaining
- linux 에서 일반사용자1이 일반사용자2의 권한으로 스크립트를 실행하려고 할때 :: http://stackoverflow.com/questions/6905697/how-to-run-script-as-another-user-without-password