Estou usando o capistrano para implantar um aplicativo RoR. A base de código está em um repositório git, e a ramificação é amplamente usada no desenvolvimento. Capistrano usa o deploy.rb
arquivo para suas configurações, sendo um deles o ramo para implantar.
Meu problema é o seguinte: digamos que eu crie um novo ramo A do mestre . O arquivo de implantação fará referência à ramificação principal . Eu edito isso, para que A possa ser implantado no ambiente de teste. Termino de trabalhar no recurso e fundo o ramo A no mestre . Uma vez que o deploy.rb
arquivo a partir de A é mais fresco, torna-se fundiram em e agora o deploy.rb
de mestre referências filiais A . Hora de editar novamente.
São muitas edições manuais aparentemente desnecessárias - o parâmetro sempre deve corresponder ao nome atual da filial. Além disso, é fácil esquecer de editar as configurações sempre.
Qual seria a melhor maneira de automatizar esse processo?
Edit: Acontece que alguém já tinha feito exatamente o que eu precisava :
Esta manhã, tive a oportunidade de implantar uma filial de um repositório git em um servidor intermediário, mas não tinha a menor idéia de como. Uma rápida pesquisa no código-fonte capistrano revelou que eu poderia usar o conjunto
:branch "branch_name"
no meu script de implantação. Eu tentei e funcionou. Imaginei que precisaria fazer uma alteração semelhante em todos os meus ramos. Claro, eu sou um preguiçoso e me perguntei se não havia uma maneira melhor.Se você não estiver familiarizado com o git, a saída do comando git branch é uma lista de branches com um asterisco marcando o que está atualmente em check-out na sua máquina local. Por exemplo:
> git branch * drupal_authentication fragment_caching master
Então, pensei, e se eu apenas analisasse a saída e procurasse o ramo marcado como atual:
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
Agora sou capaz de implantar qualquer ramificação que esteja atual na minha máquina local a partir de um único script de implantação compartilhado.
fonte
Respostas:
Isso funciona com Capistrano> = 3.1:
adicione esta linha a
config/deploy.rb
:e ligue para o capistrano com:
Esta solução funciona com Capistrano <3.1:
fonte
env
, mas isso funcionou para mim usando apenas um ramoUsando o Capistrano 3.1.0+, nenhum deles estava mais funcionando para mim. Em vez disso, de acordo com as instruções comentadas:
Mas você não deseja usar
ask
ou ele solicitará. Em vez disso, você deve usarset
.HEAD
é o ramo mais alto; 'edge' como é chamado. Se você quer um ramo diferente, substituaHEAD
com seu nome ramo, por exemplo:master
,staging
, etc.Para concluir com exemplos, em
/config/deploy/production.rb
, você pode incluir esta linha:...ou
btw,
HEAD
é a configuração padrão, portanto, não há necessidade de realmente declarar isso no arquivo. Pode ser usado melhor em a/config/deploy/edge.rb
.Em
/config/deploy/staging.rb
, você pode incluir esta linha:...ou
Você entendeu a ideia!
Espero que esses exemplos ajudem futuros usuários de capistrano (^_^)
fonte
git rev-parse --abbrev-ref HEAD
é usado para descobrir em qual ramo o HEAD está. a execuçãogit rev-parse --abbrev-ref staging
(quase) sempre será geradastaging
. Você pode apenas usarset :branch, 'staging'
.Com vários estágios, agora é realmente:
A sintaxe da postagem anterior não funciona no meu ambiente
fonte
-s branch=foo
define o ramo variável Capistrano parafoo
depois as receitas são carregadosPosso confirmar que o abaixo ainda funciona no Cap 3.11.0 13/10/18, bem como no Cap 2:
Em deploy.rb / stage.rb:
Na linha de comando:
Isso fornece uma ramificação padrão (que pode ser diferente para ambientes diferentes) e a capacidade de alterar ramificações quando você desejar.
fonte
Como alternativa, você pode estruturá-lo a partir da linha de comando em que possui uma ramificação e um ambiente padrão e também é capaz de passar parâmetros para a chamada de limite, que pode incluir o ambiente e a ramificação a serem usados. Pode ser um ramo que é explicitamente passado ou você pode ter um parâmetro que indique o ramo atual conforme descrito no link que você listou.
Exemplo de código emprestado pesadamente daqui
fonte
-s
para que ele para buscar o ramo especificadoSe você estiver usando capistrano-multistage , precisará executar apenas
ou
sem mais edições no seu
deploy.rb
.fonte
branch=
, nãobranch-
.Este comando não funcionará mais:
O suporte para
-sS
sinalizadores foi removido no capistrano v3 +.Aqui você pode ler mais sobre o assunto: link
Foi mencionado em algumas respostas, mas atualmente não está correto.
O que funciona para mim:
no
deploy.rb
arquivo addentão corra:
Observe também que, para executar com êxito este comando, você precisa estar na ramificação principal.
fonte
Esta solução deve funcionar com todas as versões do Capistrano.
Uso:
fonte
Estou usando a versão 3.3.5 e tenho este trabalho:
fonte
Resposta geral:
Se você tiver um arquivo de configuração com um conteúdo modificado de ambiente para ambiente, faça essa linha como um "modelo" (com uma sequência que represente o nome da variável como
@BRANCH_NAME@
ou@ENV_NAME@
).Então você teria um script (com versão) capaz de ler seu arquivo de configuração e substituir a "
@BRANCH_NAME@
" variável pelo valor apropriado necessário ao seu processo de implantação.fonte
Para usuários do capistrano 3:
fonte
Método 1: Definir ramo específico do estágio (por exemplo, teste, produção) para implantação
Coloque a
branch
configuração nos arquivos de estágio em vez de 'deploy.rb' e defina a ramificação de destino para o estágio a ser implantado.Para um aplicativo de dois estágios com nome de filial associado
test
eproduction
, a configuração terá esta aparência,Este método permite implantar a partir de ramificações específicas do estágio. Portanto, apenas uma etapa adicional necessária será mesclar ou refazer o código mais recente da ramificação base.
Método 2: implantar diretamente de qualquer ramificação (usando a marca)
Outra abordagem é implantar usando tag. Para implantar usando tag, defina a
branch
configuração. em 'deploy.rb' da seguinte maneira,E, configure o IC para implantar condicionalmente em diferentes estágios, se o padrão de tag associado corresponder (por exemplo
/.*-test$/
).Agora, uma implantação pode ser feita a partir de qualquer filial,
Primeiro, crie uma tag a partir de qualquer ramo,
tag git -a v0.1.0-test -m "Versão 0.1.0-test"
E, empurre
origem do push do git v0.1.0-test
Nota: Os métodos acima são baseados no Capistrano 3.
fonte
retornará a ramificação atual em que você está exatamente.
Eu sempre defino o em
gpsh
vez degit push -u origin branch_name
fonte