GitLab CI/CD – serwisy – czyli jak odpalić więcej niż jeden kontener

Sekcja services pozwala na uruchomienie dodatkowych kontenerów z którymi nasze zadania (jobs) mogą się komunikować używając nazwy obrazu (image name) lub też aliasu.

Jak to zrobić?

Aby dodać dodatkowe kontenery (zwane serwisami) należy zdefiniować w sekcji głównej atrybut services:

stages:
  - test

variables:
  POSTGRES_DB: example_db
  POSTGRES_USER: user
  POSTGRES_PASSWORD: password

services:
  - postgres:latest

test_database:
  stage: test
  image: debian:latest
  before_script:
    - apt-get update && apt-get install -y postgresql-client
    - until pg_isready -h postgres -U "$POSTGRES_USER"; do sleep 1; done
  script:
    - PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U $POSTGRES_USER -d $POSTGRES_DB -c 'SELECT version();'
    - PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U $POSTGRES_USER -d $POSTGRES_DB -c 'CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(100));'
    - PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U $POSTGRES_USER -d $POSTGRES_DB -c "INSERT INTO test_table (name) VALUES ('example');"
    - PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U $POSTGRES_USER -d $POSTGRES_DB -c 'SELECT * FROM test_table;'

Skrypt ten uruchamia kontener z obrazem postgres i w sekcji zadania test_database próbuje wykonać kilka przykładowych zapytań na bazie udostępnionej przez serwis.

Komunikacja

Aby skomunikować się z serwisem domyślnie należy użyć uproszczonej (tutaj znajdziesz więcej na ten temat) nazwy obrazu i zostanie on rozwiązany na odpowiedni adres IP w sieci. Istnieje także opcja nadania aliasu za pomocą którego można się komunikować:

services:
  - name: postgres:latest
    alias: db

Serwis per zadanie

Możliwe jest także zdefiniowanie serwisu dla konkretnego zadania. Wystarczy tylko umieścić sekcję services w zakresie zadania:

stages:
  - test

variables:
  POSTGRES_DB: example_db
  POSTGRES_USER: user
  POSTGRES_PASSWORD: password

test_database:
  stage: test
  image: debian:latest
  services:
    - postgres:latest
  before_script:
    - apt-get update && apt-get install -y postgresql-client
    - until pg_isready -h postgres -U "$POSTGRES_USER"; do sleep 1; done
  script:
    - PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U $POSTGRES_USER -d $POSTGRES_DB -c 'SELECT version();'
    - PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U $POSTGRES_USER -d $POSTGRES_DB -c 'CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(100));'
    - PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U $POSTGRES_USER -d $POSTGRES_DB -c "INSERT INTO test_table (name) VALUES ('example');"
    - PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U $POSTGRES_USER -d $POSTGRES_DB -c 'SELECT * FROM test_table;'

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *