Wie automatisiere ich die Bereitstellung in Docker mit CircleCI?

8

Meine Datei circle.yml und mein CircleCI-Konto sind so eingerichtet, dass Docker bereits zum Testen verwendet wird. Ich möchte jedoch nach einem erfolgreichen Build zur kontinuierlichen Bereitstellung übergehen.

Folgendes habe ich bisher in 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.
quelle

Antworten:

7

Ein paar Dinge müssen passieren, damit dies richtig funktioniert. deploymentFügen Sie zunächst einen Abschnitt zu circle.yml hinzu:

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

Vielen Dank an diesen Blog-Beitrag für das folgende Skript. Erstellen Sie dann eine Datei mit dem Namen start.sh in der obersten Ebene Ihres Repositorys (wenn Sie einen anderen Namen verwenden, ändern Sie die letzte Zeile von circle.yml), die Folgendes enthält:

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

Damit das Skript funktioniert, müssen Sie das Skript so einstellen, dass es ausführbar ist, chmodund CircleCI die Umgebungsvariablen und den DEPLOY_USERSSH-Schlüssel (vorzugsweise) oder die Anmeldeinformationen (falls kein SSH-Schlüssel) hinzufügen. Danach sollte CircleCI Ihre App nach einem erfolgreichen Build bereitstellen.

Peter G.
quelle