tke上如何通过jenkins和argocd完成代码自动化发布

CI/CD是大部分企业非常重要的一部分,也是必备的,相信大家都不陌生,每个企业都有自己的CI/CD,今天我们讲讲如何通过jenkins和argocd来实现CI/CD。

环境说明:

本次自动化构建和发布的流程大致如下,jenkins里面配置maven的流水线,从远程仓库拉取代码,然后进行maven打包,docker构建镜像,推送镜像到远程镜像仓库,然后对应k8s部署yaml文件,并提交到远程github上,argocd感知到远程仓库的yaml有更新后,开始更新集群内部署的deployment,pod更新完成后,发布完成。

1. 部署jenkins

这里我们通过helm来部署下jenkins

helm repo add jenkinsci https://charts.jenkins.io
helm repo update
helm fetch jenkinsci/jenkins
helm install jenkins  ./jenkins  -n weixnie

部署好之后,通过service访问下jenkins的页面,如果集群有安装nginx-ingress,也可以配置ingress来通过域名访问。

安装下构建需要用到的插件,基本的插件都安装下,这里主要说明下本次需要用到的插件:

  • Maven Integration:本次测试项目是springboot,需要用maven构建
  • GitHub plugin:访问github的api
  • Git Push Plugin:修改代码仓库的yaml文件,并推送到远程仓库
  • Docker API Plugin:链接远程机器的docker构建镜像
  • CloudBees Docker Build and Publish:推送docker镜像到远程仓库

2. 部署argocd

部署argocd可以直接用官网的yaml文件,但是官网的镜像是quay.io,国内可能无法拉取,可以用我已经上传到ccr的镜像,执行下面命令替换即可

# wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# sed -i "s/quay.io\/argoproj\/argocd-applicationset:v0.4.1/ccr.ccs.tencentyun.com\/niewx-k8s\/argocd-applicationset:v0.4.1/g" install.yaml
# sed -i "s/ghcr.io\/dexidp\/dex:v2.30.2/ccr.ccs.tencentyun.com\/niewx-k8s\/dexidp-dex:v2.30.2/g" install.yaml
# sed -i "s/quay.io\/argoproj\/argocd:v2.3.3/ccr.ccs.tencentyun.com\/niewx-k8s\/argocd:v2.3.3/g" install.yaml
# kubectl apply -f install.yaml -n weixnie

apply修改后的yaml文件,等pod运行正常即可

[root@VM-0-4-centos weixnie]# kubectl get pod,svc -n weixnie | grep   argo
pod/argocd-application-controller-0                     1/1     Running     0          4d23h
pod/argocd-applicationset-controller-8567f5896f-zrddj   1/1     Running     0          4d23h
pod/argocd-dex-server-549fb6cd85-pr5hx                  1/1     Running     0          8d
pod/argocd-notifications-controller-769bc57494-pgddn    1/1     Running     0          4d23h
pod/argocd-redis-86c97c8c64-ltqr8                       1/1     Running     0          4d23h
pod/argocd-repo-server-6cb9d8dfbc-lf59j                 1/1     Running     0          8d
pod/argocd-server-6db9f6dcf7-xrp49                      1/1     Running     0          5d2h
service/argocd-applicationset-controller          ClusterIP      10.55.255.196   <none>           7000/TCP                                                                  9d
service/argocd-dex-server                         ClusterIP      10.55.252.200   <none>           5556/TCP,5557/TCP,5558/TCP                                                9d
service/argocd-metrics                            ClusterIP      10.55.253.213   <none>           8082/TCP                                                                  9d
service/argocd-notifications-controller-metrics   ClusterIP      10.55.255.53    <none>           9001/TCP                                                                  9d
service/argocd-redis                              ClusterIP      10.55.255.160   <none>           6379/TCP                                                                  9d
service/argocd-repo-server                        ClusterIP      10.55.254.199   <none>           8081/TCP,8084/TCP                                                         9d
service/argocd-server                             LoadBalancer   10.55.255.143   172.16.0.49      80:31639/TCP,443:31211/TCP                                                9d
service/argocd-server-metrics                     ClusterIP      10.55.253.38    <none>           8083/TCP                                                                  9d

然后获取下argocd初始的登录密码,登录用户默认是admin,初始密码默认存在argocd-initial-admin-secret,可以通过下面命令获取

# kubectl get secret -n weixnie argocd-initial-admin-secret -o=jsonpath={.data.password} | base64 -d
O42jxxxxxx

通过获取的密码和admin用户控制台登录argocd即可。

3. 配置流水线

接下来,我们开始在jenkins配置下流水线,首先配置下全局配置,配置下docker

配置下github服务器

配置下git plugin

然后配置下docker的cloud

全局配置好之后,我们创建下maven项目的流水线

配置下源码管理,Credentials是github的登录用户名和密码,源码库浏览器选githubweb

构建触发器选择GitHub hook trigger for GITScm polling,当github仓库有代码更新时,则会自动触发流水线执行。

注意,构建触发器不能勾选,因为我这里的流水线会修改部署的yaml上传到github上,如果勾选自动触发,会不断循环执行流水线,因此这里不能采用触发器,自动构建,如果不需要修改代码文件上传到github,可以配置下自动构建。

构建环境选择Use secret text(s) or file(s),然后配置下github的登录凭证

pre step配置下pom.xml,用来执行maven构建打包

结下来配置下Post Steps,这一步配置了2个任务,一个是打包镜像,选择Run regardless of build result,dockerfile路径指定下,如果是根路径则是. ,cloud选择我们之前配置的docker,image填写自己的镜像仓库地址ccr.ccs.tencentyun.com/nwx_registry/springboot:${BUILD_NUMBER},tag这里用了内置的环境变量,默认是每次执行job的数值,然后勾选Push image和Clean local images,并配置下镜像仓库的登录凭证

第二个任务是通过shell脚本修改deploy的部署yaml,将镜像换成最新的tag

cd /var/jenkins_home/workspace/github-mvn-test/deploy
old_tag=`grep -i ccr. deploy.yaml | awk -F ":" '{print $NF}'`
sed -i "s/ccr.ccs.tencentyun.com\/nwx_registry\/springboot:$old_tag/ccr.ccs.tencentyun.com\/nwx_registry\/springboot:${BUILD_NUMBER}/" deploy.yaml
cd /var/jenkins_home/workspace/github-mvn-test/
git add .
git commit -am "test"

最后配置下构建后操作,配置git push,将代码上传到github上。

4. 配置argocd的Applications

配置好jenkins流水线后,我们配置下argocd的应用,只要github仓库更新了部署的目录下文件,这里部署的yaml是在deploy目录下,接下来argocd就会自动执行应用,更新集群里面的工作负载。

创建好之后,会有个Applications

这里创建application时候遇到一个问题,一直提示argocd-server这个sa对应的rbac权限不足,但是部署的时候默认是绑定的argocd-application-controller这个ClusterRole是有足够的权限的。

后面我这直接给绑定了tke集群默认的tke:admin这个ClusterRole就正常了,这里具体的原因没排查到。

kubectl create clusterrolebinding argocd-application-controller-binding --clusterrole=tke:admin --serviceaccount=weixnie:argocd-application-controller

5. 测试提交代码触发自动构建及发布

上面jenkins和argocd,都配置好了,下面我们直接在远程仓库提交下代码,然后看下是否会自动构建并发布到tke集群内。

我们修改下README.md,加上当前时间

提交代码后,jenkins上点击下立即构建

可以查看下日志,发现构建成功,对应的镜像tag是42,然后我们看下argocd是否有自动部署

可以发现argocd执行了镜像更新操作,我看再到集群看下pod是否正常更新

可以发下pod也正常更新了,说明这里我们部署成功了。

原文地址:https://cloud.tencent.com/developer/article/1999658

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340