Ste*_*oro 5 git continuous-integration gitlab docker google-cloud-platform
在我的项目中,我必须docker-in-docker
使用 CLoudBuild 从 GitLab 上传 Google CloudRun。我遇到了一个奇怪的错误。我有一个本地版本.env
,我不想将其排除在 git 修订之外。所以我把它放入.gitignore
文件中。
但在 CloudBuild 上传过程中,我创建了一个.env
使用 GitLab 的 CI/CD 中设置的变量命名的文件。我用这个.gitlab-ci.yml
。
image: docker:latest
stages:
- deploy
deploy:
stage: deploy
image: google/cloud-sdk
services:
- docker:dind
script:
- echo CLOUDSQL_PASSWORD=$CLOUDSQL_PASSWORD >> app/.env
- echo CLOUDSQL_USERNAME=$CLOUDSQL_USERNAME >> app/.env
- echo CLOUDSQL_HOST=$CLOUDSQL_HOST >> app/.env
- echo MONGODB_PASSWORD=$MONGODB_PASSWORD >> app/.env
- echo MONGODB_USERNAME=$MONGODB_USERNAME >> app/.env
...
Run Code Online (Sandbox Code Playgroud)
问题是该文件没有被 docker 复制到新容器,并且我无法在 Node.js 应用程序中访问它。看起来 docker 还合并了文件行.gitignore
并排除了.env
GitLab CI 刚刚创建的文件。
.dockerignore
我尝试以白名单方法设置该文件。
*
#white list
!app/.env
!app/index.js
!app/package.json
!app/service-account.json
!app/yarn.lock
Run Code Online (Sandbox Code Playgroud)
这就是Dockerfile
正在使用的。
FROM node:14.12-alpine3.12
ENV NODE_ENV production
ENV GOOGLE_APPLICATION_CREDENTIALS service-account.json
EXPOSE 8080
WORKDIR /app
COPY app/ ./
RUN yarn
CMD ["yarn", "start"]
Run Code Online (Sandbox Code Playgroud)
官方文档没有说,但从个人经验来看,如果你没有.gcloudignore
文件,那么它默认遵循你的规则.gitignore
可以选择全局禁用此默认行为:
gcloud config set gcloudignore/enabled false
Run Code Online (Sandbox Code Playgroud)
但这听起来不是一个好的选择。最好是显式添加 .gcloudignore 文件:
.gcloudignore
.git
.gitignore
!app/.env
Run Code Online (Sandbox Code Playgroud)
最后一行不会对您的情况产生影响,只是将其包含在内以显示如何显式包含丢失的文件。