gpt4 book ai didi

docker - 如何安全地从 GitLab Runner KubernetesExecutor pod 推送到私有(private)容器注册表?

转载 作者:行者123 更新时间:2023-12-02 12:12:58 26 4
gpt4 key购买 nike

目标

构建一个 CI/CD 管道,可以使用具有特定项目结构的多个 GitLab 存储库。为此,构建了一个带有 Python 代码的 Docker 容器,然后安全地推送到 Google Cloud 的 Container Registry。

设置

  • KubernetesExecutor 使用 Helm chart 安装在 Kubernetes Engine 上。由 GitLab 提供。
  • 构建过程的基础镜像(runners.image 中的 values.yaml )是自定义镜像,因为这有助于自动容器化提供的存储库。 值得一提的原因是,它来自与应该将图像推送到的同一私有(private)存储库。
  • 现在,从存储库构建容器成功运行(见下面的代码)。

  • 问题

    如何在不向 Docker 镜像添加服务帐户 key 的情况下将镜像推送到 Container Registry(否则,请说服我这不是坏习惯)?

    代码

    .gitlab-ci.yml

    services:
    - docker:19.03.1-dind

    stages:
    - build

    build:
    stage: build
    script:
    - docker build -t ${CONTAINER_REGISTRY}/pyton-container-test:latest .
    # This line is where I'd need to use `docker login`, I guess.
    - docker push ${CONTAINER_REGISTRY}/python-container-test:latest

    values.yaml (Helm)

    值得一提的是,GitLab Runner 设置了以下环境变量:

    runners:
    env:
    DOCKER_DRIVER: overlay2
    DOCKER_HOST: tcp://localhost:2375
    DOCKER_TLS_CERTDIR: ""
    CONTAINER_REGISTRY: eu.gcr.io/<project_id>

    解决方案的方向

    我认为我应该能够将 Kubernetes 集群中的 secret 挂载到 GitLab Runner 构建 pod,但我似乎找不到这样做的方法。然后,我应该能够将以下行添加到 .gitlab-ci.yml :

    cat mounted_secret.json | docker login -u _json_key --password-stdin https://eu.gcr.io

    设置 config.toml使用 secret volume应该管用。但是,使用 Helm 图表,这似乎还不可能。

    笔记
  • 可以在 GitLab CI 中设置 protected 环境变量,但我宁愿不这样做,因为它们更难维护。
  • 我调查过this答案,但这表示我需要为我的 Docker 镜像添加一个 key 。
  • 查看了GitLab documentation关于使用私有(private)容器注册表,但似乎并没有更进一步。
  • 例如,当它必须在构建过程中连接到数据库时,就会出现类似的问题。
  • 最佳答案

    default Helm chart 是不可能的由 GitLab 提供。但是,有一个解决方法当你定制他们的。

    templates/configmap.yaml ,可以编辑entrypoint .最后,runner 开始如下:

    # Start the runner
    exec /entrypoint run --user=gitlab-runner \
    --working-directory=/home/gitlab-runner

    为此,请使用 config.toml根据提供的 values.yaml 生成(使用正确的 Runner token )。这意味着在这一步之前,我们可以编辑 config.toml到我们的需要。就我而言,我只是添加了:
    echo "    [[runners.kubernetes.volumes.secret]]" >> ${CONFIG_FILE}
    echo " name = \"{{ .Values.secretName }}\"" >> ${CONFIG_FILE}
    echo " mount_path = \"/keys\"" >> ${CONFIG_FILE}
    echo " read_only = true" >> ${CONFIG_FILE}

    在哪里 ${CONFIG_FILE}/home/gitlab-runner/.gitlab-runner/config.toml .

    最后,您可以使用以下命令部署 GitLab Runner:

    $ helm install project_name -f values.yaml <path to chart>

    关于docker - 如何安全地从 GitLab Runner KubernetesExecutor pod 推送到私有(private)容器注册表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60542643/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com