kubernetes-jenkins CI/CD平台(十八)
软件环境:Jenkins + Kubernetes + Git + Maven + Harbor
发布流程设计
工作流程:手动/自动构建-> Jenkins 调度K8S API->动态生成Jenkins Slave pod ->Slave pod 拉取Git 代码/编译/打包镜像->推送到镜像仓库Harbor ->Slave 工作完成,Pod 自动销毁->部署到测试或生产Kubernetes平台。
环境准备:
准备K8S、Ingress和PV自动供给(NFS),
部署harbor:https://github.com/goharbor/harbor/releases
构建jenkins-slave镜像:https://github.com/jenkinsci/docker-jnlp-slave
将构建好的jenkins-slave镜像推送至harbor仓库
在kubernetes中部署jenkins:https://github.com/jenkinsci/kubernetes-plugin/tree/fc40c869edfd9e3904a9a56b0f80c5a25e988fa1/src/main/kubernetes
部署git,创建用户,jenkins保存git凭据
Kubernetes插件:Jenkins在Kubernetes集群中运行动态代理。插件介绍:https://github.com/jenkinsci/kubernetes-plugin
构建流水线
Pipeline插件
- Jenkins Pipeline是一套插件,支持在Jenkins中实现集成和持续交付管道;
- Pipeline通过特定语法对简单到复杂的传输管道进行建模;
- 声明式:遵循与Groovy相同语法。pipeline { }
- 脚本式:支持Groovy大部分功能,也是非常表达和灵活的工具。node { }
- Jenkins Pipeline的定义被写入一个文本文件,称为Jenkinsfile。
Jenkins安装Git和Pipeline插件 ExtendedChoiceParameter
Jenkins保存Harbor访问凭据
镜像命名
根据Jenkins构建编号作为镜像标签:
${registry}/${project}/${app_name}:${BUILD_NUMBER}
还可以根据Git Tag作为镜像标签,这需要与开发、测试、运维达成一个约定。
jenkins创建任务
持续部署
Kubernetes Continuous Deploy插件:用于将资源配置部署到Kubernetes。
插件介绍:https://plugins.jenkins.io/kubernetes-cd
Jenkins保存K8S凭据
[root@k8s-master ~]# cat .kube/config
K8S创建连接Harbor认证凭据
kubectl create secret docker-registry registry-pull-secret --docker-server=192.168.0.221 --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@admin.com