首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Gitlab CI中构建期间将.env文件添加到Docker-Image的最佳实践

在Gitlab CI中构建期间将.env文件添加到Docker-Image的最佳实践
EN

Stack Overflow用户
提问于 2020-04-22 01:52:23
回答 2查看 3.2K关注 0票数 2

我有一个node.js项目,我在不同的环境(本地,阶段,生产)中以Docker-Container的身份运行,并因此通过配置它

-Files。一如既往的建议,我不存储

我的远程存储库中的-Files。我的生产系统和阶段系统都是作为kubernetes集群运行的。

我想要实现的是通过Gitlab的CI为不同的环境(例如,阶段)根据提交分支(也称为阶段)实现自动构建,这意味着当我推送到源/阶段时,我希望为我的阶段环境构建Docker映像,并使用相应的

-File在里面。

在我的本地机器上,它非常简单,因为我有所有不同的

在我的应用程序的根文件夹中的-Files我只是在我的

代码语言:javascript
复制
COPY .env-stage ./.env

一切都很好。

因为我没有将.env-Files存储在我的远程存储库中,所以这种方法不起作用,所以我使用Gitlab CI变量并创建了一个名为

类型

使用我的本地文件的内容

文件。

现在我的问题是:我如何在将要由gitlab构建的docker镜像中以.env-File的形式获取该内容,因为该文件在我的repo中还不是一个文件,而是一个变量?

我试着用

(见下文,也请参阅

-section)仅将文件复制到

在构建过程中使用-File,但这显然不起作用。

我当前的构建阶段如下所示:

代码语言:javascript
复制
image: docker:git

services:
  - docker:dind

build stage:
  only:
    - stage
  stage: build
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - cp $DOTENV_STAGE .env
    - docker pull $GITLAB_IMAGE_PATH-$CI_COMMIT_BRANCH || true
    - docker build --cache-from $GITLAB_IMAGE_PATH/$CI_COMMIT_BRANCH --file=Dockerfile-$CI_COMMIT_BRANCH -t $GITLAB_IMAGE_PATH/$CI_COMMIT_BRANCH:$CI_COMMIT_SHORT_SHA .
    - docker push $GITLAB_IMAGE_PATH/$CI_COMMIT_BRANCH

这会导致

代码语言:javascript
复制
Step 12/14 : COPY .env ./.env
 COPY failed: stat /var/lib/docker/tmp/docker-builder513570233/.env: no such file or directory

我也试过

以及

但它们都不起作用。

所以我实际上不知道的部分是:我必须将文件放在哪里,以便在构建过程中使其可供docker使用?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-22 17:31:30

经过进一步的研究,我偶然发现了gitlab.com上的一个支持论坛条目,它准确地描述了我的情况(不幸的是,它在此期间被删除了),它得到了解决,这与我尝试使用的方法相同,即:

代码语言:javascript
复制
...
script:
- cp $DOTENV_STAGE $CI_PROJECT_DIR/.env
...

在我的.gitlab-ci.yml中

实际上我错过的部分是调整我的

相应地-File (删除

),然后删除该行

代码语言:javascript
复制
COPY .env ./.env

来自我的

另一种方法

我想过之后

joyarjo的回答

可能是使用

适用于Kubernetes的ConfigMap

..。但我还没试过

票数 1
EN

Stack Overflow用户

发布于 2020-04-22 13:14:45

你应该避免复制

文件一起放到容器中。而是在运行时从外部提供它。有一个专门的道具可以做到这一点:

环境

_

文件

..。

代码语言:javascript
复制
web:
  env_file:
    - .env

您可以将

文件本身在

屏蔽变量

在GitLabs CI后端。然后将其转储到

在runner中创建文件,并将其提供给Docker compose管道。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61349904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档