我让我的azure pipeline使用我的kubernetes配置执行一个kubernetes@1任务:
apiVersion: apps/v1
kind: Deployment
metadata:
name: tennant-service-deployment
labels:
app: tennant-service
spec:
replicas: 3
selector:
matchLabels:
app: tennant-service
template:
metadata:
labels:
app: tennant-service
spec:
containers:
- name: tennant-service
image: cronesharedwesteurope.azurecr.io/tennant-service:dev
ports:
- containerPort: 80
imagePullSecrets:
- name: registrysecret
你可以看到,目前我的图像是硬编码在我的yaml文件(tennant-service:dev)。
我想让用户用一个azure devops pipeline参数告诉我他想要哪个版本(例如dev / 1.0 / latest)。但是因为kubernetes是一个yaml配置文件,我不能用一个参数来改变它,对吗?有没有什么工具可以做到这一点?
4条答案
按热度按时间von4xj4u1#
我的案例目标是GKE的@PassionateDeveloper,我们使用Azure DevOps for CI/CD。要求是使用Build.BuildID作为映像标签,以唯一区分所有映像标签。以下是我用于满足要求的内容。
我的Kubernetes清单看起来像这样。
我已经使用https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens为我做了魔术。
因此,我的整体部署阶段yaml文件将看起来像这样,它的工作就像一个魅力。
oaxa6hgo2#
这就是我们工作的内容
1.创建一个构建管道,该管道构建带有标记的Docker映像,标记是管道构建号,例如#1.6.1-TenentServiceImage。(假设您已经在构建过程中将映像推送到ACR)。
1.在您的部署YAML管道中,添加一个资源,
1.在同一个YAML中,现在可以引用图像路径中的资源,
1.当您的开发人员尝试部署容器时,他们单击“运行,”应该会看到一个新的选择下拉列表资源,并选择他们要部署的构建。x1c 0d1x
k3fezbri3#
我希望用户使用Azure devops管道参数告诉我他想要哪个版本(例如,dev / 1.0 / latest)。
要满足您的要求,您可以使用RegEx Match & Replace extension中的RegEx匹配和替换任务。
此任务将使用正则表达式来匹配文件中的字段。
在这种情况下,您可以定义使用者要输入的参数,并将值传递给工作以取代标记。
以下是一个示例:
然后该值将更新。
结果:
运行管道
Yaml文件:
您可以使用此站点转换正则表达式:Regex Generator
或者,您也可以使用“替换令牌”任务。请参阅以下票证:如何在构建期间将Azure管道中的变量应用于节点应用程序
2uluyalo4#
微软在为Kubernetes容器设置Azure DevOps管道方面有一些不错的documentation。该示例的特点是在管道中使用KubernetesManifest@0任务,允许使用管道变量或参数指定容器标记。