Come automatizzare la distribuzione su Docker con CircleCI?


8

Il mio file circle.yml e il mio account CircleCI sono già configurati per utilizzare Docker per i test, ma mi piacerebbe passare alla distribuzione continua su una build di successo.

Ecco cosa ho finora 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

Risposte:


7

Alcune cose devono accadere affinché questo funzioni correttamente. Innanzitutto, aggiungi una deploymentsezione 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

Grazie a questo post sul blog per il seguente script. Quindi, crea un file chiamato start.sh nel livello superiore del tuo repository (se usi un nome diverso, modifica l'ultima riga di circle.yml) che contiene quanto segue:

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

Infine, per consentire allo script di funzionare dovrai impostare lo script in modo che sia eseguibile chmode aggiungere le variabili di ambiente e la tua DEPLOY_USERchiave ssh (preferibilmente) o le tue credenziali (se non c'è una chiave ssh) a CircleCI. Dopo averlo fatto CircleCI dovrebbe distribuire la tua app dopo una compilazione riuscita.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.