Como automatizar a implantação no Docker com o CircleCI?

8

Meu arquivo circle.yml e minha conta CircleCI já estão configurados para usar o Docker para testes, mas eu gostaria de passar para a implantação contínua em uma compilação bem-sucedida.

Aqui está o que eu tenho até agora em circle.yml:

machine:
  services:
    - docker

dependencies:
  override:
    - docker info
    - docker build -t pgeiss/appname .

test:
  override:
    - docker run -d -p 8080:8080 pgeiss/appname; sleep 10
    - curl --retry 10 --retry-delay 5 -v http://localhost:8080/res.json
Peter G
fonte

Respostas:

7

Algumas coisas precisam acontecer para que isso funcione corretamente. Primeiro, adicione uma deploymentseção ao circle.yml:

deployment:
  main: # or whatever your deployment is called
    branch: master # or whatever branch you want to deploy
    commands:
      - docker login -e (your email here) -u (your username here) -p (your password here)
      - docker push pgeiss/appname
      - ./start.sh

Obrigado a esta postagem no blog pelo script a seguir. Em seguida, crie um arquivo chamado start.sh no nível superior do seu repositório (se você usar um nome diferente, altere a última linha do circle.yml) que contém o seguinte:

#!/usr/bin/env bash

echo "stopping running application"
ssh $DEPLOY_USER@$DEPLOY_HOST 'docker stop dodsv'
ssh $DEPLOY_USER@$DEPLOY_HOST 'docker rm dodsv'

echo "pulling latest version of the code"
ssh $DEPLOY_USER@$DEPLOY_HOST 'docker pull pgeiss/appname-webapp:latest'

echo "starting the new version"
ssh $DEPLOY_USER@$DEPLOY_HOST 'docker run -d --restart=always --name dodsv -p 80:5432 pgeiss/appname:latest'

echo "success!"

exit 0

Finalmente, para permitir que o script funcione, você precisará definir o script para ser executável chmode adicionar as variáveis ​​de ambiente e a DEPLOY_USERchave ssh da sua (de preferência) ou credenciais (se não houver chave ssh) ao CircleCI. Depois disso, o CircleCI deve implantar seu aplicativo após uma compilação bem-sucedida.

Peter G
fonte