Capistrano를 사용하여 다른 깃 분기에서 배치
저는 Capistrano를 사용하여 RoR 애플리케이션을 배포하고 있습니다.코드베이스는 깃 저장소에 있으며, 분기는 개발에 널리 사용됩니다. 피스트노사용법라카사법▁cap를 사용합니다.deploy.rb
파일 설정, 그 중 하나가 배포할 분기입니다.
제 문제는 이것입니다. 마스터에서 새로운 지점 A를 만든다고 가정해 보겠습니다.배포 파일이 마스터 분기를 참조합니다.저는 A를 테스트 환경에 배포할 수 있도록 편집합니다.기능 작업을 마치고 A 지점을 마스터로 병합합니다.그 이후로deploy.rb
A의 파일이 더 신선하고, 병합되고, 이제.deploy.rb
마스터 분기 참조 A에서.다시 편집할 시간입니다.
수동 편집이 불필요해 보이는 경우가 많습니다. 매개 변수는 항상 현재 지점 이름과 일치해야 합니다.게다가 매번 설정을 편집하는 것을 잊기 쉽습니다.
이 프로세스를 자동화하는 가장 좋은 방법은 무엇입니까?
편집: 누군가가 이미 제가 필요로 하는 작업을 수행한 것으로 나타났습니다.
오늘 아침 저는 Git 저장소의 분기를 스테이징 서버에 배포할 기회가 있었지만 방법을 전혀 몰랐습니다.카피스트라노 소스 코드를 빠르게 검색해보니 세트를 사용할 수 있었습니다.
:branch "branch_name"
내 배포 스크립트에서.제가 해봤는데 효과가 있었어요.그런 다음 모든 지점에서 유사한 변경을 해야 한다고 생각했습니다.물론, 저는 게으른 놈이고 더 좋은 방법이 없을까 생각했습니다.git에 익숙하지 않은 경우 git branch 명령 출력은 로컬 컴퓨터에서 현재 체크아웃된 분기를 나타내는 별표와 함께 분기 목록입니다.예:
> git branch * drupal_authentication fragment_caching master
그래서 저는 출력을 구문 분석하고 현재로 표시된 분기를 검색하면 어떨까 생각했습니다.
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
이제 단일 공유 배포 스크립트를 통해 로컬 시스템에 현재 있는 모든 지점을 배포할 수 있습니다.
이것은 Capistrano >= 3.1과 함께 작동합니다.
이 줄을 에 추가합니다.config/deploy.rb
:
set :branch, ENV['BRANCH'] if ENV['BRANCH']
그리고 카피스트라노에게 다음과 같이 전화합니다.
cap production deploy BRANCH=master
이 솔루션은 Capistrano < 3.1:
# call with cap -s env="<env>" branch="<branchname>" deploy
set :branch, fetch(:branch, "master")
set :env, fetch(:env, "production")
Capistrano 3.1.0+를 사용하면 더 이상 이러한 기능이 작동하지 않습니다.대신, 그들의 논평된 지침에 따르면:
ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
하지만, 당신은 사용하기를 원하지 않습니다.ask
아니면 그것이 당신을 재촉할 것입니다.에 대신사야합니다해용합을 해야 합니다.set
.HEAD
는 최상위 분기이며, 'edge'라고 불립니다.다른 분기를 원하는 경우 대체HEAD
을 예: 이예름지점예().master
,staging
타기.
으로 예를 예를사용결내면리려론에서./config/deploy/production.rb
다음 행을 포함할 수 있습니다.
set :branch, proc { `git rev-parse --abbrev-ref master`.chomp }
... 또는
set :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
그건 그렇고.HEAD
기본 설정이므로 파일에 이를 명시할 필요가 없습니다.더 잘 사용될 수 있습니다./config/deploy/edge.rb
.
/config/deploy/staging.rb
다음 행을 포함할 수 있습니다.
set :branch, proc { `git rev-parse --abbrev-ref staging`.chomp }
... 또는
set :branch, proc { `git rev-parse --abbrev-ref test`.chomp }
알겠어요!
이러한 사례들이 향후 카피스트라노 사용자들에게 도움이 되길 바랍니다(^_^).
아래의 내용이 Cap 2 뿐만 아니라 Cap 3.11.0 13/10/18에서도 여전히 작동함을 확인할 수 있습니다.
deploy.rb / stage.rb에서:
set :branch, ENV['BRANCH'] || 'develop'
명령줄에서:
cap deploy BRANCH=featurex
이렇게 하면 기본 분기(환경에 따라 다를 수 있음)와 원하는 때에 분기를 변경할 수 있습니다.
다단계에서는 다음과 같은 기능이 있습니다.
cap production deploy -s branch=my-branch
이전 게시 구문이 사용자 환경에서 작동하지 않는 경우
또는 기본 분기와 환경이 있는 명령줄에서 구성하고 사용할 환경과 분기를 포함할 수 있는 한도 호출에 매개 변수를 전달할 수 있습니다.명시적으로 전달된 분기이거나 나열한 링크에 설명된 대로 현재 분기를 나타내는 매개 변수가 있을 수 있습니다.
#call with cap -S env="<env>" branch="<branchname>" deploy
...
# Prevents error if not parameter passed, assumes that default 'cap deploy' command
# and should deploy the master branch to the production server
set(:env, ‘production’) unless exists?(:env)
set(:branch, ‘master’) unless exists?(:branch)
if !env.nil? && env == "production"
role :web, "production_ip_address"
else # add more as needed
role :web, "development_ip_address"
end
if !branch.nil? && branch == "current"
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
elsif !branch.nil?
set :branch, branch
else # add more as needed
set :branch, "master"
end
...
카피스트라노 멀티스테이지를 사용하는 경우, 당신은 단지 실행하기만 하면 됩니다.
cap -s branch=$MY_BRANCH deploy
또는
cap -s branch=$MY_BRANCH production deploy
당신의 더 이상의 편집 없이.deploy.rb
.
이 명령은 더 이상 작동하지 않습니다.
cap deploy -s branch=your_branch
『 』에 대한 지원-sS
Capistrano v3+에서 플래그가 제거되었습니다.
여기에서 자세한 내용을 읽을 수 있습니다. 링크
몇 가지 답변에서 언급되었지만, 현재는 정확하지 않습니다.
것: 나게맞것는:deploy.rb
add
set :branch, ENV['BRANCH'] || :master
그런 다음 실행:
BRANCH=your_branch cap deploy
또한 이 명령을 성공적으로 실행하려면 마스터 분기에 있어야 합니다.
버전 3.3.5를 사용하고 있으며 다음 작업을 수행하고 있습니다.
set :branch, 'develop'
이 솔루션은 모든 버전의 Capistrano에서 작동해야 합니다.
def branch_name(default_branch)
branch = ENV.fetch('BRANCH', default_branch)
if branch == '.'
# current branch
`git rev-parse --abbrev-ref HEAD`.chomp
else
branch
end
end
set :branch, branch_name('master')
용도:
BRANCH=. cap [staging] deploy
# => deploy current branch
BRANCH=master cap [staging] deploy
# => deploy master branch
cap [staging] deploy
# => deploy default branch
방법 1: 배치를 위한 단계별 분기(예: 테스트, 생산) 설정
다놓을 .branch
단계 파일에서 'deploy.dll' 대신 구성하고 배포할 단계의 대상 분기를 설정합니다.
이름이 결된단가이진 2계앱경우.test
그리고.production
다음과 표시됩니다.
# app_root/config/deploy/test.rb
...
set :branch, "test"
...
# app_root/config/deploy/production.rb
...
set :branch, "production"
...
이 방법을 사용하면 단계별 분기에서 배포할 수 있습니다.따라서 기본 분기에서 최신 코드를 병합하거나 기본 코드를 재배치하는 추가 단계만 필요합니다.
방법 2: 분기에서 직접 배포(태그 사용)
또 다른 접근 방식은 태그를 사용하여 배포하는 것입니다.태그를 사용하여 배포하려면branch
설정합니다.다음과 같이 'deploy.dll'로 표시됩니다.
set :branch, `git describe --tags $(git rev-list --tags --max-count=1)`.chomp
또한 관련 태그 패턴이 일치하는 경우(예: 다른 단계로 조건부로 배포하도록 CI를 구성합니다./.*-test$/
).
이제 모든 지점에서 배포를 수행할 수 있습니다.
먼저 분기에서 태그를 생성합니다.
git 태그 -a v0.1.0-test -m "버전 0.1.0-test"
그리고, 푸시.
git push origin v0.1.0-test
참고: 위의 방법은 Capistrano 3을 기반으로 합니다.
일반적인 답변:
경우 을 "템플릿과 같은 .@BRANCH_NAME@
또는@ENV_NAME@
).
구성을 읽을 수 "" " 그다음구버파을성있수읽를는을다을생고 (" "전런된를하" "니합체교" "성트립" "스크일" "를▁the)" "(합니" "다ed체" "▁then▁able을" "런)" "그▁""를 대체합니다.@BRANCH_NAME@
배포 프로세스에 필요한 적절한 값에 따라 달라집니다.
카피스트라노 3 사용자의 경우:
desc "prompt for branch or tag"
task :git_branch_or_tag do
on roles(:all) do |host|
run_locally do
execute :git, 'tag'
tag_prompt = "Enter a branch or tag name to deploy"
ask(:branch_or_tag, tag_prompt)
tag_branch_target = fetch(:branch_or_tag, 'master')
set(:branch, tag_branch_target)
end
end
end
before 'deploy:updated', :git_branch_or_tag
git rev-parse --abbrev-ref HEAD
사용자가 정확히 있는 현재 분기를 클릭합니다.
상설정니다합항▁the를 설정합니다.gpsh
에 git push -u origin branch_name
$ which gpsh
gpsh: aliased to git push -u origin `git rev-parse --abbrev-ref HEAD`
언급URL : https://stackoverflow.com/questions/1524204/using-capistrano-to-deploy-from-different-git-branches
'programing' 카테고리의 다른 글
SQL에서 특정 열과 날짜별로 고유한 행을 선택하는 방법은 무엇입니까? (0) | 2023.08.19 |
---|---|
Oracle 트리거에 임의 매개 변수를 보내는 방법은 무엇입니까? (0) | 2023.08.19 |
처리 방법 :java.util.current.시간 초과예외: Android.os.BinderProxy.finalize()가 10초 오류 후 시간 초과되었습니까? (0) | 2023.08.19 |
SQL 네트워크 인터페이스, 오류: 26 - 지정된 서버/인스턴스를 찾는 중 오류 발생 (0) | 2023.08.19 |
CSV 윈도우즈 PowerShell에 열 추가 (0) | 2023.08.19 |