Как смонтировать / повторно использовать docker -составить секреты для Gitlab-runner CI? - PullRequest
0 голосов
/ 23 марта 2020

Для ясности, я говорю о конфигурации secrets , доступной для docker-compose 3.x.
Я не говорю о передаче секретных ключей / токенов с помощью переменных среды (от хоста). или из настроек Gitlab CI / CD).

Допустим, у меня есть эта docker-compose конфигурация:

version: "3.7"

services:
  my-app:
    image: ubuntu:18.04
    container_name: my-app-container
    command: tail -f /dev/null
    secrets:
      - my_app_secrets

secrets:
  my_app_secrets:
    file: /path/to/secrets.txt

Когда я запускаю контейнер вручную

$ docker-compose up -d
$ docker-compose exec my-app bash

A / run / secrets / my_app_secrets становится доступным внутри контейнера, содержащего то же точное содержимое, что и secrets.txt . Путь / run / secrets / определяется конфигурацией secrets.

Теперь мне нужно использовать эту же настройку для конвейера Gitlab CI. К сожалению, я не могу найти конфигурацию для добавления в .gitlab-ci.yml или в / etc / gitlab-runner / config. toml , что позволит мне указать ту же конфигурацию secrets. Я уверен, что он не смонтирован, потому что я использую пользовательский сценарий ENTRYPOINT, который проверяет файл / run / secrets / my_app_secrets и его там нет.

if [[ ! -e "/run/secrets/my_app_secrets" ]];
then
    print_error "Did not find mounted app secrets from host"
    return 1
fi

Текущий Теперь у меня есть решение использовать конфигурацию volumes в разделе [runners.docker] и смонтировать / path / to / secrets.txt в качестве обычного тома.

volumes = [
    "/path/to/secrets.txt:/run/secrets/my_app_secrets"
]

Но я думаю, что подобное дублирует конфигурацию, и я вручную указываю / run / secrets / secret_name путь.

Есть ли другой способ указать secrets конфиг для gitlab-runner?

ENV подробности:

  • Gitlab CE 12.8.6
  • gitlab-runner 12.7.1
  • Docker 19.03.6
  • docker - составить 1.24.0

1 Ответ

0 голосов
/ 11 апреля 2020

Кажется, я неправильно понял использование конфигурации секретов .

Очевидно, он предназначен для использования Docker Рой.
Из Управление чувствительными данные с Docker секретами документы:

Примечание : Docker секреты доступны только для служб роя, но не для автономных контейнеров.

Он все еще может быть определен в файле docker-compose для автономных контейнеров без роя (как в примере файла docker -compose в моем вопросе), и он все равно добавит / run / secrets / secret-name в ваш контейнер. Тем не менее, он ведет себя как обычная привязка.

С эта проблема Github при использовании Docker секретов без роя:

В docker - compose /run/secrets - это просто привязка к хосту.
Эти секреты не раскрыты в рое.

Таким образом, для заданий, выполняющих gitlab, вы можете эмулировать функцию секретов с помощью обычное крепление:

volumes = [
    "/path/to/my_app_secrets:/run/secrets/my_app_secrets"
]
...