Lorsque vous configurez CI/CD, vous spécifiez une image, qui est utilisée pour créer le conteneur dans lequel vos tâches s'exécutent. Pour spécifier cette image, vous utilisez le mot-clé ìmage
.
Vous pouvez spécifier une image supplémentaire en utilisant le mot-clé services
. Cette image supplémentaire est utilisée pour créer un autre conteneur, disponible pour le premier conteneur. Les deux conteneurs ont accès l'un à l'autre et peuvent communiquer lors de l'exécution du travail.
variables:
DOCKER_TLS_CERTDIR: ""
FF_NETWORK_PER_BUILD: "true"
POSTGRES_DB: postgres
POSTGRES_USER: runner
POSTGRES_PASSWORD: postgres
POSTGRES_HOST_AUTH_METHOD: trust
stages:
- test
Testing:
stage: test
image: debian:latest
services:
- postgres
script:
- apt update && apt install -y postgresql-client
- PGPASSWORD=$POSTGRES_PASSWORD psql -U $POSTGRES_USER -h postgres -d postgres -c "\l"
tags:
- docker
Les services sont des conteneurs Docker qui peuvent être liés à vos jobs pour fournir des dépendances ou des services nécessaires à l'exécution de vos tests ou de votre pipeline.
L'utilisation de services est particulièrement utile lorsque vous souhaitez isoler votre job et ses dépendances sans avoir à installer ces dépendances directement sur le runner. Les services peuvent être démarrés avant l'exécution du job et arrêtés après son achèvement.
Il est également possible d'utiliser plueirurs services avec différentes versions.
variables:
DOCKER_TLS_CERTDIR: ""
FF_NETWORK_PER_BUILD: "true"
POSTGRES_DB: postgres
POSTGRES_USER: runner
POSTGRES_PASSWORD: postgres
POSTGRES_HOST_AUTH_METHOD: trust
Testing:
stage: test
image: debian:latest
services:
- name: postgres:14.1-alpine
alias: mydb1
- name: postgres:10.19-stretch
alias: mydb2
- name: postgres:9-alpine3.14
alias: mydb3
script:
- apt update && apt install -y postgresql-client
- PGPASSWORD=$POSTGRES_PASSWORD psql -U $POSTGRES_USER -h mydb1 -d postgres -c "SELECT version();"
- PGPASSWORD=$POSTGRES_PASSWORD psql -U $POSTGRES_USER -h mydb2 -d postgres -c "SELECT version();"
- PGPASSWORD=$POSTGRES_PASSWORD psql -U $POSTGRES_USER -h mydb3 -d postgres -c "SELECT version();"
tags:
- docker
Example avec mysql :
variables:
DOCKER_TLS_CERTDIR: ""
FF_NETWORK_PER_BUILD: "true"
MYSQL_DATABASE: "db_name"
MYSQL_ROOT_PASSWORD: "dbpass"
MYSQL_USER: "username"
MYSQL_PASSWORD: "dbpass"
MYSQL_HOST: mysql
stages:
- test
Testing:
image: debian:latest
services:
- mysql
stage: test
script:
- apt update && apt install -y mariadb-client
- echo "SHOW tables;" | mysql -u root -p"$MYSQL_ROOT_PASSWORD" -h mysql "${MYSQL_DATABASE}"
- echo "CREATE TABLE das (field1 int);" | mysql -u root -p"$MYSQL_ROOT_PASSWORD" -h mysql "${MYSQL_DATABASE}"
- echo "SHOW tables;" | mysql -u root -p"$MYSQL_ROOT_PASSWORD" -h mysql "${MYSQL_DATABASE}"
tags:
- docker
Comme pour les images, on peut définir l'entrypoint et les éventuelles commandes
default:
services:
- name: postgres:11.7
alias: db
entrypoint: ["docker-entrypoint.sh"]
command: ["postgres"]
Exercice :
- Créez un pipeline qui utilise l'image alpine:latest et avec un service nginx:latest. Le service nginx doit avoir un alias 'myngnix'
- Faites un script qui
curl mynginx
Réponse :
variables:
DOCKER_TLS_CERTDIR: ""
FF_NETWORK_PER_BUILD: "true"
stages:
- test
Testing:
stage: test
image: alpine:latest
services:
- name: nginx:latest
alias: mynginx
script:
- apk add --no-cache curl
- curl mynginx -k
tags:
- docker