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;'