2011-11-10 2 views
0

그냥 내 첫번째 자식 후크를 작성하려고 가져옵니다. 나는 원격 원점을 가지고 있는데, 그걸 누를 때 포스트 - 수신 훅이 생겨서 라이브 서버와 git 풀로 ssh를 보내고 싶다. 이것이 끝날 수 있습니까? 좋은 접근입니까?자식 포스트받을 후크

좋아 내가 후크 발사있어 및 라이브 서버는 자식 풀을하고 있지만, 이미 최신의 말거야? 어떤 아이디어?

확실히 수행하지만 가장 좋은 방법 아닙니다 할 수

답변

0

. git pull을 사용하면 git이 가져와 작업 복사본에 병합합니다. 병합을 항상 빨리 감기로 보장 할 수 있다면 괜찮을 수 있지만 그렇지 않으면 충돌이 생겨 실제 서버의 배포 된 코드에서 해결 될 수 있습니다. 충돌이 발생할 가능성이 가장 큽니다. 끌어 오기를 사용하여 배포하는 또 다른 문제점은 끌어 오기에서 해당 지사가 이미 최신 상태라는 것을 알려주기 때문에 단순히 내역에서 이전 커밋으로 되돌릴 수 없다는 것입니다.

라이브 서버의 기본 저장소가 아닌 경우 .git 디렉토리의 데이터가 공개적으로 액세스되지 않도록 조치를 취해야합니다.

git checkout -f을 사용하지만 작업 디렉토리가 코드가 배포되어야하는 디렉토리로 설정된 라이브 서버의 베어 리포지토리에 후크를 통해 배포하는 것이 더 안전합니다. 이러한 시스템을 설정하기위한 단계별 지침은 here에서 찾을 수 있습니다.

+0

정말 좋은 접근 방식이 아닌 이유를 이해하지 못합니다. 잡아 당김이 자동이면 살아있는 사이트의 작업 복사본에서 어떻게 충돌 할 것입니까? 게다가, 당신이 관리하는 각 라이브 사이트에 대해 다른 맨손 사본을 갖는 것은 불필요한 관리 오버 헤드처럼 보입니다. –

+0

각 끌어 오기가 'HEAD'의 이전 상태에서 빨리 감기 인 경우 충돌이 발생하지 않습니다. 그러나 항상 그런 것은 아닙니다. 개발의 다른 분파에서 버전을 배포하고자 할 수 있습니다. 더 중요한 것은, 같은 브랜치에서 이전 커밋으로 되돌리려면 pull은 같은 상태로 남겨두고 당신이 이미 최신이라고 말해줍니다. –

+0

내 설정에서 내 로컬 컴퓨터가 내 원격 서버로 ssh 할 수 있습니다. 내 서버는 내 서버에 ssh 키를 입력합니다. 나는 두 가지 가지, 즉 살아 있고 dev가있다.내가 원점 dev에 푸시하면 개발자가 원 서버에서 작성한 업데이트가 업데이트되고 라이브 브랜치로 푸시하면 라이브 서버에 배포됩니다. 누구든지 공부할 수있는 simlar post-receive 후크 스크립트가 있습니까? – user1039523

4

예, 즉 수행 할 수 그래, 내 생각에, 그 좋은 방법입니다. 여기에 우리의 유스 케이스가 있습니다 : 저는 다른 그룹의 사람들을 위해 몇 개의 사이트를 유지하는 소규모 개발 그룹에서 일합니다.

각 사이트에는 베타 (모든 개발자를위한 샌드 박스), 스테이징 (게시자가 라이브로 가기 전에 콘텐츠 소유자의 변경 내용을 보여주는 곳), 교육 담당자가 새로운 콘텐츠 관리자를 교육하는 데 필요한 교육 및 모든 사람이 콘텐츠를 소비하기 위해가는 곳).

우리는 지점 이름을 기준으로 포스트받을 후크를 통해이 모든 환경에 배포를 제어 할 수 있습니다. 어디에도 배포되지 않는 '핫픽스'분기가있을 수 있지만 '베타'분기와 병합하면 베타 서버에 자동 배포되어 코드가 상호 작용하는 방식을 테스트 할 수 있습니다 다른 개발자의 코드로 망할 놈의 서버가 웹 서버에 SSH 및 자식 풀을 할 수 있도록

는이 작업을 수행 할 수있는 방법은 여러 가지가있다, 우리가 할 것은 설치하여 SSH 키입니다. 이것은 git @ gitserver의 공개 키를 git @ webserver의 authorized_keys 파일에 추가해야 함을 의미하며, 그 반대의 경우에는 수신 후크에서 브랜치를 구문 분석하고 'case'문을 작성합니다.

read line 
    echo "$line" | . /usr/share/doc/git-core/contrib/hooks/post-receive-email 
    BRANCH=`echo $line | sed 's/.*\///g'` 
    case $BRANCH in 
     "beta") 
     ssh [email protected] "cd /var/www/your-web-folder-here; git pull" 
     ;; 
    esac 

희망이 있습니다.

+0

나중에이 스크립트를 사용해 보겠습니다. 많은 감사합니다. – user1039523