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.
0 Comentários