千家信息网

【Kubernetes系列】第8篇 CI/CD之全流程实践

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,前言本实践中已经的示例代码及jenkins-agent镜像已经推送归档至github,-->传送门注意本实践中均为内网数据,你测试时一定要改为自己的环境的有效数据。由于本实践涉及组件较多,若有操作不明
千家信息网最后更新 2025年12月02日【Kubernetes系列】第8篇 CI/CD之全流程实践

前言

  1. 本实践中已经的示例代码及jenkins-agent镜像已经推送归档至github,-->传送门
  2. 注意本实践中均为内网数据,你测试时一定要改为自己的环境的有效数据。
  3. 由于本实践涉及组件较多,若有操作不明确的话,你可以后台留言,我们一起完善。
  4. 具体操作时若有不清楚,或是错误可以留言,大家一起解决。

1. 准备基础数据

  1. 配置gitlab
    1) 创建项目
    2)上传示例代码

    : 本次示例使用的gitlab项目地址为:http://gitlab.hanker.com/colynn/hanker-hello.git

  2. 配置harbor

1) 创建项目, 用于存储构建的镜像
: 本次示例使用的harbor地址为 10.0.0.185:5000/hanker/hanker-hello:v1

  1. jenkins 验证信息

1)添加 gitlab 帐号信息

操作指引:【Credentials】-> 【System】-> 【Global credentials】-> 【Add Credentials】

2)harbor 信息

操作指引:【Credentials】-> 【System】-> 【Global credentials】-> 【Add Credentials】

3) k8s namespace验证信息

在你的k8s master节点上执行如下操作:

1.创建serviceaccount

$ kubectl -n devops create serviceaccount jenkins-robot

命令输出:

serviceaccount/jenkins-robot created

2.角色绑定

$ kubectl -n devops create rolebinding jenkins-robot-binding --clusterrole=cluster-admin --serviceaccount=devops:jenkins-robot

命令输出:

rolebinding.rbac.authorization.k8s.io/jenkins-robot-binding created

3.获取 ServiceAccount

$ kubectl -n devops get serviceaccount jenkins-robot -o go-template --template='{{range .secrets}}{{.name}}{{"\n"}}{{end}}'

jenkins-robot-token-n8w6b

4.基于base64解码 ServiceToken

$ kubectl -n devops get secrets jenkins-robot-token-n8w6b -o go-template --template '{{index .data "token"}}' | base64 --decode

命令输出:

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXZvcHMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiamVua2lucy1yb2JvdC10b2tlbi1uOHc2YiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJqZW5raW5zLXJvYm90Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOTcyZTY0OGYtMTYxZC00NmM5LWI0ZjgtYjFkNTdlOWY4NTBjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRldm9wczpqZW5raW5zLXJvYm90In0.ArQvcaEqCaeU1ZcJ6nOC5rLaTZr_vLDrpLCt87asltMUWj2gSli_mXUTrl09hBnBDXI3A1D4rJXHKLHjIAA4nN8qRIRGbpqSNzDwmqJr-jmmmWWZFrZ3n3Al9-13KJnNOK8pcWr70rt3Rsigt4B6CIQ0-ZLK8BZhvROJSifeOfJ6xe2KBqdXBv1ccZZZfEhPLgGbaR5yWm5jLvOMr2MQiPDrZoHOEkcMt-C0xipytOp4sJCJ4bQhb-UoMu1owYydxbd6O7xO71fvqP_bMDpZXC601nA2ggK7h-vi6CJffHv5MM59q8X_DWe1NnZS6KXiMmkXqAmBn10Yu20PNj-kjg

5.添加 Secret text验证信息

操作指引:【首页】->【Credentials】-> 【System】-> 【Global credentials】-> 【Add Credentials】-> 选择【Secret text】类型

然后将上一步 解码的结果 更新至 Secret, Pipeline 中

2. 如何创建 jenkins pipeline

1. 创建jenkins pipeline item

操作指引:【首页】->【New Item】

2. pipeline script 步骤说明

: pipeline主要包含三个阶段(检出代码、制作镜像、部署服务),下面跟大家解释下,如何编写pipeline, 借助Pipeline Syntax生成的只是部分代码,你可以根据语言规范将其完善。

1.阶段1,检出代码

操作指引:【首页】->【hanker-hello-demo】-> 【Pipeline Syntax】

: 本实践中选取的 git: Git 类型,当然你也可以选择 checkout: Check out from version control

获取到该步骤的脚本

git credentialsId: 'gitlab-project-auth', url: 'http://gitlab.hanker.com/colynn/hanker-hello.git'

2.阶段2,构建镜像
操作指引:类似于 阶段1,

完善获取该步骤脚本

script {    withDockerRegistry(credentialsId: 'harbor-auth', url: 'http://10.0.0.185:5000') {        def customImage =  docker.build("10.0.0.185:5000/devops/hanker-hello:v1")        customImage.push()    }}

: 支持本阶段需要jenkins-agent镜像里包含docker命令。

3.阶段3. 部署服务

参考: jenkins kubernetes cli plugin

: 支持本阶段需要jenkins-agent镜像里包含kubectl命令。

3. 设置 pipeline

:

  • General/ Build Triggers/ Advanced Project Options 这三块你可以根据自己需要设置,将各阶段的脚本合并,更新至 Pipline -> Script内。

合并后的pipeline脚本内容如下:

pipeline {    agent any    stages {        stage('checkout') {            steps {                git credentialsId: 'gitlab-project-auth', url: 'http://gitlab.hanker.com/colynn/hanker-hello.git'                }        }        stage('docker-publish') {            steps{                script {                    withDockerRegistry(credentialsId: 'harbor-auth', url: 'http://10.0.0.185:5000') {                        def customImage =  docker.build("10.0.0.185:5000/devops/hanker-hello:v1")                        customImage.push()                    }                }            }        }        stage('application-deploy') {            steps {                withKubeConfig([credentialsId: '5a5517f3-3d38-459d-bafc-12b55beeb588', serverUrl: 'https://10.0.0.182:6443']) {                    sh '/usr/bin/kubectl apply -f k8s-setup.yml'                }            }        }    }}

3. 触发构建

4. 结果确认

1.确认 jenkina-agent 启动状态;

$ kubectl -n devops get pods |grep jnlpjnlp-sh8zl                                 1/1     Running   0          14s// 查看jenkins-agent pod日志$ kubectl -n devops logs -f [jenkins-agent-pod-name]

: 如果长时间没有启动jenkins-agent, 可以确认下集群内是否有足够的资源。

2.确认pipeline 执行状态;

3.确认harbor镜像仓库里是否已经有新推送的镜像


: harbor里的项目是需要你先创建好的,不然推送时会报错。

4.确认部署的服务状态

k8s master节点上执行如下操作:

$ kubectl -n devops get pod,deployment,svc,ingress |grep hanker-hello pod/hanker-hello-5b7586f86d-5j7kk              1/1     Running   0          173mdeployment.extensions/hanker-hello              1/1     1            1           3h8mservice/hanker-hello-svc          ClusterIP   10.233.22.19            8080/TCP             3h8mingress.extensions/hanker-hello-ingress              hanker-hello-demo.dev.hanker.net                   80      3h8m

附录

1.自定义jenkins-agent镜像

## 基于 https://github.com/Kubernetes-Best-Pratice/jenkins-jnlp-agent.git$ git checkout  https://github.com/Kubernetes-Best-Pratice/jenkins-jnlp-agent.git$ cd jenkins-jnlp-agent$ docker build .$ docker tag tag-name custom-private-repository-addr

: 你也可以基于基础镜像创建自定义的镜像

2.可以做的更完善

  1. 配置webhook, 自动触发jenkins job;
  2. 当前我们实践时构建的镜像版本使用的是固定的, 你是否可以将其替换为依赖pipeline环境变量或是传参的形式,将其变是更有意义;
  3. 上一篇文章中在设置【配置Kubernetes Pod Template】时,我们提到可以挂载主机或是网络共享存储,你是否可以通过这个将你的构建快起来;
  4. 我们的示例代码使用的go, 直接是镜像内打包,如何更好的就好的其他语言的构建,你可以参考Using Docker with Pipeline;
  5. 你想过如何下载构建过程中的产物吗,等等。

3. 参考链接 :

  1. https://github.com/jenkinsci/kubernetes-cli-plugin/blob/master/README.md
  2. 下载kubectl: https://docs.docker.com/ee/ucp/user-access/kubectl/
镜像 阶段 代码 实践 信息 命令 示例 脚本 项目 配置 数据 步骤 状态 首页 参考 推送 服务 输出 验证 地址 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 蓝蝴蝶校园网搜索不到服务器 经典笑话下载软件开发 西安交易性数据库 打开数据库保存位置 软件开发工作室盈利分析 石家庄格尚网络技术 大学生软件开发接私单 元气骑士显示登录的服务器不匹配 二年级国家网络安全教育主题班会 网络安全保障网络数据的什么能力 江西商业软件开发价格大全 数据库建表代码唯一非空 怎么收集数据库汇报材料 享云网络技术有限公司 众至邮件服务器 mysql是数据库中的 英国网络安全战略2017 数据库中信息的符号表示是什么 浏览器每次都是dns服务器吗 党政机关网络安全检查 同花顺服务器在哪儿 软件开发平台工具 谷歌代理服务器怎么关掉 网络技术基础教程姚华 数据库字段指的是什么 关于网络安全文明上网的看法 管家婆辉煌数据库对应的表 访问数据库的接口有哪些 在软件开发中成本-效益分析 数据库专用血样袋
0