【Kubernetes系列】第8篇 CI/CD之全流程实践
前言
- 本实践中已经的示例代码及jenkins-agent镜像已经推送归档至github,-->传送门
- 注意本实践中均为内网数据,你测试时一定要改为自己的环境的有效数据。
- 由于本实践涉及组件较多,若有操作不明确的话,你可以后台留言,我们一起完善。
- 具体操作时若有不清楚,或是错误可以留言,大家一起解决。
1. 准备基础数据
- 配置gitlab
- 创建项目
- 上传示例代码
_注_: 本次示例使用的gitlab项目地址为:http://gitlab.hanker.com/colynn/hanker-hello.git
- 配置harbor
- 创建项目, 用于存储构建的镜像
_注_: 本次示例使用的harbor地址为10.0.0.185:5000/hanker/hanker-hello:v1
- jenkins 验证信息
- 添加 gitlab 帐号信息
_操作指引_:【Credentials】-> 【System】-> 【Global credentials】-> 【Add Credentials】
- harbor 信息
_操作指引_:【Credentials】-> 【System】-> 【Global credentials】-> 【Add Credentials】
- 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 jnlp jnlp-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 173m deployment.extensions/hanker-hello 1/1 1 1 3h8m service/hanker-hello-svc ClusterIP 10.233.22.19 <none> 8080/TCP 3h8m ingress.extensions/hanker-hello-ingress hanker-hello-demo.dev.hanker.net 80 3h8m
附录
自定义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
_注_: 你也可以基于基础镜像创建自定义的镜像
可以做的更完善
- 配置webhook, 自动触发jenkins job;
- 当前我们实践时构建的镜像版本使用的是固定的, 你是否可以将其替换为依赖pipeline环境变量或是传参的形式,将其变是更有意义;
- 上一篇文章中在设置【配置Kubernetes Pod Template】时,我们提到可以挂载主机或是网络共享存储,你是否可以通过这个将你的构建快起来;
- 我们的示例代码使用的go, 直接是镜像内打包,如何更好的就好的其他语言的构建,你可以参考Using Docker with Pipeline;
- 你想过如何下载构建过程中的产物吗,等等。
参考链接 :

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?
作者 | 蚂蚁金服技术专家 沧漠 关注『阿里巴巴云原生』公众号,回复关键词“1024”,可获取本文 PPT。 前言 Kubernetes 以其超前的设计理念和优秀的技术架构,在容器编排领域拔得头筹。越来越多的公司开始在生产环境部署实践 Kubernetes,在阿里巴巴和蚂蚁金服 Kubernetes 已被大规模用于生产环境。Kubernetes 的出现使得广大开发同学也能运维复杂的分布式系统,它大幅降低了容器化应用部署的门槛,但运维和管理一个生产级的高可用 Kubernetes 集群仍十分困难。本文将分享蚂蚁金服是如何有效可靠地管理大规模 Kubernetes 集群的,并会详细介绍集群管理系统核心组件的设计。 系统概览 Kubernetes 集群管理系统需要具备便捷的集群生命周期管理能力,完成集群的创建、升级和工作节点的管理。在大规模场景下
- 下一篇
Kubernetes 日志查询分析实践
本文将介绍如何基于日志服务实现对 Kubernetes(以下简称 K8s)日志的采集以及查询分析,此外,还附带了对 Ingress、Audit 方案的简要介绍。为了方便大家通过操作来加深理解,本文提供了详细的操作步骤以及对应截图和配置代码。 准备工作 为了完成后续的相关操作,我们需要准备一个 K8s 集群,操作步骤如下: 登陆容器服务控制台。 创建一个标准托管集群(杭州区域),在向导中勾选上【使用 EIP 暴露 API Server】 和【使用日志服务】。 集群创建完毕后,回到集群列表页面,点击【更多->通过 CloudShell 管理集群】。 在 CloudShell 中输入 kubectl get ds -n kube-system,结果中显示的 logtail-ds 即为了实现数据采集所安装的日志服务组件。 打开日志服务控制台,可以看到和 K8s 集群 ID 所对应的 project 也已经创建完毕。 操作截图如下: 图:创建托管集群(步骤 2) 图:打开 CloudShell(步骤 3) 图:在 CloudShell 中查看日志服务组件(步骤 4) 图:打开日志服务控制台...
相关文章
文章评论
共有0条评论来说两句吧...