- 0x00 前言简述
- Jenkins 介绍
- Jenkins 特性
- Jenkins 应用场景
- Jenkins Job 类型
- 0x01 安装配置
Ubuntu
Docker & Kubernetes 安装
0x02 基础知识
Jenkins 环境变量
Jenkins 参数构建类型
Jenkins 并发构建
Jenkins 自动化构建
Jenkins 上下游构建
Jenkins 调用API
0x03 基础配置
视图管理
插件管理
权限管理
构建工具管理
---
0x00 前言简述
Jenkins 介绍
Q: 什么是Jenkins?
答: Jenkins 是一个开源持续集成的工具(
CI&CD
)由Java开发而成, 用于自动化各种任务,包括构建、测试和部署软件(自动化服务器
); Jenkins 支持各种运行方式,可通过系统包、Docker 或者 通过一个独立的Java程序;
官方介绍 : 全球领先的开源自动化服务器,Jenkins 提供了数以百计的插件来支持构建、部署和自动化任何项目
官方标语 : “Build great things at any scale”-“建造伟大的事情以任何规模”
Tips :个人理解 Jenkins 是一个调度平台,本身不需要处理任何事情,而是通过众多的插件来完成所有的工作;
Q: 为什么要用Jenkins?
答: Jenkins的前身是Hudson, 是基于Java开发的一种持续集成工具,用于监控秩序重复的工作, 它是可以将各个开源的软件进行集成的调度平台,例如(
Gitlab/SVN 、Maven、Sonarqube、Shell、钉钉通知、项目监控
)等;
Jenkins 发行线版本说明:
- TLS 长期支持版本: 每12周从常规版本流中选择,作为该时间段的稳定版本。每隔 4 周,我们会发布稳定版本,其中包括错误和安全修复反向移植。
- 每周更新版本: 每周都会发布一个新版本,为用户和插件开发人员提供错误修复和功能。
Jenkins 特性
- 开源的java语言开发持续集成工具,支持CI,CD;
- 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理;
- 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告;
- 分布式构建:支持Jenkins能够让多台计算机一起构建/测试;
- 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;
- 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker
Jenkins 应用场景
- 创建一个项目,手动构建,完成简单任务,比如拉取代码进行编译(持续集成)。
- 编译失败通知用户
- 参数化构建
- 代码改动自动触发构建或者定时触发构建
- 一个项目构建完成后自动调用另一个项目的构建,完成一连串任务
- 并发构建
- 集群化部署开发(CI/CD)
Jenkins Job 类型
- Freestyle project : 自由风格项目,主要的项目类型
- Maven project : maven项目专有,类似freestyle,更简单
- Multiconfigration project : 多配置项目,适合大量不同配置(环境、平台等)构建
- Pipeline : 流水线项目,适合使用pipeline 插件功能构建流水线任务,或者使用freestyle project不容易实现的负责任务
- Multibranch pipeline : 多分支流水线项目,根据SCM仓库中的分支创建多个pipeline项目
0x01 安装配置
安装方式
安装参考: https://www.jenkins.io/zh/doc/book/installing/
- Windows(Jar 、War)、Linux(yum|rpm 、apt|dpkg)、Mac
- Docker
PS : Jenkins通常作为一个独立的应用程序在其自己的流程中运行, 内置Java servlet 容器/应用程序服务器(Jetty)。
系统要求
最低推荐配置:
- 256MB 可用内存
- 1GB 可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB)
小团队推荐的硬件配置:
- 1 GB+ 可用内存
- 50 GB+ 可用磁盘空间
软件配置: Java 8—无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以
Tips : 安装最低配置:不少于256M内存,不低于1G磁盘,JDK版本>=8(openjdk也可以)。
PS : Jenkins 依赖于 Java 环境, 如果是在不使用Docker安装Jenkins时就需要安装配置Java环境;
Ubuntu
Jenkins的Debian Package Repository
,以自动化安装和升级。要使用此存储库,请先将键添加到系统:
Jenkins Debian Packages:https://pkg.jenkins.io/debian-stable/
官方安装:
国内安装:
安装后设置向导:
参考地址: https://www.jenkins.io/zh/doc/book/installing/#setup-wizard
- (1) 解锁 Jenkins
当您第一次访问新的Jenkins实例时,系统会要求您使用自动生成的密码对其进行解锁。
浏览到 http://localhost:8080(或安装时为Jenkins配置的任何端口),并等待解锁 Jenkins 页面出现。
- (2) 自定义jenkins插件
解锁 Jenkins之后,在 Customize Jenkins 页面内, 您可以安装任何数量的有用插件作为您初始步骤的一部分。
两个选项可以设置:
- 安装推荐的插件 - 安装推荐的一组插件,这些插件基于最常见的用例.
- 选择插件来安装 - 选择安装的插件集。当你第一次访问插件选择页面时,默认选择建议的插件。(
新手首次搭建建议选择此项
)
PS : 如果您不确定需要哪些插件,请选择安装建议的插件
。您可以通过Jenkins中的Manage Jenkins > Manage Plugins
页面在稍后的时间点安装(或删除)其他Jenkins插件 。
- (3) 不安装任何插件进入
插件列表
点击右上角的x
关闭窗口,显示如下页面则跳过了管理员用户密码重设;
PS : 一旦初始安装完成后,可通过插件管理器安装其他插件
- (4) 进入 Jenkins 控制台安装成功,然后第一个管理员用户;
点击 Dashboard -> admin -> Configure -> Password 进行管理员密码设置;
从这时起,Jenkins用户界面只能通过提供有效的用户名和密码凭证来访问。
Ubuntu 下 Jenkins 相关文件及其目录(目录结构)一览:
文件内容&目录结构详细说明
- 1.config.xml 核心配置文件: 包含了Jenkins的版本信息、权限认证规则、workspace目录定义、builds目录定义、视图信息等等。其他的 xml 文件是 Jekins 服务扩展功能的配置信息文件。
- 2.plugins 插件目录: 已经安装的Jenkins插件都可以在里面找到对应的文件。每一个插件基本是由一个目录和一个与目录同名的文件配对组成。
- 3.jobs 执行任务存储目录: 该目录是 Jenkins 管理的所有
构建任务的配置细节、构建后的产物和数据
。Jenkins 服务所有的 Job 都会在这个目录下,创建一个以 Job 名称命名的文件夹。
job 任务的文件夹中存储的文件有:
- 4.workspace 工作空间目录: 包含了这个构建作业的源代码, Jenkins存放项目的工作空间。进入这个workspace目录,里面就是你之前创建的项目的目录。在构建过程中Jenkins会根据项目中配置的远程代码仓库的地址去拉取源码到项目目录中并在这里完成打包。之前我们在打包的脚本中用到的
$WORKSPACE
表示的就是workspace下对应项目的目录。 - 5.tools 工具目录: Jenkins 服务设置安装 tools ,会安装在这个目录中。安装工具的方式是:【Manage Jenkins】 -> 【Global Tool Configuration】 页面。
- 6.updates 更新目录: 用来存放可用的插件更新。
- 7.users 用户信息目录: 存储用户的账号信息。
- 8.nodes 节点目录: Jenkins 在配置了主从或者工作节点之后会在这里有相应的信息。
- 9.userContent 用户生成的文件: 用于存储在 Jenkins 管理过程中生成的文件;比如使用
Convert To Pipeline 插件
可以将 JOB 转换成 Pipeline,生成的 Pipeline 的内容会以文件的形式存储在这个文件夹中。 - 10.fingerprints 文件指纹目录:
文件指纹(fingerprints)
是一个简单的MD5校验和。Jenkins维护了一个md5sum数据库,用于文件指纹校验。对于每个md5sum,Jenkins记录了哪些项目的哪些构建使用了他。在每次构建运行和文件被采集指纹时这个数据库会更新。为了避免过多的磁盘使用,Jenkins不存储实际的文件。相反它只存储md5sum和它的使用记录。 - 11.logs 日志目录: 用于存储 Jenkins 服务的日志,主要是事件日志和工作日志。
- 12.war 目录: 如果是以WAR包形式运行的Jenkins,该目录下存放的是解压后的WAR包。
- 13.Jenkins 服务另外的文件目录:
Tips: jenkins存放数据不依靠数据库所以在移植时只需要拷贝整个程序主目录即可,需要注意的是jobs和plugins目录比较重要
Docker & Kubernetes 安装
请参考后续的 <(2) 集群搭建Jenkins Master 节点>
章节的文章。
0x02 基础知识
Jenkins 环境变量
描述: 环境变量可以被看作是pipeline与Jenkins交互的媒介, 环境变量可以分为Jenkins内置变量
和自定义变量
以及自定义全局环境变量
。
比如,可以在 pipeline 中通过 BUILD_NUMBER 变量知道构建任务的当前构建次数。
1.内置变量
描述: 在pipeline执行时,Jenkins通过一个名为 env 的全局变量,将Jenkins内置环境变量暴露出来。
例如:在实际工作中经常用到的变量。
2.自定义环境变量
描述: 当 pipeline 变得复杂时,我们就会有定义自己的环境变量的需求。声明式 pipeline 提供了environment 指令,方便自定义变量。
另外 environment 指令可以在pipeline中定义,代表变量作用域为整个 pipeline;也可以在 stage 中定义,代表变量只在该阶段有效。
Tips : 如果在environment中定义的变量与env中的变量重名,那么被重名的变量的值会被覆盖掉。
3.自定义全局环境变量
描述: 如果我们需要定义一些全局的跨pipeline的自定义变量。
我们可以进入 Manage Jenkins→Configure System→Global properties
页,勾选“Environment variables”复选框
,单击“Add”按钮,在输入框中输入变量名和变量值即可,
Tips : 自定义全局环境变量会被加入 env 属性列表中,所以,使用自定义全局环境变量与使用Jenkins内置变量的方法无异。
Tips : Jenkins 内置变量参考 请看补充说明中的内置环境变量
Jenkins 参数构建类型
主要缺省参数类型如下几类:
- Boolean 参数
- Choice 参数 (常用)
- String 参数 (常用)
- File 参数
- 密码 参数
- 凭据 参数
- 其他 参数
- 运行时 参数
在参数化构建过程 -> 构建参数添加 -> 构建参数的变量 ->通过 $paramater 或者 ${paramater}
的形式使用
Tips :环境变量生效的顺序全局环境变量 < slave配置环境变量 < JOB参数 < JOB injected环境变量
官网地址: https://www.jenkins.io/
官方文档: https://www.jenkins.io/zh/doc/
Jenkins 并发构建
描述: 我们创建Job可以进行并发构建,每个并发构建使用单独的workspace,默认是<workspace path>@<num>
Tips : slave 也可以进行并发构建前提是需要Node and Label parameter plugin
插件,并且需要配置node类型参数;
Jenkins 自动化构建
常见的triggers几种:
- Build periodically : 设定类似cron周期性时间触发构建
- poll SCM : 设定类似 cron 周期性时间触发检查代码变化,只有代码变动时才触发构建
- Hooks : 用过SVN的都知道钩子
Github hooks / Gitlab hooks
- Events : Gerrit event
build periodically
描述: H 代表 jenkins 自己分配时间不去指定客观时间, 注意一般都是Jenkins根据监控资源利用率算法分配的。
Poll SCM
描述: 他会定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来然后执行构建动作;
比如: 你可以如果我想每隔30分钟检查一次源码变化有变化就执行;
Jenkins 上下游构建
触发下游构建:
- 其他项目构建后触发: "Build other projects" under "Post build actions" -> 输入项目名称
- 利用 Parameterized Trigger 插件 参数化构建 -> 在构建后操作步骤中 ->
Trigger Parameterized build on other peoject
-> Restrict matrix execuson to a subset
Jenkins 调用API
描述: Jenkins 服务提供了很多类型的API;因为工作需要这里只记录一下执行job的API使用CURL调用的方式。
Jenkins API 介绍
- 1.Jenkins API 从级别上分类
- 2.传输数据格式: POST 传输数据支持的格式有
XML,JSON,PYTHON
- 3.安全处理: 可以找到一些开发语言编写的API封装包,结合到自己的脚本中,提高开发效率。
CURL 调用 API 执行 Job 实例:
参数解析:
- JOB_URL: 就是Job 的访问URL地址。在Job 页面中点击
”Build with Parameters”
就可以获取到地址。一般以”build?delay=0sec“结尾; 示例: http://192.168.1.1/job/HelloWorld/build?delay=0sec
- user_name,user_password,user_token 用户验证信息
- JSON_DATA:Job 运行时,需要传递的参数,由Json 结构封装;示例:
[{\"name\":\"branchName\",\"value\":\"origin/dev\"},{\"name\":\"projectName\",\"value\":\"helloworld\"}]
0x03 基础配置
视图管理
描述: 当Job创建数量达到一定时我们需要在Jenkins中建立视图(分类),可以帮助我们快速找到某个所需Job;
实际上Job的视图类似于我们电脑上的文件夹可以通过一些过滤规则,将已经创建好的Job过滤到视图之中,也可以在视图中直接创建我们的Job;
我们可以采用View
或者directory
文件两种方式进行管理:
- views - 视图方式
- directory - 文件夹方式 (名称空间隔离)
两则异同说明: 文件夹创建一个可以嵌套存储的容器利用它可以进行分组,而视图仅仅是一个过滤器,其次文件夹则是一个独立的命名空间
,因此你可以有多个相同名称的的内容,只要它们在不同的文件夹里即可。
views - 视图方式
创建流程:
- Step 1.我的视图 -> 点击所有旁边 + 号 -> 设置视图名称 -> 选择三种类型
列表视图/包括全局视图/我的视图
列表视图 : 显示简单列表。你可以从中选择任务来显示在某个视图中
包括全局视图 : Shows the content of a global view.
我的视图 : 该视图自动显示当前用户有权限访问的任务 - Step 2.此处设置列表视图为例 -> 选择任务列表 -> 增加或者删除指定显示列
directory - 文件夹方式
创建流程:
- Step 1.创建Job -> 选择
文件夹
-> 输入任务名称directory-test
- Step 2.在
directory-test
文件夹下 -> 可以继续创建视图(+ )
-> 选择(列表视图/包括全局视图/我的视图
)
插件管理
(1) 插件安装加速
Q: 在安装插件时如何进行配置安装加速?
答: 选择国内清华大学的Jenkins插件更新源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
配置位置: Dashboard > Plugin Manager > Advanced > Update Site
(2)插件安装的几种方式
- Step 1.采用插件更新源搜索进行在线安装,例如下面对Jenkins进行汉化插件的安装, 搜索
Localization: Chinese (Simplified)
插件安装即可;
当安装插件安装完成时候可以选择重启 Jenkins 或 跳转到首页, 此处我重启 Jenkins 如下图所示汉化成功;
- Step 2.通过Web页面上传.hpi文件进行插件安装
清华大学 jenkins 插件下载: https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/
例如下面进行 git 插件下载 进行上传其 git.hpi
文件进行插件安装,之后上传即可;
- Step 3.导入之前服务器已安装的插件进行离线安装;
权限管理
描述: 由于jenkins
默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,我们使用Role-based Authorization Strategy
插件,安装请参考前面插件管理章节。
插件功能特点:
- 按角色分权限
- 按项目分权限
- Step 1.插件安装后我们先启用该插件管理Jenkins权限 -> 面板 -> 全局安全配置(
Global Security
)-> 授权策略 -> 找到并选中 Role-Based Strategy
-> 然后应用保存 。 - Step 2.管理Jenkins -> 安全 ->
Manage and Assign Roles
-> 可以进行角色权限管理与分配 -> 此处添加一个test角色并设置其权限 -> 应用 -> 保存;
· - Step 3.Assign Roles -> Global roles(按角色)、Item roles(按项目)、Node roles(按节点) -> 用户添加(同时您需要在Jenkins用户中新增一个该用户) -> 保存应用
- 添加用户和组。默认情况下用户/组名是区分大小写的,因此它需要与您在
Configure Global Security->Access Control->Security Realm
下的用户/组定义匹配。
构建工具管理
在 Jenkins 服务中运行 Pipeline 等任务过程中,需要依赖一些工具(环境需求);比如 JDK,MAVEN或者golang 或者 python 环境。
构建工具的安装方式有三种:
- 自行安装工具: 即自行在服务器上安装配置,然后在 Jenkins 服务中配置好这些工具的安装信息就可以使用了。配置路径:
Manage Jenkins→Global Tool Configuration
- Jenkins 自动安装工具: 利用 Jenkins 服务提供的【工具自动安装功能】,实现工具的快速配置。
- tools 指令安装工具:帮助我们自动下载并安装所指定的构建工具,并将其加入 PATH 变量中。这样,我们就可以在sh步骤里直接使用了, 但在agent none的情况下不会生效。
Tips : tools指令默认支持3种工具:JDK、Maven、Gradle。通过安装插件,tools 指令还可以支持更多的工具