1

I'm trying to setup on the same server (D.O. cloud) two different envs based on docker, once for staging and once for production.

The two envs are off course isolated and the deployment is assigned to gitlab ci/cd pipeline.

My goal is to run on the same server two different ci pipeline, once for staging and once for production.

At the beginning my conf was a single runner with docker executor but I notified that just one single env remained live after a pipeline execution (no matter what if it's from staging or production tag).

As I mentioned my goal is to have live both envs, then I thought to register a new runner in order to map one runner for one env (and tag).

Both runners with docker executor.

Here is my last configurations

.gitlab.ci.yml

image: tmaier/docker-compose:latest

stages:
  - deploy-on-staging
  - deploy-on-prod

services:
  - docker:dind
  

before_script:
  - docker info
  - docker-compose --version

#job runs automatically for tags:staging
step-staging:
  stage: deploy-on-staging
  environment:
    name: staging  # must match the vars env 
    url: staging.mysite.com$STAGING_HTTP_PORT
  only:
    - staging
  tags:
    - staging
  script:
    - docker-compose -f docker/remote/docker-compose.yml -f docker/remote/docker-compose.staging.yml up -d 
  after_script:
    - docker exec -i mysql_staging sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < /docker-entrypoint-initdb.d/db.sql'
    - docker exec mysql_staging sh -c 'exec mysql -u gu -p"$MYSQL_PASSWORD" -D dbname < /opt/somequeries.sql'

#job runs automatically for tags:production
step-prod:
  stage: deploy-on-prod
  environment:
    name: production # must match the vars env  
    url: mysite.com
  only:
    - master
  tags:
    - production
  script:
    - docker-compose -f docker/remote/docker-compose.yml -f docker/remote/docker-compose.override.yml up -d
  after_script:
    - docker exec -i mysql_prod sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < /docker-entrypoint-initdb.d/db.sql'
    - docker exec mysql_prod sh -c 'exec mysql -u gu -p"$MYSQL_PASSWORD" -D dbname < /opt/somequeries.sql'
  when: manual

config.toml

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "runner"
  url = "https://gitlab.com"
  token = "xxxxxxxxxxxxxxxxxxxx"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache", "/builds:/builds"]
    shm_size = 0
    memory = "128m"
    memory_swap = "256m"
    memory_reservation = "128m"

[[runners]]
  name = "staging_runner"
  url = "https://gitlab.com"
  token = "xxxxxxxxxxxxxxxxxxxx"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache", "/builds:/builds"]
    shm_size = 0
    memory = "128m"
    memory_swap = "256m"
    memory_reservation = "128m"

I have not reached my goal yet. Plus now the staging pipeline give me back an error like this

error during connect: Get [http://docker:2378/v1.40/containers/mysql_staging/json:](http://docker:2378/v1.40/containers/mysql_staging/json:) dial tcp: lookup docker on XX.XXX.XX.X:53: no such host

Is my design correct to reach my goal?

If yes, do I have any misconfiguration?

Thank you in advance for your help.

PistolPete
  • 147
  • 2
  • 10

0 Answers0