Kubernetes中spinnaker使用二

网友投稿 355 2022-10-01

Kubernetes中spinnaker使用二

背景:

从一条 pipeline开始

创建application

创建流水线pipeline

Parameters-关于参数化构建

准备前提:

apiVersion: apps/v1 kind: Deployment metadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: dev spec: replicas: 1 selector: matchLabels: k8s-app: nginxdemo template: metadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: dev spec: containers: - image: 'harbor.xxxx.com/spinnaker/spinnaker-nginx-demo:1.2.4' imagePullPolicy: Always name: nginxdemo ports: - containerPort: 80 name: web protocol: TCP imagePullSecrets: - name: harbor-layame

定义参数Parameters:

deploy Mainfest

apiVersion: apps/v1 kind: Deployment metadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: dev spec: replicas: 1 selector: matchLabels: k8s-app: nginxdemo template: metadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: dev spec: containers: - image: '${ parameters.image }' imagePullPolicy: Always name: nginxdemo ports: - containerPort: 80 name: web protocol: TCP

增加webhook stage 保存流水线

{ "msgtype": "text", "text": { "content": "流水线 ${execution['name']}运行中, 运行用户 ${execution['trigger']['user']}" }

集群中操作

run流水线并验证部署结果

增加parameters replicas参数

replicas: '${#toInt(parameters.replicas)}'

Manifest Configuration如下:

apiVersion: apps/v1 kind: Deployment metadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: dev spec: replicas: '${#toInt(parameters.replicas)}' selector: matchLabels: k8s-app: nginxdemo template: metadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: dev spec: containers: - image: '${ parameters.image }' imagePullPolicy: Always name: nginxdemo ports: - containerPort: 80 name: web protocol: TCP

流水线回滚

临时回滚(忽略没有找到)

但是1.26.6版本貌似排版变了我找了一圈没有找到临时回滚还是直接整自动回滚了!

配置回滚

先说一下流水线中的stage

创建Manual Judgment stage

Manual Judgment 回滚 stage 选择

强调一下Manual Judgment的id是2。所以这里的stages是2 ,一下表达式的含义是流水线stages2中judgmentInput 是rollback。

${ execution['stages'][2].context.judgmentInput == "rollback" }

完善一下线上的流水线:

拿jenkins中spinnaker-nginx-demo pipeline 来搞。先说一下自己要实现的:嗯gitlab触发jenkins打包镜像(这里重新定义镜像tag用时间)。然后将参数传播给spinnaker触发!

git仓库以及jenkins配置:

参照jenkins Trigger 触发器,当然了这里修改了一点参数化构建增加Dynimic Parameter(如何没有自己百度找插件)参数。定义名字data(可以自己定义名称,个人习惯就用data了)!Default Value Script如下:

return new Date().format('yyyyMMddHHmm')

jenkins的流水线

就将镜像的tag修改为了data其实

//Docker 镜像仓库信息 registryServer = "harbor.xxxxx.com" projectName = "${JOB_NAME}".split('-')[0] repoName = "${JOB_NAME}" imageName = "${registryServer}/${projectName}/${repoName}" //pipeline pipeline{ agent { node { label "build01"}} //设置构建触发器 triggers { GenericTrigger( causeString: 'Generic Cause', genericVariables: [[defaultValue: '', key: 'branchName', regexpFilter: '', value: '$.ref']], printContributedVariables: true, printPostContent: true, regexpFilterExpression: '', regexpFilterText: '', silentResponse: true, token: 'spinnaker-nginx-demo') } stages{ stage("CheckOut"){ steps{ script{ srcUrl = "https://gitlab.xxxx.com/zhangpeng/spinnaker-nginx-demo.git" branchName = branchName - "refs/heads/" currentBuild.description = "Trigger by ${branchName}" println("${branchName}") checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitlab-admin-user', url: "${srcUrl}"]]]) } } } stage("Push Image "){ steps{ script{ withCredentials([usernamePassword(credentialsId: 'harbor-admin-user', passwordVariable: 'password', usernameVariable: 'username')]) { sh """ sed -i -- "s/VER/${branchName}/g" app/index.html docker login -u ${username} -p ${password} ${registryServer} docker build -t ${imageName}:${data} . docker push ${imageName}:${data} docker rmi ${imageName}:${data} """ } } } } stage("Trigger File"){ steps { script{ sh """ echo IMAGE=${imageName}:${data} >trigger.properties echo ACTION=DEPLOY >> trigger.properties cat trigger.properties """ archiveArtifacts allowEmptyArchive: true, artifacts: 'trigger.properties', followSymlinks: false } } } } }

spinnaker中的pipeline设置

创建pipeline

Configuration中Automated Triggers 配置

jenkins 触发器并添加Property File(jenkins中的制品)trigger.properties(注意别多复制了空格)

Deploy (Manifest) Configuration(发布应用 stage修改)

image: "${trigger['properties']['IMAGE']}"

Undo Rollout (Manifest)回滚应用的配置

git文件修改文件触发 and jenkins联动

登陆spinnakerweb验证

rollback回滚验证

流水线webhook的信息

后记

流水线stage在管道工具中的的id,这个地方一定要注意一下 非字符串参数的toInt 参数中偷懒复制名词的时候的空格 还一样比较坑的....我重装了一遍spinnaker练手。设置外部redis的时候配置文件携程了redis.yaml所以一直没有生效....找了好久的问题最后才发现,yaml vs yml切记。 只学习简单实用的功能,复杂的就不去研究了。深入研究请参考泽阳老师大佬的spinnaker课程。特别鸣谢泽阳大佬。jenkins spinnaker课程都是跟大佬的步伐来的!泽阳大佬的devops云学堂。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java+JFrame实现贪吃蛇小游戏
下一篇:Android Camera 相机开发第一篇
相关文章

 发表评论

暂时没有评论,来抢沙发吧~