image: docker:19.03.5-dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_IMAGE: $CI_REGISTRY_IMAGE/portail
services:
- docker:19.03.1-dind
stages:
- dependencies
- test
- build
- dev
- production
"Composer dependencies":
image: wodby/drupal-php:$PHP_TAG
stage: dependencies
script:
- cd sources && composer install
artifacts:
expire_in: 1 week
paths:
- ./sources/vendor
- ./sources/web
only:
- develop
- merge_requests
- /^test-.*$/
- /^v.*$/
"Yarn dependencies":
image: wodby/node:$NODE_TAG
stage: dependencies
script: |
cd sources/web/themes/custom/mfr_theme && yarn install && yarn run start
artifacts:
expire_in: 1 week
paths:
- ./sources/web/themes/custom/mfr_theme
only:
- develop
- merge_requests
- /^test-.*$/
- /^v.*$/
"Test Composer":
image: wodby/drupal-php:$PHP_TAG
stage: test
script: |
cd sources && ./scripts/qa/test-code.sh
dependencies:
- "Composer dependencies"
only:
- merge_requests
- /^v.*$/
"Test Yarn":
image: wodby/node:$NODE_TAG
stage: test
script: |
cd sources/web/themes/custom/mfr_theme && yarn run lint
dependencies:
- "Yarn dependencies"
only:
- merge_requests
- /^v.*$/
"Docker create indexer" :
image: docker:19.03.5-dind
stage: build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script: |
docker build -f docker/Dockerfile_indexer -t $CI_REGISTRY/pole-education/mfr/atos-mfr-indexer:$CI_COMMIT_REF_NAME . 2>&1 | tee -a build.log
docker push $CI_REGISTRY/pole-education/mfr/atos-mfr-indexer:$CI_COMMIT_REF_NAME
after_script:
- docker logout $CI_REGISTRY
dependencies:
- "Composer dependencies"
- "Yarn dependencies"
only:
- develop
- /^test-.*$/
- /^v.*$/
"Docker create solr" :
image: docker:19.03.5-dind
stage: build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script: |
docker build -f docker/Dockerfile_solr -t $CI_REGISTRY/pole-education/mfr/atos-mfr-solr:$CI_COMMIT_REF_NAME . 2>&1 | tee -a build.log
docker push $CI_REGISTRY/pole-education/mfr/atos-mfr-solr:$CI_COMMIT_REF_NAME
after_script:
- docker logout $CI_REGISTRY
dependencies:
- "Composer dependencies"
- "Yarn dependencies"
only:
- develop
- /^test-.*$/
- /^v.*$/
"Docker create indexer to dev" :
image: docker:19.03.5-dind
stage: dev
before_script:
- docker login -u $CI_REGISTRY_USER_ATOS -p $CI_REGISTRY_PASSWORD_ATOS $CI_REGISTRY_ATOS
script: |
docker build -f docker/Dockerfile_indexer -t $CI_REGISTRY_ATOS/atos-mfr-indexer:$CI_COMMIT_REF_NAME . 2>&1 | tee -a build.log
docker push $CI_REGISTRY_ATOS/atos-mfr-indexer:$CI_COMMIT_REF_NAME
after_script:
- docker logout mfr-docker.mtpl.bs.fr.atos.net
dependencies:
- "Composer dependencies"
- "Yarn dependencies"
when: manual
only:
- develop
- /^test-.*$/
- /^v.*$/
"Docker create solr to dev" :
image: docker:19.03.5-dind
stage: dev
before_script:
- docker login -u $CI_REGISTRY_USER_ATOS -p $CI_REGISTRY_PASSWORD_ATOS $CI_REGISTRY_ATOS
script: |
docker build -f docker/Dockerfile_solr -t $CI_REGISTRY_ATOS/atos-mfr-solr:$CI_COMMIT_REF_NAME . 2>&1 | tee -a build.log
docker push $CI_REGISTRY_ATOS/atos-mfr-solr:$CI_COMMIT_REF_NAME
after_script:
- docker logout
dependencies:
- "Composer dependencies"
- "Yarn dependencies"
when: manual
only:
- develop
- /^test-.*$/
- /^v.*$/
"Docker create solr to prod" :
image: docker:19.03.5-dind
stage: production
before_script:
- docker login $CI_REGISTRY_AZURE -u $CI_REGISTRY_USER_AZURE -p $CI_REGISTRY_PASSWORD_AZURE
script: |
docker build -f docker/Dockerfile_solr -t $CI_REGISTRY_AZURE/mfr/solr:$CI_COMMIT_REF_NAME . 2>&1 | tee -a build.log
docker push $CI_REGISTRY_AZURE/mfr/solr:$CI_COMMIT_REF_NAME
after_script:
- docker logout
only:
- /^v.*$/
"Docker create indexer to prod" :
image: docker:19.03.5-dind
stage: production
before_script:
- docker login $CI_REGISTRY_AZURE -u $CI_REGISTRY_USER_AZURE -p $CI_REGISTRY_PASSWORD_AZURE
script: |
docker build -f docker/Dockerfile_indexer -t $CI_REGISTRY_AZURE/mfr/indexer:$CI_COMMIT_REF_NAME . 2>&1 | tee -a build.log
docker push $CI_REGISTRY_AZURE/mfr/indexer:$CI_COMMIT_REF_NAME
after_script:
- docker logout
only:
- /^v.*$/
Pour s’initier à la CI de Gitlab il faut créer le fichier .gitlab-ci.yml
Le fichier commence par la déclaration d’une image Docker par défaut pour l’exécution du processus.
image: docker:19.03.8-dind
Dans cet exemple, l’image par défaut est une image docker nommée dind. Docker dind c’est quoi ?
L’image doit toujours être accompagnée d’une version la plus précise possible pour éviter des prbolème de montée de version de l’image sans en avoir le contrôle.
On définit par la suite des variables liée à l’utilisation de l’image docker dind. GitlabCI et Docker Build
variables:
DOCKER_DRIVER: overlay2
Cette variable à pour effet de définir le type de réseau utilisé par l’image.
Par défaut on définit un service pour l’utilisation de Docker Dind.
services:
- docker:19.03.1-dind
Je définis les étapes de mon processus automatisé.
stages:
- dependencies
- test
- build
- dev
- production
Je définit ma première tâche de la manière suivante :
"Composer dependencies":
image: wodby/drupal-php:$PHP_TAG
stage: dependencies
script:
- cd sources && composer install
artifacts:
expire_in: 1 week
paths:
- ./sources/vendor
- ./sources/web
only:
- develop
- merge_requests
- /^test-.*$/
- /^v.*$/
Dans notre exemple nous ferons un template pour la construction d’image Docker :
nom du fichier : Docker.gitlab-ci.yml
# This file is a template, and might need editing before it works on your project.
"🐳 docker-build-master":
# Official docker image.
image: docker:latest
stage: build
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
script:
- docker pull $CI_REGISTRY_IMAGE:latest || true
- docker build --cache-from "$CI_REGISTRY_IMAGE" .
- docker push "$CI_REGISTRY_IMAGE"
only:
- master
except:
changes:
- "*.md"
"🐳 docker-build":
# Official docker image.
image: docker:latest
stage: build
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
script:
- docker pull "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" || true
- docker build --cache-from "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
except:
refs:
- master
changes:
- "*.md"
gitlab-ci.ymlinclude:
- project: 'template-gitlabci/templates'
file: 'Docker.gitlab-ci.yml'