编辑
2024-06-19
CICD
00

目录

项目流程:
开发人员代码推送==>Jenkins软件git到本地==>镜像打包==>上传到harbor仓库==>发布到k8s集群中
环境搭建这里就不再提了,安装Jenkins、配置插件加速、下载插件、在Jenkins上安装Maven包,安装docker和docker-compose,安装k8s,测试可以装一个master和两三个node就可以。直接进入正题。
首先创建一个自由风格的流水线,配置好gitee,指定分支这我设置了一个变量名,参数化构建创建一个选项参数。
--- ---
1、接下来使用shell命令编译java源码
2、编译完成后要使用docker来打包和上传到本地harbor,因为是本地harbor,需要在Jenkins服务器中配置信任harbor
2.1 因为docker-build-setp有bug,而且使用变量过程中报错很多。这里就使用了docker官方插件
2.1.1选择执行shell命令
2.1.2编译java
2.1.3继续增加构建步骤build/Publish Docker Image,镜像打包,这里使用的registry变量、harborrepo、imagename、imagetag,registry在系统设置中配置的,剩下三个变量都是参数
2.1.3.1 registry变量位置在系统管理的系统配置中添加环境变量,在Jenkins的hosts中设置好解析即可
2.1.3.2 harborrepo变量
2.1.3.3 imagename变量,构建时填入或者使用Jenkins的系统变量JOB_NAME
2.1.3.4 imagetag变量
2.1.4 打包完毕后推送镜像到本地harbor仓库
2.1.5 设置k8s-API环境变量
2.1.6 增加布尔参数,跳过tls验证,默认为true
2.1.7 继续添加执行shell命令,首先替换deploy文件中的image为刚才镜像push的镜像名称,查看修改后的文件,打印k8s执行变量,前两个我们已经定义了,但是serverAccountToken需要在k8s中先获取,然后配置到构建环境中
2.1.7.1 配置serverAccountToken
2.1.7.2 需要执行的kubectl命令,这是使用的是kubectl options选项参数
2.1.7.3 全局中添加k8s-token凭据
2.1.7.4 凭据内容,secret内容等会我们在k8s中配置完然后复制到这里
2.1.7.5 到这里,Jenkins中的作业就配置完了,需要到k8s中配置。
3、k8s创建token
4、因为Jenkins中没有对应kubectl命令需要下载kubectl-client包,查看k8s对应的版本并下载到Jenkins中,解压、软链接到/usr/bin下即可。
5、在Jenkins服务器下测试是否可以通过token连接到k8s集群并获取数据
6、上面已经看到可以从Jenkins服务器中获取数据到k8s集群下的service了,现在开始运行Jenkins任务。只有选项参数才有下拉菜单。而imagename我们定义的是字符参数,所以需要输入镜像名称。
7、Jenkins运行结果,编译过程就不错展示了。太差也无用。
7.1 打包完成
7.2 镜像上传完成
7.3 运行deploy下的yaml文件完成
7.4 查看k8s集群中的pod是否成功运行,并测试页面
页面发布成功,这里只是做了一个最简单的示例,没有设置pod健康性监测、没有收集日志、没有设置ingress,如果设置完ingress还可以在浏览器上直接访问页面。达到一键部署应用和更新应用的效果。使用到的软件有、docker、Jenkins、k8s、maven等。

项目流程:

开发人员代码推送==>Jenkins软件git到本地==>镜像打包==>上传到harbor仓库==>发布到k8s集群中

环境搭建这里就不再提了,安装Jenkins、配置插件加速、下载插件、在Jenkins上安装Maven包,安装docker和docker-compose,安装k8s,测试可以装一个master和两三个node就可以。直接进入正题。

首先创建一个自由风格的流水线,配置好gitee,指定分支这我设置了一个变量名,参数化构建创建一个选项参数。

image.png

--- ---

image.png

1、接下来使用shell命令编译java源码

image.png

2、编译完成后要使用docker来打包和上传到本地harbor,因为是本地harbor,需要在Jenkins服务器中配置信任harbor

sh
{ "registry-mirrors": ["https://npud8xro.mirror.aliyuncs.com"], "insecure-registries":["harbor.zhang.org"], "log-level": "debug" }

2.1 因为docker-build-setp有bug,而且使用变量过程中报错很多。这里就使用了docker官方插件

2.1.1选择执行shell命令

image.png

2.1.2编译java

image.png

2.1.3继续增加构建步骤build/Publish Docker Image,镜像打包,这里使用的registry变量、harborrepo、imagename、imagetag,registry在系统设置中配置的,剩下三个变量都是参数

2.1.3.1 registry变量位置在系统管理的系统配置中添加环境变量,在Jenkins的hosts中设置好解析即可
sh
cat /etc/hosts 127.0.0.1 localhost #127.0.1.1 zhang # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 10.0.0.206 harbor.zhang.org 10.0.0.200 kubeapi.zhang.org

image.png

2.1.3.2 harborrepo变量

image.png

2.1.3.3 imagename变量,构建时填入或者使用Jenkins的系统变量JOB_NAME

image.png

2.1.3.4 imagetag变量

image.png

image.png

2.1.4 打包完毕后推送镜像到本地harbor仓库

image.png

2.1.5 设置k8s-API环境变量

image.png

2.1.6 增加布尔参数,跳过tls验证,默认为true

image.png

2.1.7 继续添加执行shell命令,首先替换deploy文件中的image为刚才镜像push的镜像名称,查看修改后的文件,打印k8s执行变量,前两个我们已经定义了,但是serverAccountToken需要在k8s中先获取,然后配置到构建环境中

2.1.7.1 配置serverAccountToken

image.png

2.1.7.2 需要执行的kubectl命令,这是使用的是kubectl options选项参数

image.png

2.1.7.3 全局中添加k8s-token凭据

image.png

2.1.7.4 凭据内容,secret内容等会我们在k8s中配置完然后复制到这里

image.png

2.1.7.5 到这里,Jenkins中的作业就配置完了,需要到k8s中配置。

3、k8s创建token

sh
#创建名称空间 kubectl create ns hello #创建serviceaccount kubectl create serviceaccount hello-admin -n hello #查看创建结果 root@k8s-master1:~# kubectl get sa -n hello NAME SECRETS AGE default 0 23h hello-admin 0 23h #创建rolebinding绑定到serviceaccount kubectl create rolebinding hello-admin --clusterrole=cluster-admin --serviceaccount hello:hello-admin -n hello #创建pod root@k8s-master1:/data/cicd-k8s# cat hello-pod.yml apiVersion: v1 kind: Pod metadata: name: test namespace: hello spec: containers: - image: ikubernetes/admin-box:v1.2 name: sleep command: ["/bin/sh","-c","sleep 99999"] serviceAccountName: hello-admin #查看token信息 root@k8s-master1:/data/cicd-k8s# kubectl exec -it test -n hello -- /bin/sh root@test # cat /var/run/secrets/kubernetes.io/serviceaccount/ ..2024_06_19_02_22_36.3434471662/ ca.crt token ..data/ namespace root@test # cat /var/run/secrets/kubernetes.io/serviceaccount/token eyJhbGciOiJSUzI1NiIsImtpZCI6IktYSTRlVWdkb1M2M1BESkVBX2dDZmo1ZDVqcFBDNkZ5RFo0c1EyRWtJS0kifQ.eyJhdWQiOlsiYXBpIiwiaXN0aW8tY2EiXSwiZXhwIjoxNzUwMjk5NzU2LCJpYXQiOjE3MTg3NjM3NTYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2YyIsImt1YmVybmV0ZXMuaW8iOnsibmFtZXNwYWNlIjoiaGVsbG8iLCJwb2QiOnsibmFtZSI6InRlc3QiLCJ1aWQiOiI1Yjg3NjU4ZS1mZWY4LTQ0NjYtYjVkNS1kY2Q4ZjYyMzI1NWYifSwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImhlbGxvLWFkbWluIiwidWlkIjoiY2QwZTY3YjYtNDE0ZS00ZmI1LTliZTMtYTBlMzg1NjIwYmQzIn0sIndhcm5hZnRlciI6MTcxODc2NzM2M30sIm5iZiI6MTcxODc2Mzc1Niwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmhlbGxvOmhlbGxvLWFkbWluIn0.DheWLrHN2GzQx-y_qdIkg7APd3lI8M6h2r1wl48sz3fe79lkaTPqwQoxAEbIV4aN8K9DzQhle7LtBl9I6dBfR0-UiTUe44QXyF68cm43F8b5imcIRKkLF9HR7FOgz9IOdgsaC-hJoWQ2XPCBUZN8PnO_z9lDqN1uhgZ5ATMCMyrrJypIu-4_kqcmXxG9yCFt0aQOGsWg5I-wo53j071G5P157svn9nJcccw7TEJXWvHZk_v3EhK65_sW6KZO6fn75mG1RbH9Nuvfwfcno48ZPePVp75Ua3gJ9Kp-c2vLarDwpEMW8IX2Kw2UoCIMaHEtKQ-yDzenJ7ztuDIRO6ZAeQ ### 将这段token信息复制到刚才Jenkins要创建的全局凭据secret中即可

4、因为Jenkins中没有对应kubectl命令需要下载kubectl-client包,查看k8s对应的版本并下载到Jenkins中,解压、软链接到/usr/bin下即可。

sh
#我这里环境是1.24.13, kubectl version WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --output=yaml|json to get the full version. Client Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.13", GitCommit:"49433308be5b958856b6949df02b716e0a7cf0a3", GitTreeState:"clean", BuildDate:"2023-04-12T12:15:50Z", GoVersion:"go1.19.8", Compiler:"gc", Platform:"linux/amd64"} Kustomize Version: v4.5.4 Server Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.13", GitCommit:"49433308be5b958856b6949df02b716e0a7cf0a3", GitTreeState:"clean", BuildDate:"2023-04-12T12:08:36Z", GoVersion:"go1.19.8", Compiler:"gc", Platform:"linux/amd64"}

5、在Jenkins服务器下测试是否可以通过token连接到k8s集群并获取数据

image.png

6、上面已经看到可以从Jenkins服务器中获取数据到k8s集群下的service了,现在开始运行Jenkins任务。只有选项参数才有下拉菜单。而imagename我们定义的是字符参数,所以需要输入镜像名称。

image.png

7、Jenkins运行结果,编译过程就不错展示了。太差也无用。

7.1 打包完成

image.png

7.2 镜像上传完成

image.png

7.3 运行deploy下的yaml文件完成

image.png

7.4 查看k8s集群中的pod是否成功运行,并测试页面

image.png

页面发布成功,这里只是做了一个最简单的示例,没有设置pod健康性监测、没有收集日志、没有设置ingress,如果设置完ingress还可以在浏览器上直接访问页面。达到一键部署应用和更新应用的效果。使用到的软件有、docker、Jenkins、k8s、maven等。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:笑一个吧~

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 本文为博主「笑一个吧~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 许可协议。转载请注明出处!