2012-01-10 6 views
2

다음과 같은 문제점이 있습니다. svn 저장소에서 서버를 배포하기 위해 자동 업로드를 구성해야하지만 몇 가지 기능이 필요합니다.쉘을 통해 배포 할 svn 체크 아웃

# $1 - project; $2 - version (optional) 
# rm -rf $projectDir 
if [ "$2" == '' ]; then 
    svn export $trunk $projectDir --force >> $log 
    version=`svn info $trunk | grep Revision | awk '{print$2}'` 
    svn copy $trunk $tags/$version -m "created while uploading last version of $1" 
    echo "New stable version #$version of $1 is created 
    Uploading to last version is completed successfully" 
else 
    version=$2 
    svn export $tags/$version/ $projectDir --force >> $log 
    echo "Revert to version #$version is completed successfully" 
fi 

echo $version > $projectDir/version 

chown -R $1:$1 $projectDir 

그러나 svn의 수출이 SVN 파일을 통해 삭제 삭제하지 않습니다, 그래서 수출 전에 디렉토리마다 청소해야합니다 내가 쓴 방법이있다. 좋지 않아. 이 전 , 나는 다음과 같이 배포를 위해 체크 아웃 작업 :

svn co $trunk >> $log 
cp -ruf trunk/* $projectDir 
svn info $trunk | grep Revision > $projectDir/version 
chown -R $project:$project $projectDir 
echo "uploading finished" 

아주 잘하고 아주 아주 빨리 수출보다는 (이 변경된 파일 만 변경)하지만,이 작품 :

  1. 자동 태그없이 창조;
  2. 멋진 되돌릴 기회가 없습니다.

현실이 아닌 다른 저장소 디렉토리 (트렁크/일부 태그)에서 하나의 디렉토리를 체크 아웃하려고했기 때문에 나의 마지막 스크립트에서는 작동하지 않습니다.

그래서, 질문 :

  1. 나는 체크 아웃하기 전에 프로젝트를 재배치 할 수 있습니까?
  2. 내보 내기 전에 diff가 co 버전과 기존 버전을 찾을 수 있습니까?
  3. diff 결과로 수행 할 수있는 작업은 무엇입니까? (내보내기 후에 불필요한 파일을 제거 하시겠습니까?)

감사합니다.

+0

쉘은 프로젝트 서버에 있지만 svn 서버는 외부에 있습니다. – extempl

답변

1

Capistrano을 평가 해 보셨나요? 그것은 당신이 달성하고자하는 것을 많이 할 수 있습니다.

+0

저는 Capistrano에서 newbee이고 Ruby에 익숙하지 않지만 너무 어렵지 않습니다. 그러나 간단한 작업을 위해 거대한 도구를 사용해야합니까? 카피 스트라 노가 다른 일을하지 않는다는 것을 의미합니다. > 배포 할 때마다 "releases"디렉토리 아래에 새 디렉토리가 만들어지고 거기에 새 버전이 배치됩니다. 그런 다음 "현재"심볼릭 링크가 해당 디렉토리를 가리 키도록 업데이트됩니다. 다른 폴더에 매번 프로젝트 전체를 업로드하기 때문에 심볼릭 링크로 같은 방식으로 작업 할 수 있으므로 더 빨리 작업 할 수 없습니다. – extempl

+0

이 경우 필요한 모든 것은 디렉터리가 있는지 확인하고 그렇지 않은 경우 내보낼 수 있습니다. 그 후 symlinks 소스 만 변경하십시오. 하지만 가장 간단한 방법입니까? – extempl

+0

또한, 마지막 내보내기에서 파일이 변경되지 않은 경우에도 내보내기가 커밋을 수행하는 또 다른 순간이 있습니다. 이렇게하면 무한한 수의 중복 버전을 만들 수 있습니다. 체크 아웃은 모든 배포에 이상적이지만 위의 문제점을 설명했습니다. – extempl

관련 문제