1、jenkins
Jenkins
目录
[toc]
本节实践
实战名称 |
---|
💘 实践:创建自由风格流水线-2023.3.21(测试成功) |
💘 实践:自定义agent通信端口-2023.3.21(测试成功) |
💘 实践:Jenkins配置node方法-2023.3.21(测试成功) |
💘 实践:如何在流水线构建的时候使用页面参数-2023.3.22(测试成功) |
💘 实践:pipeline里调shell的方式-2023.3.22(测试成功) |
💘 实践:流水线回放功能-2023.3.22(测试成功) |
💘 实践:pipeline里配置丢弃历史构建-2023.3.22(测试成功) |
💘 实践:pipeline中字符参数和选项参数-2023.3.22(测试成功) |
💘 实践:pipeline里配置远程构建-2023.3.22(测试成功) |
💘 实践:Jenkins项目分类-2023.3.23(测试成功) |
💘 实践:Jenkins 凭据管理-2023.3.25(测试成功) |
💘 实践:Jenkins BlueOcean安装-2023.3.25(测试成功) |
简介
jenkins 概述:是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
对于持续集成工具现在也有很多,目前应用最多的是Jenkins。
-
Jenkins前身是Hudson,使用java语言开发的自动化发布工具。
-
Jenkins是跨平台的可以在Win、Linux、MacOS部署。
-
Jenkins是应用最广的开源免费的持续集成服务器,企业中普遍使用Jenkins来作为项目集成发布工具。
-
Jenkins官方提供的插件使Jenkins更为强大。
目前发展超过17年,比较成熟的CI工具(也可以CD)能够实现自动化集成发布。目前普遍使用Jenkins完成持续集成CI/持续部署CD等相关技术实践。 可以把Jenkins想象成一个脚本执行器,我们可以通过编写代码的方式灵活的控制Jenkins作业的运行与控制。
⚠️ 注意:插件是jenkins的一大优势,也是其一大弊端。Jenkins的另外一个特点(也是存在缺陷的地方),功能比较齐全是因为有丰富的插件库。基本上有1-2千个可以使用的插件。这些插件对可以无限的去扩展Jenkins一些功能
1.推荐按需使用。尽量少装一些插件。为什么呢?当以后jenkins越来越大,任务越来越多时,如果插件很多,可能在重启jenkins后会因一些插件问题而导致jenkins无法启动。 (如果插件过多没有更新管理。当在Jenkins更新的时候可能会因为插件的原因导致) 2.能不用插件实现的尽量不要使用插件!可以写一些代码来实现,这样可以减少插件的依赖。另外一点,对你的技能提升也是有很大的帮助。
Jenkins是企业里面应用最广的、开源的持续集成系统。在企业里面不管是中小型企业还是大型企业,甚至有一些专门做DevOps的厂商也在基于Jenkins来做CI/CD平台。Jenkins是开源免费的,用java语言开发的CI/CD系统。可以用Jenkins来做CI也可以用来做CD。Jenkins本质上是用来做任务的编排和可视化的一套工具。
回想18年的时候我们还在大量使用**自由风格(freestyle)**类型的项目,并没有使用Pipeline特性。 而目前Jenkins大量应用Pipeline类型的项目来进行作业构建。Pipeline类型的项目是可以通过代码进行描述的。可以通过Pipeline+Groovy对Jenkins延伸扩展,例如可以直接导入Groovy的package对Jenkins Pipeline扩展。所以使用这种模式我们将不再关心有没有实现哪些功能插件了,而是直接编写特性代码来实现功能。
- jenkins官网:https://jenkins.io/
- jenkins发布周期(每周发布一次)
应用场景
-
持续集成实践
- 集成svn/git客户端实现源代码下载检出
- 集成maven/ant/gradle/npm等构建工具实现源码编译打包单元测试
- 集成sonarqube对源代码进行质量检查(坏味道、复杂度、新增bug等)
-
持续部署实践
-
集成SaltStack/Ansible实现自动化部署发布
⚠️ jenkins本身没有发布能力,它只是集成了这些工具的特性来实现发布,jenkins只是来调度的。
-
-
自动化测试实践
-
集成Jmeter(压力测试、接口测试)/Soar(小米开源的一个sql扫描)/Kubernetes/.....
sonarqube也能支持sql扫描,但是需要付费;
-
- 对于运维同学:自动化一些运维任务,例如定时备份,自动发布等;
- 对于开发同学:自动化持续集成,对代码进行编译验证等等;
- 对于测试同学:普遍的是在测试脚本开发后进行自动化测试;
其实在分享Jenkins的具体应用场景时,不能只从运维或者开发的角度去讲,而应该是从不同的角度。例如:谁在用Jenkins。
==对于运维同学==: 一直在使用Jenkins。使用Jenkins来对管理运维相关的任务。例如, 清理一下镜像仓库里面的垃圾镜像,那准备写了个脚本,跑一下就清理完了。可以将脚本集成到Jenkins, 编写Jenkins Pipeline在流水线里面去运行脚本。 还可以通过参数化构建进行参数传递。
手动在机器上面或者通过Jenkins运行的脚本内容都是一样的,但是jenkins可以按照不同的阶段运行并将日志和运行的进度可视化的展示出来。
==对于开发同学==:每天都要提代码。例如: 代码提到版本控制系统之后,能够自动的去跑一些对提交代码验证的任务。没有Jenkins之前通过编写脚本结合Crontab定时任务来定期轮询版本控制系统。 有了Jenkins之后可以开启构建触发器轻松实现系统之间的集成。
==对于测试同学==:一般都会写一些测试用例。 没有Jenkins之前在本机上面通过命令行直接去运行。有了Jenkins之后可以将代码存储到版本控制系统然后通过Jenkins自动化地运行测试用例。还可以通过一些现有的工具对测试结果进行分析。
Jenkins就是一个中间人的角色, 如果你有一个脚本需要由Jenkins来运行。其实Jenkins启动一个shell来执行脚本。大概率出现的问题都是脚本的自身原因导致的而并非是Jenkins的执行错误。
例如: Jenkins集成maven进行构建和打包,出现编译失败的错误就需要找开发同学查看代码了。这一块之前本人是踩到坑踩的比较多了,这点经验还是告诉大家。
那除了上面描述的场景外,其实还有很多场景。可以这样认为: 你想要自动化的一些东西,都可以通过Jenkins来帮你去完成。
功能特点
- 开源免费
- 安装配置简单
- 分布式主从架构
- 可视化管理页面
- Jenkins 2.0 核心=Pipeline As Code
- DSL 领域特定语言,基于Groovy进行无限扩展
主从分布式架构:
jenkins:
master:做调度的。//1个master可以对应若干个agent。
agent:运行实际任务的。
⚠️ master本身也具有作业构建的能力,但是一般我们用master节点作为调度。master节点 不做构建,它只是用来存储这些任务。真正构建的时候,我们在agent上构建。我们做测试的时候,可能会用master节点来做一些任务。但是实际生产环境中,我们绝对不能用master节点去构建任务。因为任务一旦多了,会影响jenkins性能,导致你直接宕机了。
Jenkins的特点:开源免费、安装简单。主从的分布式架构,分为Server和Agent。 Server主要是负责作业调度,Agent是Pipeline真正运行的节点。 (此处类似于Kubernetes的架构,尽量不要在主控节点运行任务)
可视化的管理页面:通过UI管理页面对Jenkins系统进行配置管理。 BlueOcean更加简洁和漂亮的UI页面。
Jenkins2.0核心特性:Pipeline As Code,以代码的方式描述流水线作业。特别适合大规模下的流水线复用,即多条流水线使用相同一套流水线模板。训练营中最重要的一部分就是Jenkins PIpeline As Code,是最核心的内容。 Pipeline + Groovy YYDS!
Groovy这门语言其实与Python编程语言语法上很类似。
数据目录管理
-
Jenkins采用本地文件的数据存储方式;
-
Jenkins的所有数据都存储在JENKINS_HOME变量定义的数据目录下;
-
默认JENKINS_HOME的值是**/var/lib/jenkins**;
-
注意:
jenkins_home
jenkins把所有的数据都存放在了文件系统里面。
rpm方式安装的jenkins: 其家目录在/var/lib/jenkins 目录下;#注意
docker方式安装的jenkins: 其家目录在/var/jenkins_home 目录下;
jenkins所有的配置文件都是以.xml格式存储的!
docker方式安装的jenkins:
[root@Devops6 ~]#docker exec -it jenkins bash
jenkins@d6139736ef4c:/$ cd /var/jenkins_home/
jenkins@d6139736ef4c:~$ ls
config.xml hudson.model.UpdateCenter.xml jenkins.install.InstallUtil.lastExecVersion jenkins.model.JenkinsLocationConfiguration.xml jobs nodeMonitors.xml plugins secret.key secrets userContent war
copy_reference_file.log identity.key.enc jenkins.install.UpgradeWizard.state jenkins.telemetry.Correlator.xml logs nodes queue.xml.bak secret.key.not-so-secret updates users
jenkins@d6139736ef4c:~$
jenkins容器对应宿主机数据目录位置:
[root@Devops6 ~]#cd /data/devops6/jenkins_home/
[root@Devops6 jenkins_home]#ls
config.xml hudson.model.UpdateCenter.xml jenkins.install.InstallUtil.lastExecVersion jenkins.model.JenkinsLocationConfiguration.xml jobs nodeMonitors.xml plugins secret.key secrets userContent war
copy_reference_file.log identity.key.enc jenkins.install.UpgradeWizard.state jenkins.telemetry.Correlator.xml logs nodes queue.xml.bak secret.key.not-so-secret updates users
Jenkins启动后会读取JENKINS_HOME变量,根据次变量的值来决定数据存储的位置。Jenkins是以XML格式的文件存储到数据目录。
注意:我们以后做集成的时候,会经常和这个
config.xml
文件打交道。但是需要注意的是,这里有个坑,在做集成前,一定要对这个文件做个备份。万一在做 用户权限时,不小心把自己权限给设置错了,此时就需要用到这个文件来救场了。
Jenkins目录的用途:
- caches: 系统缓存数据
- jobs: Jenkins项目作业
- nodes: Jenkins slave节点信息
- secrets: 秘钥信息
- userContent: 类似于web站点目录,可以上传一些文件 (这里可以放一个index.html文件,然后它会给你展示出来!类似于sftp功能,用的不是很多!)
- workspace: 默认的工作目录
- fingerprints: 指纹验证信息
- logs : 日志信息
- plugins: 插件相关配置
- updates: 插件更新目录
- users: jenkins系统用户目录
⚠️ 注意:
workspace :默认的工作目录
一般要把这个工作目录和jenkins的数据目录要分开存放,要不万一你这个目录io比较高的话,也会对jenkins有影响!
这个目录非常重要,就是我们以后运行的每一个流水线作业,它是在哪里工作,是在这个workspace目录下工作的!
默认情况下,这个workspace目录也是在jenkins_home
下,但是我们一般是去自定义这个目录的!
Jenkins项目类型-Pipeline
- 参数化构建: 为流水线传参
- String 字符参数
- Choice 选项参数
- 历史构建管理
- 丢弃历史构建: 保 留 5天内 10个构建
- 并行构建控制
范例:创建自由风格流水线
==💘 实践:创建自由风格流水线-2023.3.21(测试成功)==
接下来我们新创建1条流水线:
默认是自由风格
类型流水线;(如果要创建Pipeline
类型流水线,则需要安装pipeline插件才行。)
- 创建自由风格流水线
点击+New Item
:
填写item name
,点击ok
:
此时,一个自由风格的流水线项目就被创建成功了,接下来,我们只需要填写一些配置参数就好:
- 配置参数
全局配置:
丢弃旧的构建
:
参数化构建
:
并行构建控制
:
Build
:
完成后,点击Save
:
点击Build with Parameters
:
填写构建版本 和构建环境,点击Build
:
可以看到构建成功被完成了:
测试结束。😘
范例:创建pipeline流水线
==💘 实践:创建pipeline流 水线-2023.3.21(测试成功)==
- 在使用Pipeline类型的项目时,需要提前安装Jenkins的Pipeline插件。
点击管理Jenkins-管理插件
:
在Availabe
里查找pipeline
插件,完成安装:
- 安装好插件后新建一个Pipeline类型的作业:
🍊 自由风格和pipeline风格的区别
- 自由风格项目和Pipeline类型的项目区别是:
自由风格
项目构建部分的操作都是在页面上面完成的,而Pipeline
的构建任务描述都是通过代码的方式。
自由风格:
pipeline风格:
但自由风格入门可能简单一点,这些配置我们都可以在这里选择,基本上,这一条流水线就调好了。
范例:安装Stage View插件
注意:之前老版本在安装好Pipeline
插件后,会一起安装Stage View
插件的
但是当前新版本jenkins/jenkins:2.346.3-2-lts-jdk11
,安装好Pipeline
插件后,是不会一起安装Stage View
插件的,因此需要我们单独安装此插件才行。
- 未安装
Stage View
插件前
- 安装
Stage View
插件后
范例:pipeline中字符参数和选项参数
==💘 实践:pipeline中字符参数和选项参数-2023.3.22(测试成功)==
选项参数和字符参数是我们用的最多的!