-4

为了清楚起见,我说的是可用于3.x的secrets配置。 我不是在谈论使用环境变量(来自主机或来自 Gitlab CI/CD 设置)传递密钥/令牌。docker-compose

假设我有这个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

/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

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

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

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

还有另一种方法可以secrets为 gitlab-runner 指定配置吗?

环境细节:

  • Gitlab CE 12.8.6
  • gitlab-runner 12.7.1
  • 码头工人 19.03.6
  • 码头工人撰写 1.24.0
4

1 回答 1

0

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

显然,它被设计用于 Docker Swarms。
使用 Docker 机密文档管理敏感数据:

注意:Docker 机密仅适用于 swarm 服务,不适用于独立容器。

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

这个 Github issue on using Docker secrets without a swarm:

在 docker-compose/run/secrets中只是绑定到主机的挂载。
这些秘密不会部署到集群中。

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

volumes = [
    "/path/to/my_app_secrets:/run/secrets/my_app_secrets"
]
于 2020-04-11T10:43:13.297 回答