簡體   English   中英

如何安全登錄到 gitlab 中的私有 docker 注冊表?

[英]How to safely login to private docker registry in gitlab?

我知道有秘密變量,我嘗試將秘密傳遞給 bash 腳本。 當在具有#!/bin/bash -x的 bash 腳本上使用時,密碼可以在使用 docker login 命令時以明文形式顯示,如下所示:

docker login "$USERNAME" "$PASSWORD" $CONTAINERREGISTRY

有沒有辦法安全地登錄到 gitlab-ci 中的容器注冊表?

如果您需要多個身份驗證,您可以在gitlab-ci.yml文件的開頭或每個作業中使用before_script

before_script:
  - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin 

其中$CI_REGISTRY_USERCI_REGISTRY_PASSWORD將是秘密變量。

在每個腳本之后或在整個文件的開頭:

after_script:
    - docker logout

我寫了一篇關於使用 Gitlab CI 和 Docker 構建 docker 鏡像的答案: https ://stackoverflow.com/a/50684269/8247069

GitLab 在運行作業時提供了一組環境變量。 你會想要在開發(運行測試構建等)時熟悉並使用它們,這樣你就不需要做任何事情,除了在 GitLab 中相應地設置 CI/CD 變量(如 ENV),Gitlab 將提供大部分內容你會想要的請參閱GitLab 環境變量

只是對之前建議的內容稍作調整(將 GitLab 建議與此相結合。)

有關在何處/如何使用 before_script 和 after_script 的更多信息,請參閱.gitlab-ci-yml 配置參數“后腳本”。

before_script:
  - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin;

然后進一步向下你的 .gitlab-ci.yml ......

after_script:
  - docker logout;

對於我的本地開發,我創建了一個遵循通用約定的 .env 文件,然后以下 bash 代碼段將檢查該文件是否存在並將值導入到您的 shell 中。 為了使我的項目安全且友好, .env被忽略,但我維護了一個帶有安全示例值的 .env.sample 並且我確實包含了它。

if [ -f .env ]; then printf "\n\n::Sourcing .env\n" && set -o allexport; source .env; set +o allexport; fi

這是一個大致完整的示例:

image: docker:19.03.9-dind

stages:
  - buildAndPublish

variables:
  DOCKER_TLS_CERTDIR: "/certs"
  DOCKER_DRIVER: overlay2
services:
  - docker:19.03.9-dind

before_script:
  - printf "::GitLab ${CI_BUILD_STAGE} stage starting for ${CI_PROJECT_URL}\n";
  - printf "::JobUrl=${CI_JOB_URL}\n";
  - printf "::CommitRef=${CI_COMMIT_REF_NAME}\n";
  - printf "::CommitMessage=${CI_COMMIT_MESSAGE}\n\n";
  - printf "::PWD=${PWD}\n\n";
  - echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin;

build-and-publish:
  stage: buildAndPublish
  script:
    - buildImage;
    - publishImage;
  rules:
    - if: '$CI_COMMIT_REF_NAME == "master"' # Run for master, but not otherwise
      when: always
    - when: never

after_script:
  - docker logout registry.gitlab.com;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM