2012-03-25 4 views
1

Capistrano를 사용하여 PHP 웹 사이트를 배포하려고합니다. 이 웹 사이트는 4 개의 구성 요소 (프론트 엔드 코드와 3 개의 웹 서비스)로 구성되며 각 구성 요소는 자체 저장소에 저장됩니다. 나는 4 개의 구성 요소 모두를 단일 트리 구조 (아래 참조)에 배포하여 웹 사이트 버전 간 전환이 "현재"링크를 이동하는 것처럼 간단 할 수 있도록하고 싶습니다.Capistrano와 Git을 사용하여 하나의 트리에 여러 응용 프로그램 배포

기본적으로 Capistrano 배포는 단일 리포지토리를 배포하도록 설계된 것으로 확인되었습니다. 올바르게 이해한다면 Caphub과 같은 것을 사용해도 4 가지 구성 요소가 4 개의 다른 트리에 배치되어 특정 시점에 롤백을하는 것이 번거로운 프로세스이기 때문에 도움이되지 않습니다.

Capistrano를 사용하여 아래의 구성을 얻을 수있는 방법이 있습니까? 이 상황에서 가장 좋은 방법은 무엇입니까?

root/ 
| current/ 
| releases/ 
| | <timestamp/> 
| | | frontend/ 
| | | webservice-1/ 
| | | webservice-2/ 
| | | webservice-3/ 
| | <timestamp/> 
| | | frontend/ 
| | | webservice-1/ 
| | | webservice-2/ 
| | | webservice-3/ 
| shared/ 

업데이트 :

이 허용 대답에 제안으로 서브 모듈 솔루션을 사용하여 상처. 필자는 4 개의 하위 모듈을 보유하고있는 웹 사이트 리포지토리와 웹 사이트 배포 리포지토리를 만들어서 카피 스트라노 배포 파일을 보관합니다. 모든 배포에서 하위 모듈을 업데이트하는 번거 로움을 덜어주기 위해 간단한 쉘 스크립트를 작성했습니다 (상당히 번거로운 프로세스입니다!). 배포하려면 스크립트 (아래 소스)를 실행 한 다음 "cap deploy"를 실행하십시오.

#!/bin/sh 

git clone gitserver:path_to_git_repositories/website.git cloned 
cd cloned 
git submodule init 
git submodule update 
git submodule foreach git pull origin master # updating all modules to the current code in the master branch 
git submodule foreach git add . 
git commit -a -m "Updating submodules" 
git push origin master 
cd .. 
rm -rf cloned 
+0

새로운 접근 방식이 있습니다. 이 답변 http://stackoverflow.com/a/40921589/2067375를 참조하십시오. (면책 조항 : 나는 보석의 주인이다) –

답변

2

난 레일 응용 프로그램과 하나의 웹 서비스를 배포 할 때 매우 비슷한 문제가있었습니다. 나는 자식 서브 모듈을 사용하기로 결정 했으므로 모든 문제를 해결해야한다.

프론트 엔드 및 모든 웹 서비스를 서브 모듈로 추가하는 하나의 주 자식 저장소를 만들어야합니다. 그런 다음 capistrano에서이 메인 저장소를 가리키고 git_enable_submodules를 1로 설정하십시오.

그러면 4 개의 모든 구성 요소를 개별적으로 개발할 수 있으며 배포 할 때 하위 모듈을 수정하여 올바른 지점에 저장하고 기본 저장소를 커밋 할 수 있습니다. 이 접근법은 제시 한 것처럼이 디렉토리 레이아웃을 정확하게 제공해야하며 쉽게 롤백 할 수 있어야합니다.

1

Capistrano v3.6을 사용하여 3 개의 별도 Git 리포지토리로 구성된 웹 응용 프로그램의 기본 배포를 수행 할 때 동일한 문제가 발생했습니다.

내가 설명한 것처럼 서브 모듈 방식을 사용했지만보다 자동화 된 방식으로 v3 (게시물의 날짜를 보면 v2 일 수 있음)에 사용했습니다.

단계

  1. 1 개 캡 구성의 repo 및 서브 모듈로 주요 프로젝트 REPOS를 그룹화하는 또 다른 1 되세요.
    set :repository, 'submodules-repo-url'
  2. 하위 모듈을 지원하기 위해 Cap의 Git 전략을 바꿉니다 (v2 지원, v3에서 삭제).
    Find script here.
    set :git_strategy, SubmoduleStrategy
    위의 전략은 하위 모듈 업데이트를 처리하므로 단순한 Git repo와 같습니다.
    개요와 마찬가지로 현재 릴리스에서 하위 모듈을 별도의 폴더로 가져옵니다.
  3. cap deploy을 즐기십시오.

나는 블로그 게시물을 작성했으며 자세한 정보는 here입니다.

관련 문제