Skip to content

Latest commit

 

History

History
135 lines (120 loc) · 3.72 KB

08.Les_services.md

File metadata and controls

135 lines (120 loc) · 3.72 KB

Les services


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