Gitlab runner

Содержание
  1. Gitlab runner in docker
    1. Запуск раннера в докере
    2. Маунт папки внутри докера
    3. Использование ssh в .gitlab-ci

Gitlab runner in docker

Запуск раннера в докере

Данная схема позволяет использовать раннер в докере, при этом внутри можно использовать докер для того, чтобы билдить образы либо выполнять билд при помощи образов докера.

Используемый docker-compose.yaml:

version: "3.1"
services:
 gitlab-runner:
   image: gitlab/gitlab-runner:latest
   container_name: gitlab-runner
   restart: unless-stopped
   volumes:
           - /etc/gitlab-runner:/etc/gitlab-runner
           - /var/run/docker.sock:/var/run/docker.sock
           - /cache:/cache

Файл /etc/gitlab-runner/config.toml.

[[runners]]
  name = "gitlab-runner"
  url = "https://gitlab.example.com/"
  token = xxxxxxxxxxx
  executor = "docker"
  [runners.custom_build_dir]
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache:/cache", "/dev/shm", "/var/run/docker.sock:/var/run/docker.sock"]
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

Image можно использовать любой

Маунт папки внутри докера

Для того, чтобы смонтировать папку, которая находится как бы внутри докера, необходимо вычислить ее местонахождение на хосте. Для этого, надо добавить в .gitlab-ci.yml следующие строки:

 script:
   - DOCKER_CONTAINER_ID=$(docker container ps --filter name=$HOSTNAME --format "")
   - DOCKER_VOLUME_SOURCE=$(docker container inspect "$DOCKER_CONTAINER_ID" 

Использование ssh в .gitlab-ci

В секцию before_script надо добавить:

before_script:
  - apk --update add openssh-client &&
  - which ssh-agent || apk add --update openssh-client &&
  - eval $(ssh-agent -s)
  - echo "$DEPLOY_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  • $DEPLOY_SSH_PRIVATE_KEY - приватный ключ, для доступа по ssh.
Поделиться
Отправить