¿Cómo automatizo la implementación en Docker con CircleCI?

8

Mi archivo circle.yml y mi cuenta CircleCI ya están configurados para usar Docker para las pruebas, pero me gustaría pasar a la implementación continua una vez que la compilación sea exitosa.

Esto es lo que tengo hasta ahora en 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
fuente

Respuestas:

7

Deben suceder algunas cosas para que esto funcione correctamente. Primero, agrega una deploymentsección a 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

Gracias a esta publicación de blog por el siguiente script. Luego, cree un archivo llamado start.sh en el nivel superior de su repositorio (si usa un nombre diferente, cambie la última línea de circle.yml) que contenga lo siguiente:

#!/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 el script funcione, deberá configurar el script para que sea ejecutable chmody agregar las variables de entorno y la DEPLOY_USERclave ssh de su (preferiblemente) o credenciales (si no hay una clave ssh) a CircleCI. Después de hacer eso, CircleCI debe implementar su aplicación después de una compilación exitosa.

Peter G
fuente