我有一个 node.js 项目,我在不同的环境(本地、阶段、生产)中作为 Docker 容器运行,因此通过.env-Files 配置它。正如我一直建议的那样,我不会将.env-Files 存储在我的远程存储库(即 Gitlab)中。我的生产和阶段系统作为 kubernetes 集群运行。
我想要实现的是通过 Gitlab 的 CI 针对不同环境(例如阶段)进行自动构建,具体取决于提交分支(也称为阶段),这意味着当我推送到 origin/stage 时,我希望为其构建 Docker 映像我的舞台环境及其.env中相应的文件。
在我的本地计算机上,这非常简单,因为我的.env应用程序的根文件夹中有所有不同的文件,我只是在我的应用程序中使用它Dockerfile
COPY .env-stage ./.env
Run Code Online (Sandbox Code Playgroud)
一切都很好。
由于我没有将 .env-Files 存储在远程存储库中,因此这种方法不起作用,因此我使用了 Gitlab CI 变量,并使用本地文件的内容创建了一个名为DOTENV_STAGEof type 的变量。file.env-stage
现在我的问题是:如何将该内容作为 .env-File 获取到将由 gitlab 构建的 docker 映像中,因为该文件还不是我的存储库中的文件,而是一个变量?
我尝试使用cp(见下文,也在before_script-section 中)在构建过程中将文件复制到 -File .env,但这显然不起作用。
我当前的构建阶段如下所示:
image: docker:git
services:
- docker:dind
build stage:
only:
- stage
stage: build
before_script:
- docker login -u $CI_REGISTRY_USER …Run Code Online (Sandbox Code Playgroud) continuous-integration environment-variables gitlab docker kubernetes
我在 Google Kubernetes Engine 上的 kubernetes 集群中托管 mariadb。我正在使用来自 dockerhub ( ) 的官方 mariadb 镜像mariadb:10.5。
这是我的服务和部署的 yml
apiVersion: v1
kind: Service
metadata:
name: mariadb
spec:
ports:
- port: 3306
selector:
app: mariadb
clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb
spec:
selector:
matchLabels:
app: mariadb
strategy:
type: Recreate
template:
metadata:
labels:
app: mariadb
spec:
containers:
- image: mariadb:10.5
name: mariadb
env:
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mariadb-secret
key: username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret …Run Code Online (Sandbox Code Playgroud) mysql mariadb docker google-cloud-platform google-kubernetes-engine