我有一个签入gitlab的node.js(express)项目,它正在Kubernetes中运行。我知道我们可以在Deployment.yaml文件的Kubernetes(在Azure,aks上)中设置环境变量。
如何将gitlab ci / cd env变量传递给kubernetes(aks)(deployment.yaml文件)?
答案 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
文件。