Subversion 관련 질문 입니다.
안녕하세요. 지금까지 KLDP에서 글만 읽다가 오늘 처음으로 질문을 하게 되었습니다.
우선 버젼관리 Repository가 저장되어 있는 서버, 개발, 테스트 서버구조 다음과 같습니다.
(사실 구조라고 말할만큼 거창하지는 않습니다.)
개발 서버 <-----> Subversion Server가 설치된 서버 <-----> 테스트 서버
이런 경우 개발서버에서 개발을 하며 형상관리를 하게 됩니다.(commit, update)
이후 시간이 지나 테스트 서버에서 테스트를 진행해야 하는 경우 Subversion Server로 부터 Checkout을
받아 테스트를 진행해야 합니다. 이때 Subversion Server에서 체크아웃 받은 소스를 약간 수정해야 합니다.
예를 들어 Makefile의 CPPFLAGS(전처리기 플래그)부분의 매크로 정의 부분 같은 경우 또는 DB 계정 정보등을
수정합니다. 이렇게 수정한 경우 테스트 서버에서 Commit을 할수 없도록 처리하고 싶습니다.
테스트 서버에서 commit를 하고 개발 서버에서 Update받게 된다면 테스트 서버에서 수정한 매크로 및 DB 계정
정보가 개발서버에 적용되기 때문입니다.
물론 개발자들(저도 개발자이지만)에게 테스트 서버에서 에서는 절대 commit를 하지 말아라 하는 내용을 전달하면 되지만 사람이 하는 일이라 실수가 있을수 있기 때문에 원천적으로 svn client에서 commit명령어를 수행할 수 없도록 하고 싶습니다.
혹시 svn 자체적으로 차단할 수 있는 방법이 있는지 아니면 대체 방법이 있는지 궁금합니다. 아! 물론 다른 모든 명령어는 동작해야 합니다.^^
지금까지 읽어 주신 분들께 감사드립니다. 그럼 좋은하루 되세요.
1. svn server 에서
1. svn server 에서 권한을 제어할 수 있습니다.
2. 환경에 따라 달라지는 부분을 분리하고, deploy 관리 툴을 이용하시는 것도 고려해보세요.
아하
답변을 보니 정말 눈물이 나네요. 매번 SVN 서버 환경설정 파일을 편집하면서도 svn client에서 접근 제어를 할려고 했을까요. 답변 감사합니다.^^
1. 테스트용 서버에서
1. 테스트용 서버에서 svn checkout 으로 받지 마시고 svn export로 받으세요.
이렇게 되면 테스트서버에서 어떠한 작업을 하더라도 Repository서버에 commit을 할 수 없게 됩니다.
2. 테스트서버에는 테스트전용 스크립트를 미리 만들어두는 것이 좋습니다.
아래는 테스트 전용 스크립트의 시나리오 입니다.
1. svn export
2. export CPPFLAGS="blabla"( 테스트서버용 컴파일환경변수들을 넣어줍니다.)
3. make
4. make install
5. 프로그램테스트용 config 파일 생성
보통 스크립트 상단에 DB접속정보, 디렉토리 정보 등등을 넣어둡니다.
그리고 5단계 실행하는 부분에
#sed 's/dbhost/$DBHOST/'
이런 식의 치환문을 이용해서 config 파일을 만들어줍니다.
그렇지 않으면 export되는 위치 외부에 config 파일을 만들어두고 프로그램에서 인식하는 config파일의 위치에 복사를 하는 방법도 있습니다.
6. run_program
답변 감사합니다.
Checkout 하게 된다면 버젼 관리에 필요한 파일은 생성되지 않고 순수 버젼관리되고 있는 파일만 받게 되기 때문에 Commit할 수 없다는것은 알고 있었습니다. 그렇다면 개발 서버에서 소스레벨의 수정이 일어나게 된다면 다시 Export받은면 된다는 말씀이신가요? 그렇다면 말씀 하신 테스트 전용 스크립트에서 Export받은 부분을 삭제하는 부분도 추가 되어야 할 것 같네요.
그리고 세이군 분께서 말씀하신 부분에서 컴파일 환경 실행 환경에 관한 내용은 모두 환경변수로 빼라는 의미로 이해 했습니다. 이렇게 되면 Makefile에서 Recursive 메크로를 이용하면 Makefile에서 매크로 확장이 일어나 환경별로 다르게 컴파일 할 수 있겠군요.
또 Export되는 외부 위치에 config와 관련된 다른 스크립트, Makefile파일을 모듈화해서 자동으로 컴파일 환경을 구성하는것도 좋을 것 같습니다.
아무튼 답변 해주셔면 여러가지 생각을 해보았습니다. 감사합니다.
---지금 취중이라 제가 글을 어떻게 쎃는지 모르겠네요. 글 읽는 분들께 양해 부탁드립니다.
테스트서버에는
테스트서버에는 코드가 오래동안 남아 있을 필요는 없습니다.
테스트를 시작할 때 export로 시작하고 종료할 때 코드를 삭제하도록 처리하시면 됩니다.
buildbot에 대해서 알아보시는 것도 좋은 경험이 되실 것 같습니다.
buildbot은 원래 패키지 제작용 툴인데 실행을 시켜두면 정해진 주기에 따라 코드를 받아서 컴파일하고 설치용 패키지를 만들어줍니다.
마지막 절차가 패키지를 만드느냐? 시험을 하느냐?의 차이일 뿐 그 전단계 까지는 동일하니까 참고하시면 좋겠네요.
1. test 서버용 svn
1. test 서버용 svn 계정을 만들고, 그 계정은 read only로 하시면 되겠습니다.
ssh라면 group에서 빼서 write권한을 안주면 되고, svn serve로 돌린다면 설정파일에서 설정하면 되겠지요.
2.혹은 mod_dav_svn 등으로 read-only repository를 제공하고 거기서 체크아웃 받으셔도 됩니다.
3. 테스트 서버에서 '바꿔서' 돌려야 할 파일은 설정파일 인가요?
그렇다면 config.ini 라고 가정하고, config.ini.dist 로 이름을 바꿔서 저장소에 저장하며 config.ini는 저장소에서 뺍니다.
테스트 돌릴때는 받아서 config.ini로 복사하고 이 파일은 .svnignore에 등록해둡니다.
그러면 config.ini를 수정하더라도 커밋될 일은 없습니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
댓글 달기