Capistrano를 사용하여 단일 특정 서버에 배포하는 방법
여러 역할의 여러 서버가있는 프로덕션 시스템이 있습니다. 프로덕션의 모든 서버에 다시 배포 할 필요없이 특정 서버에 배포하여 새 앱 서버를 테스트하고 싶습니다. Capistrano에게 특정 서버에 배포하도록 요청하는 방법이 있습니까? 이상적으로는 다음과 같은 것을 실행할 수 있기를 바랍니다.
cap SERVER=app2.example.com ROLE=app production deploy
app2.example.com에 배포하려는 경우.
감사!
[업데이트] 다음을 실행하여 wulong이 제안한 솔루션을 시도했습니다.
cap HOSTS=app2.server.hostname ROLE=app qa deploy
그러나 capistrano는 앱 작업 외에도 해당 서버의 다른 역할에 대한 작업을 실행하려는 것 같았습니다. 내 버전의 cap을 업데이트해야 할 수도 있습니다 (v2.2.0을 실행 중입니다)?
나는 여기 capistrano 사용자 목록에 질문을 게시하고 Jamis로부터 다음과 같은 응답을 받았습니다 (명확성을 위해 여기에서 약간 편집했습니다).
HOSTS 환경 변수를 시도하십시오.
cap HOSTS=app2.example.com production deploy
이렇게하면 app2가 선언 된 역할뿐만 아니라 모든 역할에있는 것으로 간주됩니다.
원하는 것이 정기적 인 배포를 수행하고 app2에서만 작동하고 레시피 파일에서 app2가 선언 된 경우에만 HOSTFILTER 변수를 사용할 수 있습니다.
cap HOSTFILTER=app2.example.com production deploy
[...]
이 구체적인 예를 고려하십시오. 스크립트가 A, B, C라는 세 개의 서버를 정의한다고 가정합니다. 그리고 기본적으로 A와 B에서 실행되지만 C가 아닌 작업 "foo"를 정의합니다. 다음과 같이 :
role :app, "A", "B"
role :web, "C"
task :foo, :roles => :app do
run "echo hello"
end
이제 cap foo
를 실행하면 A와 B 모두에서 echo 명령이 실행됩니다.
이렇게하면 작업 cap HOSTS=C foo
에 대한 : roles 매개 변수에 관계없이 C에서 echo 명령을 실행합니다.
을 수행하면 cap HOSTFILTER=C foo
(AB)와 (C)의 교차점이 빈 집합이기 때문에 echo 명령을 전혀 실행하지 않습니다. (foo의 호스트 목록에 C와 일치하는 호스트가 없습니다.)
를 수행하면 cap HOSTFILTER=A foo
(A)와 교차하는 (AB)가 (A)이기 때문에 A에서만 echo 명령을 실행합니다.
마지막으로 cap HOSTFILTER=A,B,C foo
를 실행하면 (ABC)와 교차하는 (AB)가 (AB)이기 때문에 A와 B (C는 아님)에 echo 명령을 실행합니다.
요약하면 : HOSTS는 작업의 호스트 또는 역할 선언을 완전히 무시하고 모든 항목이 지정된 호스트에 대해 실행되도록합니다. 반면 HOSTFILTER는 주어진 목록에 대해 기존 호스트를 필터링하여 이미 작업 서버 목록에있는 서버 만 선택합니다.
다음은 기본적으로 작동합니다.
cap HOSTS=app2.example.com ROLE=app deploy
동일한 역할을 가진 1 대 이상의 서버에 배포하려는 경우 :
cap HOSTS=app2.example.com,app3.example.com,app4.example.com ROLE=app deploy
비슷한 문제가 있으며 다음을 시도했습니다. 효과가있다:
cap production ROLES=web HOSTS=machine1 stats
deploy.rb에서 다음과 같이 할 수 있어야합니다.
task :production do
if ENV['SERVER'] && ENV['ROLE']
role ENV['ROLE'], ENV['SERVER']
else
# your full config
end
end
다음과 같은 방법으로 작업 수준 호스트 매개 변수를 지정할 수도 있습니다.
task :ship_artifacts, :hosts => ENV['DEST_HOST'] do
end
'program tip' 카테고리의 다른 글
모든 브라우저에 Windows Media Player 포함 (0) | 2020.12.30 |
---|---|
Boost :: Signals for C ++ Eventing을 사용한 완전한 예제 (0) | 2020.12.30 |
상위 모듈에서 Maven 플러그인 목표를 실행하지만 하위 모듈에서는 실행하지 않습니다. (0) | 2020.12.29 |
SQL 전체 텍스트 인덱스 채우기가 언제 완료되었는지 어떻게 알 수 있습니까? (0) | 2020.12.29 |
크롬은 드래그하는 동안 커서를 텍스트로 설정합니다. (0) | 2020.12.29 |