2012-01-30 4 views
1

내 서버에 SVN Repo 설정이 있습니다. 포스트 커밋 후크 설정을 "DEV"폴더로 업데이트하여 변경 사항을 커밋 할 때 자동으로 내 "DEV"하위 도메인에 푸시합니다.svn post-commit hook : 특정 파일이 변경된 경우에만 업데이트

내가 준비가되면 지금 내가 "라이브"하위 도메인으로 푸시하는 쉬운 방법이 필요합니다. "라이브"하위 도메인은 동일한 서버에 있으며, 실제로 DEV와 동일한 svn update/... 명령이지만 다른 경로를 사용합니다.

내 repo에서 특정 파일을 가질 수 있다고 생각했는데이 파일을 변경 한 다음 포스트 커밋 파일에서 조건을 만들어 내 "라이브"디렉터리로 업데이트하십시오. 특정 파일이 변경되었습니다.

하지만 코드를 작성하는 방법을 모르겠습니다. 현재 내 게시물 커밋 파일은 다음과 같습니다 :

#!/bin/sh 

REPOS="$1" 
REV="$2" 

svn update /var/www/dev/public 

을 나는 그것이 기본적으로이해야 할 (그러나 올바른 구문을 분명히)

#!/bin/sh 

REPOS="$1" 
REV="$2" 

svn update /var/www/dev/public 
if (pushLive.txt has changed) { 
    svn update /var/www/live/public 
} 

누구나 어떤 제안이?

답변

2

이것이 가장 효율적인 방법인지 확실하지 않으며, 첫 번째 사례가 dir과 상관없이 "pushLive.txt"라는 파일에서 기술적으로 작동하므로이 파일을 재생하거나 파일이 고유한지 확인하십시오. ..

#!/bin/sh 

LOOK=/usr/bin/svnlook 
REPOS="$1" 
REV="$2" 

for changes in `$LOOK changed $REPOS | awk '{print $1 "=" $2;}'`; 
do 

    idx=`expr index "$changes" =`; 
    directory=${changes:$idx}; 
    action=${changes:0:$idx-1}; 

    case "$directory" in 
    *pushLive.txt) 
     case "$action" in 
     "U") 
      svn update /var/www/dev/test/public 
      ;; 
     esac 
     ;; 
    esac 
done 

exit 0 
+0

이 날 위해 작동하지 않습니다. 나는 오류가 발생했다 :'Warning : post-commit hook이 실패했다. (exit code 255) 출력이 없다 .' 나는 post-commit에 chmod + x를 사용하고 아파치를 다시 시작했다. 루프에 도달했는지 확인하기 위해'touch changedfile.txt'라는 줄을 추가했습니다. 그것은 만들어지지 않았다 – Wandang

+0

어리석은 질문 : 특정 설정/파일에 대한 코드 줄을 변경 했습니까? 예'* pushLive.txt'는'changedfile.txt'로 변경되어야합니다. 'svn update/var/www/dev/test/public'가 경로 등으로 변경되어야합니다. –

+0

아'''를 지우지 않았습니다. 그걸 시험 할거야. 고맙습니다. btw changedfile.txt는 스크립트가 if 문에 들어가는 지 테스트하기 위해 pushLive.txt 옆에있는 또 다른 파일입니다. – Wandang

3

업데이트가 오랜 시간이 걸릴 수 있으므로 post-commit hook을 통해이 작업을 수행하지 않습니다. 이는 사용자가 워크 스테이션을 다시 제어하기 전에 업데이트가 완료되기를 기다려야 함을 의미합니다.

Jenkins을 살펴보십시오.

젠킨스는 연속 빌드 서버이지만 빌드이 없어도 사용할 수 있습니다. 귀하의 경우에는 라이브 도메인에 대한 Subversion 저장소를보기 위해 사용할 수 있습니다. Jenkins가 해당 Subversion URL에 커밋을 감지하면 빌드 프로세스를 생성 할 수 있습니다. 귀하의 경우 라이브 서버의 파일을 업데이트 할 것입니다.

젠킨스를 실행하는 서버가 서버와 동일한 경우 젠킨스 작업 디렉토리를/var/www/live/public 디렉토리로 지정할 수 있습니다. 기본적으로 Jenkins는 $JENKINS_HOME/jobs/<jobname>/workspace 아래에 빌드 디렉토리를 만들지 만 Jenkins에서 지정할 수있는 옵션이 있습니다. 그렇다면 전혀 프로그래밍이 필요 없습니다. 이것은 post-commit hook으로 놀아 다니는 것보다 빠르고 쉽습니다.

그런데이 경로를 사용하는 경우 클린 디렉토리에 대한 새 업데이트를 만든 다음 디렉토리의 이름을 바꾸는 것이 좋습니다. 그렇지 않으면 Subversion이 서버를 업데이트 할 때 이전 버전과 현재 버전의 Subversion 개정판의 파일을 동시에 볼 수 있습니다. 업데이트가 수행되는 동안 누군가가 서버에있는 경우 문제가 발생할 수 있습니다.

+0

안녕하세요. 언뜻보기에 이는 장기적인 해결책 일 수 있지만 현재로서는 이렇게 설정하는 것이 너무 어려울 것입니다. 이것은 작은 서버이며 제한된 사용자이며 트래픽은 거의 없습니다. 특정 클라이언트 종류의 특정 도구.그 관점에서, (내가 생각하는) 간단한 포스트 커밋 훅은 이상적으로 보입니다. – slinkhi

+0

지금 당장은 SSH를 사용하고 "live"dir에 가서 svn 업데이트를 할 때마다 실제로 웹 인터페이스를 실제로 사용하는 소수의 고객을 제외하고 말 그대로 파일 반경이 거의 절반이고 예상되는 성장이 없습니다. 그래서 그래 ... 그냥 repo에서 특정 파일을 업데이 트하고 게시물 커밋 후크를 첨부하는 것이 가장 좋은 경로 같았 어 – slinkhi

관련 문제