Gitlab CI can't connect to service

Viewed 6780

I am trying to run an integration test against my containers on gitlab.

To keep things as minimal as possible, here are the relevant parts of my .gitlab-ci.yml

image: ubuntu:latest

coverage:
    stage: test
    dependencies:
        - build
    services:
        - postgres:latest
        - registry.gitlab.com/username/project/image:latest

When I try and run the job, I get a container health check warning.

2019-06-06T02:13:34.508595817Z FATAL: No HOST or PORT found

Normally I would start my image with the standard docker run -p port:port image:version but I'm not sure how those options translate to gitlab services. How do I define the host and the port?

2 Answers

in my case, Dockerfile without EXPOSE, will give the wrong log msg in ci runner:

Health check error:
exit code 1

Health check container logs:
2020-05-12T03:42:49.645731131Z No HOST or PORT

fixed by expose service port in Dockerfile.

Below is an example pipeline connecting to postgres.

The container aliases the service as the container name, unless you explicitly alias as shown here

services:
- name: postgres:9.4


variables:
  # Configure postgres service (https://hub.docker.com/_/postgres/)
  POSTGRES_DB: $DB_NAME
  POSTGRES_USER: $DB_USER
  POSTGRES_PASSWORD: $DB_PASS

cache:
  paths:
  - node_modules/*

stages:
  - test
  - build


db-test:
  stage: test
  image: ubuntu:latest
  tags:
    - consultancy
    - shared
  script:
    #set server connection env vars
  - export PGPASSWORD=$POSTGRES_PASSWORD
  - apt-get update -y && apt-get install postgresql postgresql-contrib -y
  - psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT 'OK' AS status;" #ensure the service is running

node-test:
  stage: test
  image: node:latest
  tags:
  - consultancy
  - shared
  script:
    - npm install # Install Node dependencies
    - npm run test-unit # Execute unit testing suite
#
integration-tests:
  stage: test
  image: node:latest
  tags:
  - consultancy
  - shared
  script:
  - export PGUSER=$POSTGRES_USER
  - export PGHOST=postgres
  - export PGPASSWORD=$POSTGRES_PASSWORD
  - export PGDATABASE=postgres
  - export PGPORT=5432 #set the integration test env vars
  - npm install # Install Node dependencies
  - npm run test-integration # Execute integration testing suite
Related