Example de fichier .gitlab-ci.yml

Je vous partage en exemple, mon fichier gitlab-ci.yml qui content 3 jobs

1) test_build

Le job test_build se lance uniquement sur ma branche de dev, Il me permet de vérifier que tout ce que j'ai poussé, fonctionnera lors du passage en production. Il va récupérer la base de production (restore.sh), faire un composer install + drush cim + drush updb (update.sh).
Dans cette étape, on pourrait lancer également les tests unitaires. (je n'ai pas de module custom, donc inutile dans mon cas).
Il est exécuté dans une image docker-compose, ce qui me permet de lancer la même stack que celle de prod sur le runner gitlab (runner-1).

2) job_integ_delivery

le job job_integ_delivery va mettre à jour mon serveur de test en se basant sur ma base de production.
Il est exécuté dans une image alpline pour exécuter les commandes ssh sur le serveur distant.

3) job_prod_delivery

le job_prod_delivery va mettre à jours mon environnement de production.

stages:
  - build
  - deploy

before_script:
  - apk --update add openssh-client bash rsync
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

test_build:
  stage: build
  image: docker/compose:latest
  tags:
    - runner-1
  script:
    - echo -n $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY
    - bash scripts/init.sh dev
    - docker-compose up -d
    - docker-compose exec -T web composer install
    - bash scripts/restore.sh
    - docker-compose exec -T web bash ./scripts/update.sh
  only:
    refs:
      - dev

job_integ_delivery:
  stage: deploy
  image: alpine:latest
  tags:
    - runner-1
  script:
    - ssh docker@dockervm "cd /var/data/famillewallon-test && git checkout test && git pull"
    - ssh docker@dockervm "cd /var/data/famillewallon-test && ./scripts/restore.sh"
    - ssh docker@dockervm "cd /var/data/famillewallon-test && docker-compose exec -T web bash ./scripts/update.sh"
  only:
    refs:
      - test

job_prod_delivery:
  stage: deploy
  image: alpine:latest
  tags:
    - runner-1
  script:
    - ssh docker@prodsrv "cd /home/docker/data/famillewallon && git checkout master && git pull"
    - ssh docker@prodsrv "cd /home/docker/data/famillewallon && docker-compose exec -T web bash ./scripts/update.sh"
  only:
    refs:
      - master
  when: manual