将Gitlab Secrets传递给CI中的docker build

问题描述 投票:0回答:1

我目前正在寻找一种使用Gitlab Secrets在CI中定义ENV变量的方法,因此当我需要部署容器时,我可以在构建时覆盖默认值。

根据我的发现,如果我没有在build命令中指定-e,就没有这种方法。但是,对于一定数量的论证,这不是很实用。

我目前的命令目前看起来像这样:

# In .gitlab-ci
docker build -t $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/production:${CI_COMMIT_REF_SLUG} -f .docker/production/Dockerfile .

# In Dockerfile
ENV MAILER_URL=${MAILER_URL:-"null://localhost"}

我知道我可以使用build args,但我有很多设置,我想避免将它们放在CI中

docker environment-variables gitlab-ci docker-build
1个回答
1
投票

截至今天,在构建过程中没有直接从文件读取的方法,但是您可以将所有参数添加到文件中,然后使用bash构建构建命令。

  1. 在Dockerfile中,您可以拥有以下内容:
# In Dockerfile
ARG MAILER_URL http://localhost
ENV MAILER_URL=${MAILER_URL}

这意味着默认情况下,MAILER_URL的值将为http://localhost,但您可以在构建期间使用--build-arg覆盖它

2-将Gitlab CI变量导出到before_script中的文件例如(arguments.txt)或任何其他更好的部分:

echo "MAILER_URL=$CI_MAILER_URL" >> arguments.txt
# echo other variables to arguments.txt

3-阅读arguments.txt并将其保存在变量中,然后将其传递给docker build

export BUILD_ARGS=$(for arg in $(cat arguments.txt); do echo "--build-arg $arg ";done | tr -d '\n');

docker build -t $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/production:${CI_COMMIT_REF_SLUG} $BUILD_ARGS -f .docker/production/Dockerfile .

有关详细信息,您可以查看Set build-time variables (--build-arg) in DockerARG usage in Dockerfile


此外,您需要从安全角度考虑MAILER_URLMAILER_PASSWORD等变量,您应该在部署时传递它们,并且还能够将映像部署到多个环境。

你可以看看The Twelve Factor App: Config section

在不更改任何代码的情况下,可以在部署之间轻松更改Env变量;

© www.soinside.com 2019 - 2024. All rights reserved.