如何将gitlab ci/cd变量传递给kubernetes(AKS)deployment.yaml

如何将gitlab ci/cd变量传递给kubernetes(AKS)deployment.yaml,kubernetes,gitlab,Kubernetes,Gitlab,我有一个node.js(express)项目签入了gitlab,它正在Kubernetes中运行。我知道我们可以在deployment.yaml文件中的Kubernetes(在Azure、aks上)中设置env变量 如何将gitlab ci/cd env变量传递给kubernetes(aks)(deployment.yaml文件)?我将为您提供一个简单的解决方案,它可能是“解决方案”,也可能不是“解决方案” 要想做您想做的事情,您只需在启动部署之前在cd中秘密添加gitlab env变量。这将允

我有一个node.js(express)项目签入了gitlab,它正在Kubernetes中运行。我知道我们可以在deployment.yaml文件中的Kubernetes(在Azure、aks上)中设置env变量


如何将gitlab ci/cd env变量传递给kubernetes(aks)(deployment.yaml文件)?

我将为您提供一个简单的解决方案,它可能是“解决方案”,也可能不是“解决方案”

要想做您想做的事情,您只需在启动部署之前在cd中秘密添加gitlab env变量。这将允许您在部署中使用env secret


如果您想这样做,您需要考虑在更新它们以获得幂等性时如何删除它们。

另一个解决方案是将要部署的对象创建为图表。这将允许您拥有特定的变量(称为值),您可以在模板中使用这些变量,并在安装/升级时进行覆盖

有很多文章都是关于用这样的东西进行设置的

  • 下面是一个专门围绕CI/CD上下文的示例:
  • 另一个特别围绕GitLab的主题是:

您可以开发自己的舵图。从长远来看,这将得到回报

另一种方法:有一种简单而通用的方法,就是将
${MY_VARIABLE}
占位符放入deployment.yaml文件中。接下来,在管道运行期间,在部署作业中使用
envsubt
命令用相应的值替换vars并部署文件

部署文件示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-${MY_VARIABLE}
  labels:
    app: nginx
spec:
  replicas: 3
(...)
示例工作:

(...)
deploy:
  stage: deploy
  script:
    - envsubst < deployment.yaml > deployment-${CI_JOB_NAME}.yaml
    - kubectl apply -f deployment-${CI_JOB_NAME}.yaml
(…)
部署:
阶段:部署
脚本:
-envsubtdeployment-${CI_JOB_NAME}.yaml
-kubectl apply-f部署-${CI_JOB_NAME}.yaml

供未来读者阅读。另一种方法是使用模板文件并使用
envsubt
从模板生成
deployment.yaml

模板文件:

# template/deployment.tmpl
---
apiVersion: apps/v1
kind: deployment
metadata:
  name: strapi-deployment
  namespace: strapi
  labels:
    app: strapi

# deployment specifications
spec:
  replicas: 1
  selector:
    matchLabels:
      app: strapi
  serviceName: strapi

  # pod specifications
  template:
    metadata:
      labels:
        app: strapi

    # pod blueprints
    spec:
      containers:
        - name: strapi-container
          image: registry.gitlab.com/repo-name/image:${IMAGE_TAG}
          imagePullPolicy: Always
    imagePullSecrets:
    - name: gitlab-registry-secret
deploy
stage in
.gitlab ci.yml

(...)
deploy:
  stage: deploy
  script:
    # deploy resources in k8s cluster
    - envsubst < strapi-deployment.tmpl > strapi-deployment.yaml
    - kubectl apply -f strapi-deployment.yaml
(…)
部署:
阶段:部署
脚本:
#在k8s群集中部署资源
-envsubtstrapi-deployment.yaml
-kubectl apply-f strapi-deployment.yaml

正如这里定义的那样,
image:registry.gitlab.com/repo name/image:${image\u TAG}
image\u TAG
是在gitlab中定义的环境变量
envsubt
将通过
strapi-deployment.tmpl
替换其中定义的任何变量,并生成
strapi-deployment.yaml
文件。

这是一种方法。但我希望我们能在gitlab环境变量中指定它并以某种方式访问它们。这将是最好的方法,以防我们以后要更改它们。这也是一种方法。我现在还没有使用帮助图表。