Comment automatiser le déploiement sur Docker avec CircleCI?

8

Mon fichier circle.yml et mon compte CircleCI sont déjà configurés pour utiliser Docker pour les tests, mais j'aimerais passer au déploiement continu après une construction réussie.

Voici ce que j'ai jusqu'à présent dans 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
la source

Réponses:

7

Quelques choses doivent se produire pour que cela fonctionne correctement. Tout d'abord, ajoutez une deploymentsection à 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

Merci à ce billet de blog pour le script suivant. Ensuite, créez un fichier appelé start.sh au niveau supérieur de votre référentiel (si vous utilisez un nom différent, modifiez la dernière ligne de circle.yml) qui contient les éléments suivants:

#!/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

Enfin, pour permettre au script de fonctionner, vous devrez définir le script pour qu'il soit exécutable chmodet ajouter les variables d'environnement et votre DEPLOY_USERclé ssh (de préférence) ou vos informations d'identification (si aucune clé ssh) à CircleCI. Après cela, CircleCI devrait déployer votre application après une construction réussie.

Peter G
la source