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

时间:2019-06-21 14:35:15

标签: kubernetes gitlab

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

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

4 个答案:

答案 0 :(得分:1)

您可以开发自己的头盔图表。从长远来看,这将获得回报。

其他方法:一种简单且通用的方法是将${MY_VARIABLE}占位符放入Deployment.yaml文件中。接下来,在管道运行期间,在部署作业中,使用envsubst命令用相应的值替换var,然后部署文件。

示例部署文件:

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

答案 1 :(得分:0)

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

要执行所需的操作,您可以在启动部署之前在cd期间秘密地添加gitlab env变量。这将允许您在部署内部使用env secret。

如果您要这样做,则需要考虑如何在幂等性上进行更新。

答案 2 :(得分:0)

另一种解决方案是创建要作为Helm图表部署的事物。这样一来,您便可以在安装/升级时在模板中使用特定变量(称为值)并进行覆盖。

关于如何使用此类设置进行设置的文章很多。

答案 3 :(得分:0)

为了未来的读者。另一种方法是使用模板文件并使用 deployment.yaml 从模板生成 envsubst

模板文件:

# 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 中的

.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

如此处定义的image: registry.gitlab.com/repo-name/image:${IMAGE_TAG}IMAGE_TAG 是 gitlab 中定义的环境变量。 envsubst 将遍历 strapi-deployment.tmpl 并替换在那里定义的任何变量并生成 strapi-deployment.yaml 文件。