Gerenciando Deploy e Rollback deployments

Quem nunca publicou uma atualização direto no ambiente de produção e se arrependeu depois?

Boas novas amigos desenvolvedores, agora é possível reverter a aplicação para versões anteriores através do histórico de deploys. Vou apresentar as novas formas de deploy e rollback implementadas em nossa atualização para o release 3 do OpenShift.

Se você já tem a conta na Getup e o RHC instalado e configurado, vá direto para o passo 3.

Passo 1: Criar uma conta na Getup

Se você ainda não tem cadastro na Getup, esta é uma boa hora.

Passo 2: Instalar o RHC

O RHC é o CLI que lhe auxiliará a administrar suas aplicações e seguir com este artigo. Linux e MAC:

 $ sudo gem install rhc

Outros sistemas e mais informações aqui.

Passo 3: Criando uma aplicação para teste

Vamos iniciar com uma aplicação PHP chamada teste. O processo é o mesmo para qualquer aplicação que rode na Getup, escolha uma de sua preferência.

 $ rhc app create teste php-5.3

O comando criará um container de aplicação, chamado gear, bem como as políticas de segurança do SELinux e configuração do CGroups. A plataforma também criará um repositório git privado e um registro de DNS público. O processo todo dura cerca de 30 segundos.

Passo 4: Configurando a aplicação para habilitar o controle de deploy

Por padrão é armazenado apenas a última versão publicada. Para navegar e reverter entre versões precisamos configurar a aplicação para guardar o histórico. Acesse o diretório da sua aplicação e execute:

$ cd teste
$ rhc app-configure --keep-deployments 5

Configuramos para manter as últimas 5 versões de código publicado. Nota: Se você receber uma mensagem de erro (invalid syntax), é sinal que seu RHC está desatualizado. O gem do RHC que contém esta funcionalidade deve ser >= "1.16.9". Para atualizar use $ sudo gem update rhc e tente novamente.

Passo 5: Listando o histórico de deploy e criando um novo

Para visualizar o histórico de deploy da sua aplicação execute:

 $ rhc deployment-list

Você verá um único deploy no seu histórico:

 1:26 PM, deployment ab3c6eee

Este é o primeiro deploy, da página padrão da aplicação. Acesse a url no navegador e verá a tela de boas vindas.

Agora vamos criar um arquivo novo e fazer o deploy para ver como o sistema funciona. Certifique-se de que você está no diretório raiz da aplicação antes de rodar os comandos abaixo:

$ cd php
$ echo "Versão 1" >> hello.html
$ git add .
$ git commit -am "Creating hello file"
$ git push

Se você já usou a plataforma, notará algumas informações novas na saída do push.

A plataforma agora exibe o Deployment ID e as informações da ativação desta versão, algo similar ao trecho abaixo:

remote: Building git ref 'master', commit 06385e8
remote: Checking deplist.txt for PEAR dependency..
remote: Preparing build for deployment
remote: Deployment id is a78af9d7
remote: Activating deployment
remote: Starting PHP 5.3 cartridge (Apache+mod_php)
remote: Result: success
remote: Activation status: success
remote: Deployment completed with status: success

Acesse a URL da aplicação para ver a atualização: http://teste-NAMESPACE.getup.io/hello.html Substitua o NAMESPACE pelo nome do seu domínio na Getup. Se tudo ocorreu bem você verá a mensagem Versão 1 no navegador. Vamos criar um novo deploy e ver como o sistema de rollback funciona. Ainda no diretório php execute:

$ echo "Versão 3" > hello.html
$ git commit -am "Modify deployment number";
$ git push

Atualize a URL da aplicação e você verá Versão 3.

Passo 6: Rollback

Oops! Cometemos um erro no passo anterior e acidentalmente imprimimos "Versão 3" ao invés de "Versão 2". Agora temos um bug crítico (e qual não é, certo? ) e precisamos de uma correção urgente. Vamos listar os últimos "deployments" e reativar a versão desejada até que o bug seja resolvido.

 $ rhc deployment-list

1:26 PM, deployment ab3c6eee
4:15 PM, deployment a78af9d7
4:27 PM, deployment 65294cb2

Explicando cada um deles:

    • 1:26 PM, deployment ab3c6eee. Este é o deploy inicial executado no momento da criação da aplicação. Inclui a aplicação padrão.
    • 4:15 PM, deployment a78af9d7. Este deploy contém a criação do arquivo hello.html que exibe "Versão 1" ao usuário.
    • 4:27 PM, deployment 65294cb2. Este deploy contém o bug crítico que exibe "Versão 3" ao invés de "Versão 2".
    • Neste caso, queremos fazer o rollback para o hash a78af9d7 que foi publicado às 4:15 PM. Para isso, execute o comando abaixo:
 $ rhc deployment-activate a78af9d7

A seguinte saída deverá ser apresentada:

Activating deployment 'a78af9d7' on application teste ...
Activating deployment
Stopping PHP 5.3 cartridge (Apache+mod_php)
Waiting for stop to finish
Starting PHP 5.3 cartridge (Apache+mod_php)
Success

Pronto! Acabamos de reverter nossa aplicação para a última versão em bom estado. Vamos ver como ficou nosso histórico de deploy:

 $ rhc deployment-list

1:26 PM, deployment ab3c6eee
4:15 PM, deployment a78af9d7
4:27 PM, deployment 65294cb2 (rolled back)
4:46 PM, deployment a78af9d7 (rollback to 4:15 PM)

Alterando o branch padrão

Frequentemente sou parado na rua e questionado sobre a possibilidade de usar outro branch além do master. Primeiro vamos visualizar qual branch estamos trabalhando:

 $ rhc app-configure 

teste @ http://teste-diego.getup.io/ (uuid: 5317501e99fc774d1400003b)
---------------------------------------------------------------------
  Deployment:        auto (on git push)
  Keep Deployments:  5
  Deployment Type:   git
  Deployment Branch: master

Your application 'teste' is configured as listed above.

Para alterar o branch basta rodar:

 $ rhc app-configure --deployment-branch meubranch

Verifique a alteração com: $ rhc app-configure

Desativando o deploy automático

E se você quiser enviar atualizações de código sem fazer a publicação? Sem problema, nós suportamos isso também. Para desligar o deploy automático basta executar:

 $ rhc app-configure --no-auto-deploy

Envie o código com

$ git push e quando quiser publicar utilize

$ rhc app-deploy HASH, alterando o HASH pelo valor do deploy desejado.

Suporte a deploy binário

Se você é um desenvolvedor java, deve estar compilando seus .war ou .ear localmente e enviando para seu gear. Boas novas, agora suportamos "binary deploy". Para alterar para binary deploy execute:

 $ rhc app-configure --deployment-type binary

Sumário

Neste artigo eu apresentei o novo sistema de deploy e rollback implementado na última atualização da Getup. Esta foi uma das mais pedidas e estamos contentes em oferecer para todos os usuários da Getup.

Tem mais dúvidas? Envie uma solicitação

0 Comentários

Por favor, entre para comentar.
Powered by Zendesk