Capistrano에서 Git 하위 디렉터리 배포
-
09-06-2019 - |
문제
내 마스터 브랜치 레이아웃은 다음과 같습니다.
/ <-최상위
/ client <-데스크톱 클라이언트 소스 파일
/ server <-Rails 앱
내가하고 싶은 것은 내 deploy.rb
에서 / server 디렉토리를 풀다운하는 것입니다.하지만 그렇게 할 방법을 찾을 수없는 것 같습니다./ client 디렉토리는 방대하므로 / server를 /에 복사하는 후크를 설정하는 것은 잘 작동하지 않으며 Rails 앱만 풀다운하면됩니다.
해결책
더러운 포크 작업은 없지만 더 더러운 것!
내 config / deploy.rb에서 : 라코 디스
그런 다음이 새로운 전략을 Capfile에 추가했습니다. 라코 디스
다른 팁
Capistrano 3.0의 경우 다음을 사용합니다.
내 Capfile
:
라코 디스
그리고 내 deploy.rb
:
라코 디스
모든 중요한 코드는 release
를 사용하여 저장소의 하위 디렉토리 만 보관 한 다음 git archive
인수를 사용하여 적절한 수준에서 보관 파일을 추출하는 --strip
전략에 있습니다.
업데이트
Capistrano 3.3.3부터 이제 tar
구성 변수를 사용할 수 있으므로이 답변이 더 이상 사용되지 않습니다.예 :
라코 디스
http://capistranorb.com/documentation/getting-started/configuration 참조.
또한 Capistrano를 사용하여 전체 저장소를 복제하고 사용하지 않는 파일과 폴더를 삭제 한 다음 원하는 폴더를 계층 구조 위로 이동합니다.
deploy.rb 라코 디스
프로젝트가 너무 커지지 않는 한 이것은 우리에게 꽤 효과적이지만 가능하다면 각 구성 요소에 대한 자체 저장소를 만들고 git 하위 모듈과 함께 그룹화하십시오.
두 개의 git 저장소 (클라이언트 및 서버)를 갖고이를 "수퍼 프로젝트"(앱)에 추가 할 수 있습니다.이 "수퍼 프로젝트"에서 두 개의 저장소를 하위 모듈로 추가 할 수 있습니다 (이 자습서 ).
다른 가능한 해결책 (좀 더 더러운)은 클라이언트와 서버에 대해 별도의 분기를 갖는 것입니다. 그런 다음 '서버'분기에서 가져올 수 있습니다.
해결책이 있습니다.crdlo의 capistrano 용 패치 및 set :project, "mysubdirectory"
를 사용하여 하위 디렉토리를 설정할 수 있습니다.
유일한 문제는 github가 적어도 그가 작성했을 때 "아카이브 명령을 지원"하지 않는다는 것입니다.나는 svn을 통해 내 개인 git repo를 사용하고 있으며 잘 작동하지만 github로 시도하지 않았지만 충분한 사람들이 해당 기능을 추가한다고 불평한다면 상상합니다.
또한 capistrano 작성자가이 기능을 cap 관련 버그 .
@Thomas Fankhauser 답변에 기반한 Capistrano 3의 경우 : 라코 디스
안타깝게도 git은이를 수행 할 방법을 제공하지 않습니다.대신 'git 방식'은 클라이언트와 서버라는 두 개의 저장소를 갖고 필요한 저장소를 복제하는 것입니다.
이전 답변 및 github에서 찾은 기타 정보를 기반으로 Capistrano 3.x에서 작동하는 스니핑을 만들었습니다. 라코 디스
Github 에서 Gist로도 사용할 수 있습니다.
codebasehq.com에서도 작동하지 않는 것 같습니다. 그래서 저는 혼란을 정리하는 카피 스트라 노 작업을 만들었습니다. :-) 아마 카피 스트라 노 작업을 재정 의하여이 작업을 수행하는 덜 괴팍한 방법이있을 수 있습니다 ...
이 작업은 몇 시간 동안 작동했습니다. 라코 디스
디렉토리에 대한 변수를 선언 할 수 있습니다 (여기서는 rails_app).
얼마나 강력한 지 살펴 보겠습니다."before"를 사용하는 것은 매우 약합니다.