我有一个node.js项目,我在不同的环境(本地,阶段,生产)中以Docker-Container的身份运行,并因此通过配置它
-Files。一如既往的建议,我不存储
我的远程存储库中的-Files。我的生产系统和阶段系统都是作为kubernetes集群运行的。
我想要实现的是通过Gitlab的CI为不同的环境(例如,阶段)根据提交分支(也称为阶段)实现自动构建,这意味着当我推送到源/阶段时,我希望为我的阶段环境构建Docker映像,并使用相应的
-File在里面。
在我的本地机器上,它非常简单,因为我有所有不同的
在我的应用程序的根文件夹中的-Files我只是在我的
COPY .env-stage ./.env一切都很好。
因为我没有将.env-Files存储在我的远程存储库中,所以这种方法不起作用,所以我使用Gitlab CI变量并创建了一个名为
类型
使用我的本地文件的内容
文件。
现在我的问题是:我如何在将要由gitlab构建的docker镜像中以.env-File的形式获取该内容,因为该文件在我的repo中还不是一个文件,而是一个变量?
我试着用
(见下文,也请参阅
-section)仅将文件复制到
在构建过程中使用-File,但这显然不起作用。
我当前的构建阶段如下所示:
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这会导致
Step 12/14 : COPY .env ./.env
COPY failed: stat /var/lib/docker/tmp/docker-builder513570233/.env: no such file or directory我也试过
以及
和
但它们都不起作用。
所以我实际上不知道的部分是:我必须将文件放在哪里,以便在构建过程中使其可供docker使用?
谢谢
发布于 2020-04-22 17:31:30
经过进一步的研究,我偶然发现了gitlab.com上的一个支持论坛条目,它准确地描述了我的情况(不幸的是,它在此期间被删除了),它得到了解决,这与我尝试使用的方法相同,即:
...
script:
- cp $DOTENV_STAGE $CI_PROJECT_DIR/.env
...在我的.gitlab-ci.yml中
实际上我错过的部分是调整我的
相应地-File (删除
),然后删除该行
COPY .env ./.env来自我的
另一种方法
我想过之后
joyarjo的回答
可能是使用
适用于Kubernetes的ConfigMap
..。但我还没试过
发布于 2020-04-22 13:14:45
你应该避免复制
文件一起放到容器中。而是在运行时从外部提供它。有一个专门的道具可以做到这一点:
环境
_
文件
..。
web:
env_file:
- .env您可以将
文件本身在
屏蔽变量
在GitLabs CI后端。然后将其转储到
在runner中创建文件,并将其提供给Docker compose管道。
https://stackoverflow.com/questions/61349904
复制相似问题