文章目录
- Jenkins介绍
- 背景
- 应用场景
- 主从集群
- Jenkins使用
- 访问Jenkins
- 获取管理员密码
- 进入jenkins主页
- 修改管理员密码
- 安装插件
- 插件安装
- 全局工具配置
- 企业实战
- pipeline(重点)
- 创建Pipeline
- Pipeline语法
- 语法示例
Jenkins介绍
背景
Jenkins,之前叫做Hudson,由SUN公司启动,2010年oracle收购SUN导致hudson商标归oracle保留,hudson的主要贡献者基于hudson 更名为jenkins并持续更新。很长一段时间内Jenkins和Hudson继续作为两个独立的项目,每个都认为对方是自己的分支。目前Hudson已经停止开发,最新的版本发布于2016年,而Jenkins的社区和开发却异常活跃。Jenkins是目前市场上使用最多的CI/CD工具。
- Jenkins是基于Java开发的一种持续集成工具。
- Jenkins作为持续集成工具,持续集成是其核心功能,在核心功能基础之上可扩展实现强大的CD功能。
应用场景
- 集成svn/git客户端实现源代码下载检出
- 集成maven/ant/gradle/npm等构建工具实现源码编译打包单元测试
- 集成sonarqube对源代码进行质量检查(坏味道、复杂度、新增bug等)
- 集成SaltStack/Ansible实现自动化部署发布
- 集成Jmeter/Soar/Kubernetes/……
- 可以自定义插件或者脚本通过jenkins传参运行
- 可以说Jenkins比较灵活,插件资源丰富,日常运维工作都可以自动化
主从集群
jenkins支持主从模式,这将会把构建任务分发到多个从节点去执行,这样就可以支撑起多个项目的大量构建任务,提升构建效率。同时,你可以提供多种环境(如:开发环境、生产环境)来对同一个项目进行测试和构建。
Jenkins使用
访问Jenkins
浏览器访问jenkins,端口8888: http://192.168.56.101:8888/
获取管理员密码
登录后需要输入解锁密码才能够继续访问jenkins,通过如下命令可以从jenkins安装目录中获取管理员密码
cat /root/.jenkins/secrets/initialAdminPassword
进入jenkins主页
点击开始使用就会来到jenkins的主页面
修改管理员密码
修改管理员密码为123456,具体操作为点击页面左上角jenkins->people->admin->configure->往下滑找到下图进行修改该
如果安装了中文插件,具体操作为:用户列表–>admin–>设置(左侧菜单)–>往下滑找到下图进行修改该
点击save保存即可,回跳到登录页进行重新登录
安装插件
jenkins运行需要安装很多插件,下面我们介绍下如何安装插件,下面我们以
Role-based Authorization Strategy
插件为例介绍下如何安装插件
插件安装
- 点击
manage Jenkins
->manager Plugins
进入插件管理页面 - 点击
available
进入可用的插件页面,搜索Role-based Authorization Strategy
,点击下载后在重启
进入下载插件界面,在该界面稍等就会出现下载完成信息
全局工具配置
非pipeline的Java项目如果要构建成功,全局工具的环境需要配置好
- 配置入口:Manage Jenkins->Global Tool Configuration
- 配置方式:指定服务器上已经安装好的服务位置(不需要勾选自动安装)
- 配置前提:服务器已经安装好jdk、maven、git
企业实战
pipeline(重点)
前面的测试master - slave搭建的时候,我们已经用pipline测试过从机的连接情况,本节详细来看pipline的知识
1)pipeline是什么
流水线是用户定义的一个CD流水线模型 。流水线的代码定义了整个的构建过程, 他通常包括构建, 测试和交付应用程序的阶段 。对Jenkins 流水线的定义被写在一个文本文件中 (称为Jenkinsfile),该文件可以被提交到项目的源代码的控制仓库。 这是"流水线即代码"的基础, 将CD 流水线作为应用程序的一部分,像其他代码一样进行版本化和审查。 创建Jenkinsfile并提交它到源代码控制中提供了一些即时的好处:
- 自动地为所有分支创建流水线构建过程并拉取请求。
- 在流水线上代码复查/迭代 (以及剩余的源代码)。
- 对流水线进行审计跟踪。
- 该流水线的真正的源代码, 可以被项目的多个成员查看和编辑。
注意一定要参看文档:
https://www.jenkins.io/doc/book/pipeline/
https://www.jenkins.io/zh/doc/book/pipeline/
2)语法支持
Jenkinsfile能使用两种语法进行编写 - Declarative Pipeline声明式和Scripted Pipeline脚本化,两者都支持建立连续输送的Pipeline。这两种语法对比如下:
共同点: 两者都是pipeline代码的持久实现,都能够使用pipeline内置的插件或者插件提供的steps,两者都可以利用共享库扩展。
区别: 两者不同之处在于语法和灵活性。Declarative pipeline对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,使其成为用户更理想的选择。
但是Scripted pipeline更加灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。
建议选择哪种语法?
通常建议使用Declarative Pipeline的方式进行编写,从jenkins社区的动向来看,很明显这种语法结构也会是未来的趋势。声明式流水线比 Jenkins 脚本化流水线的特性:
- 相比脚本化的流水线语法,它提供更丰富的语法特性
- 是为了使编写和读取流水线代码更容易而设计的
本课程有关pipeline的脚本也是基于Declarative Pipeline的方式进行编写
3)基本概念
- Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
- Node: 构建服务器节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行期环境。
- Step: 步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供
创建Pipeline
- 直接在jenkins web ui 网页界面输入脚本 (本课程大部分时候用这种方式)
- 编写Jenkinsfile文件并将文件存放到项目根目录,项目需推送到源代码管理库 (本课程最后会有使用说明)
Pipeline语法
声明式pipeline 基本语法和表达式遵循 groovy语法,但是有以下例外:
-
声明式pipeline 必须包含在固定格式的pipeline{} 块内,比如:
pipeline {
/* insert Declarative Pipeline here */
}
-
每个声明语句必须独立一行, 行尾无需使用分号
-
块只能由阶段(stages{})、指令、步骤 (steps{})或赋值语句组成
-
属性引用语句被视为无参数方法调用, 如input()
块(Blocks)
- 由大括号括起来的语句: 如 pipeline{}、parameters{}、script{}
章节(Sections)
- 通常包括一个或者多个指令或步骤 如 agent、post、stages、steps
指令(Directives)
- environment, options, parameters, triggers, stage, tools, when
步骤(steps)
- 执行脚本式pipeline, 如script{}
详细语法参见官方文档:
中文文档:https://www.jenkins.io/zh/doc/book/pipeline/syntax
英文文档:https://www.jenkins.io/doc/book/pipeline/syntax
语法示例
流水线语法示例:
// Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make'
echo "hello world"
script {
def browsers = ['chrome', 'firefox']
for (int i = 0; i < browsers.size(); ++i) {
echo "Testing the ${browsers[i]} browser"
}
}
}
}
stage('Test'){
steps {
sh 'make check'
junit 'reports/**/*.xml'
}
}
stage('Deploy') {
steps {
sh 'make publish'
}
}
}
}
- pipeline是声明式流水线的一种特定语法,他定义了包含执行整个流水线的所有内容和指令的 “block” 。
- agent 是声明式流水线的一种特定语法,指示 Jenkins 为整个流水线分配一个执行器(在 Jenkins 环境中的任何可用代理/节点上)和工作区。一般用作于指定在哪个节点上构建,如果不指定就写any表示任意节点。
- 定义 “Build” 、 “Test” 、 “Deploy” 三个阶段,每个阶段内部执行不同的步骤。
- stage 是一个描述 stage of this Pipeline的语法块。stage 块定义了在整个流水线的执行任务的概念性地不同的子集(比如 “Build”, “Test” 和 “Deploy” 阶段), 它被许多插件用于可视化 或Jenkins流水线目前的 状态/进展,stage 块是可选的。
- steps 是声明式流水线的一种特定语法,它描述了在这个 stage 中要运行的步骤。
- sh 是一个执行给定的shell命令的流水线。
- echo 写一个简单的字符串到控制台输出。
- junit 是另一个聚合测试报告的流水线。
- 注意stage括号的值表示阶段名称,值内容不是固定的,根据需要自定义即可。