如何 mount/reuse docker-为 gitlab-runner CI 撰写秘密?

How to mount/reuse docker-compose secrets for gitlab-runner CI?

明确地说,我说的是 secrets configuration 可用于 docker-compose 3.x。
我不是在谈论使用环境变量(来自主机或来自 Gitlab CI/CD 设置)传递秘密 keys/tokens。

假设我有这个 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 or in the /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

我目前的解决方案是使用[runners.docker]部分下的volumes配置,并挂载/path/to/secrets.txt作为常规卷。

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

但我认为这有点重复配置,我手动指定 /run/secrets/secret_name 路径。

是否有另一种方法可以将 secrets 配置指定给 gitlab-runner?

ENV 详细信息:

看来我误解了 secrets 配置的用法。

显然,它是为 Docker 集群设计的。
来自 Manage sensitive data with Docker secrets 文档:

Note: Docker secrets are only available to swarm services, not to standalone containers.

它仍然可以在 docker-compose 文件中为非 swarm 独立容器定义(就像在我的示例 docker-compose 文件中问题),它仍然会向您的容器添加 /run/secrets/secret-name。但是,它的行为类似于常规绑定安装。

来自 this Github issue 关于在没有群的情况下使用 Docker 秘密:

In docker-compose /run/secrets is just a bind mount to the host.
Those secrets are not deployed to a swarm.

因此,对于 gitlab-runner 作业,您可以使用常规挂载模拟 secrets 功能:

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