개인 Team 프로젝트(?) 진행을 하는데, php 밖에 모른다고 하는 팀원 때문에, php 로 개발 중입니다.
이 팀원이 요구사항이 많은 사람입니다. 첫번째 요구사항은, 요구사항을 local host 에서 테스트할 수 없으니 서버에 바로 반영하겠다라고 했습니다.
당연히 테스트가 안된 소스를 운영에 올릴 수는 없고,
현업을 해야하니,
서버에 바로 반영할 수 없고 git 설치로 별도의 형상관리를 두어 local test 후에,
서버에 반영해주겠다고했으나,
git은 해본적없고 하고싶지 않으니 svn을 해달라고 합니다.
두번째 요구사항인 svn 을 설정했더니 실서버에 바로 반영을 못한다면 개발서버를 구축해달라고했습니다.
그개발서버의 전제조건이, 커밋을 하면 바로 적용될 수 있는 개발서버입니다.
처음에는 젠킨스를 설치하고 뭔가하려고 했는데,
simple is best 라고,
그냥 hooks 기능을 사용하여 처리하려고 합니다.
SVN 에서 강제로 특정 경로로 export 하는 명령어입니다.
/home/svn/hooks
hooks 폴더의 post-commit 파일을 만들고,
해당 파일의 맨앞에 썻던,
svn export --force svn://url /home/svn/gnuboard5/txt
를 적용합니다.
훅(hook) 은 특정 이벤트가 발생하면 동작하는 프로그램을 의미하고, post-commit 은 커밋이 발생했을 때를 의미합니다. 훅 은 동작 방식에 따라 크게 2가지로 나눌 수 있습니다.
첫 번째는 이벤트가 처리되기전에 수행되는 pre-훅 으로, pre-훅 을 이용하면 커밋전에 커밋 메시지가 정책에 맞는지, 파일이 추가될 경우 파일형식이 저장소 관리 규칙에 맞는지 등을 검사하여 규칙에 어긋나면 커밋을 거부하게 동작할 수 있습니다.
다른 하나는 이벤트가 완전히 끝난후에 수행되는 post 훅 입니다.
이것을 이용하면 커밋이 완료되면 프로젝트 팀원들에게 메일을 보내거나,
지속적인 통합 서버에 통보하여 커밋된 내용을 업데이트하여 자동으로 빌드를 수행하거나 이슈 관리에서 커밋 내역을 인덱싱하는 등의 작업을 수행할 수 있습니다.
java 의 경우에는 별도의 shell 로 빼서, export 후 build 를 하거나 jar 로 묻거나 하는 별도의 컴파일이 필요하지만,
jsp 나 php 의 경우는 해당 경로에 바로 올려서 처리가 가능하므로,
간단하게 처리해서 제공해주었습니다.