Jenkins+K8S搭建CI—CD集群
我们使用Jenkins + K8S 搭建一个可以容量可以弹性伸缩的CI/CD集群。这个集群包括一个Jenkins Master,Jenkins Master 链接 K8S集群,根据CI/CD工作数量动态在K8S集群里面创建Jenkins Salve Pod,由Jenkins Salve 完成CI/CD工作。
我们的CI/CD集群包括1个Jenkins Master、部署在K8S集群上的可动态伸缩的 Jenkins Salve集群,为实现统一代码源、统一制品源和代码质量扫描,后续加上GitLab、Nexus OSS 3和SonarQube.我们设计的Jenkins CI/CD集群部署图如下:
Jenkins CI/CD 集群部署步骤如下:
使用Docker安装Jenkins Master
Docker 安装命令如下:
|
|
-p 8080:8080 Jenkins端口映射到主机的8080-P 50000:50000 Jenkins Slave 通过50000与Jenkins Master连接-v -v jenkins_data:/var/jenkins_home Jenkins Master的数据目录挂载到主机的Jenkins_data下面
启动Jenkins Master 后在控制日志中可以看到Jenkins Master的管理员Admin 初始密码。
输入控制台(terminal)上显示的初始密码。
点击【continue】安装默认插件
配置访问Jenkins URL
Jenkins Maste 初始安装完成,即可开始使用Jenkins!
安装连接kubernets集群和Kunbernets持续集成和部署的插件
进入 Manage Jenkins -> Manage Plugin 页面
进入 Mange Plugin -> Available页面查找安装 Kubernets 插件和kubernets continiu Deployment插件。
安装安装 Kubernets 插件和kubernets continiu Deployment插件,完成安装后重启Jenkins Master
配置 Kubernets 集群连接
重启Jenkins Master以后,重新登录Jenkins Maser,在Dashboard页面点击 【Config a Cloud】选项。
进入后点击【Kubernets Detail】,在 Credentials属性中上传访问kubernetes集群的config文件。
配置完Credentials后可以测试Jenkins Master是否可以成功连接Kubernetes集群。
配置Jenkins Master的访问页面和Jenkins Master 连接 Jenkins Salve的地址和端口
配置Jenkins Salve Pod模板,模板名称为kube.
Pod 模板中 jenkins pod 的Label 为 kubepod,Jenkins master 可以设置job只允许在Label为kubpod的Pod中,另外设置Container Template, Name 为 jnlp-slave ,Docker images 为 jenkins/jnlp-slave:latest
最后设置Container 的环境变量,Kye :JENKINS_URL value:http:192.168.46.170:8080
验证Jenkins Master 在K8S集群中动态生成 Jenkins Salve 节点部署应用
创建一个Freestyle Jenkins项目,选择Label满足 kubepod
运行job查看kubernets中Jenkins Salve 的动态创建和销毁
pipeline支持的指令
基本结构满足不了现实多变的需求。所以,Jenkins pipeline通过各种指令(directive)来丰富自己。指令可以被理解为对Jenkins pipeline基本结构的补充。
Jenkins pipeline支持的指令有:
• environment:用于设置环境变量,可定义在stage或pipeline部分。• tools:可定义在pipeline或stage部分。它会自动下载并安装我们指定的工具,并将其加入PATH变量中。• input:定义在stage部分,会暂停pipeline,提示你输入内容。• options:用于配置Jenkins pipeline本身的选项,比如options {retry(3)}指当pipeline失败时再重试2次。options指令可定义在stage或pipeline部分。• parallel:并行执行多个step。在pipeline插件1.2版本后,parallel开始支持对多个阶段进行并行执行。• parameters:与input不同,parameters是执行pipeline前传入的一些参数。• triggers:用于定义执行pipeline的触发器。• when:当满足when定义的条件时,阶段才执行。
在使用指令时,需要注意的是每个指令都有自己的作用域。如果指令使用的位置不正确,Jenkins将会报错。
配置pipeline本身(option指令)(用到的时候可以来参考这块)
options指令用于配置整个Jenkins pipeline本身的选项。根据具体的选项不同,可以将其放在pipeline块或stage块中。以下例子若没有特别说明,options被放在pipeline块中。
• buildDiscarder:保存最近历史构建记录的数量。当pipeline执行完成后,会在硬盘上保存制品和构建执行日志,如果长时间不清理会占用大量空间,设置此选项后会自动清理。
参考这个文档:https://weread.qq.com/web/reader/12f320007184556612f32b6k1ff325f02181ff1de7742fc
这节比较有用,可以参考下
在声明式pipeline中使用脚本
Jenkins pipeline专门提供了一个script步骤,你能在script步骤中像写代码一样写pipeline逻辑。
pipeline{agentanystages{stage(Hello){steps{script{defs = "Hello World"printlns}echoHello World
Jenkins学习笔记
本学习笔记参考《Jenkins2.x实践指南》。
下一篇
Jenkins的安装和部署(jenkins教程)
一、jenkins的下载、安装以及环境的搭建部署。