小编Dan*_*iel的帖子

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

我有一个 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

5
推荐指数
2
解决办法
9377
查看次数

使用 Secret 时无法连接到 kubernetes 上的 mariadb

我在 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

0
推荐指数
1
解决办法
1075
查看次数