Jenkins-流水线【基础介绍】
1、基础知识
1.1、什么是流水线
所谓的流水线,其实就是将我们之前的一个任务或者一个脚本就做完的事情,划分为多个子任务,然后分别执行,他们两者实现的最终效果是一样的,但是由于原始任务划分为多个子任务之后,以流水线的方式来执行,
那么我们可以随时看任意子任务的执行效果,即使在某个阶段出现问题,我们也可以随时直接定位问题的发生点,大大提高项目的效率。
Pipeline,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。
Pipeline作为Jenkins2.X的最核心的特性,提供了一组可扩展的工具,通过Pipeline Domain Specific Language(DSL)syntax可以达到Pipeline as Code的目的,帮助Jenkins实现从CI到CD与DevOps的转变。
1.2、简单的项目发布流水线样式
这个漂亮的展示界面是pipeline配套的BlueOcean插件的功能。
1.3、功能特性
特性 说明 代码实现 # 以代码的形式实现,不仅可以被纳入版本控制,还可以通过编辑代码实现目标效果。 可持续性 # 任务的执行,不受jenkins等其他环境的限制。 操作灵活 # 子任务可以随意终止和继续 多功能 # 支持复杂CD要求,包括fork/join子进程,循环和并行执行工作的能力 可扩展 # 支持DSL的自定义扩展以及与其他插件集成。
1.4、 pipeline 风格
1.5、任务编排
自由风格借助于"Build Trigger"中的"Block xxx is building"或者"Post-build Action"中的"Build other projects" 属性将多个独立的巨型任务关联在一起,逻辑复杂(并行|级联依赖)场景下不太适用。 pipeline风格以一个任务的方式来实现,将各种我们能想到的任意复杂场景进行合理的组合。它不仅仅可以以web页面的方式进行定制化配置,还可以直接以Jenkinsfile的方式来实现。不过,无论哪种方式,其核心都是大量的脚本代码的正常运行,而且在web界面定制的脚本格式与 jenkinsfile中的脚本格式一致。通常认为最佳实践是在Jenkinsfile Jenkins中直接从源代码控制中加载Pipeline。
2、基本配置
2.1、任务拆解
2.1.1、Stage【阶段】
一个Pipeline可以划分为若干个Stage,每个Stage代表阶段任务中的一组操作。
2.1.2、Node【节点】
一个Node就是一个Jenkins节点,或者是Master或node,是任务执行时候的目标主机环境。
2.1.3、Step【步骤】
Step是最基本的操作单元,表示完成阶段任务的一系列的命令组成,它遵循jenkinsfile语法。
注意:jenkinsfile 一般有两种表现样式:脚本式 和 声明式
2.2、表现样式
2.2.1、脚本式
node('工作结点') { stage 'Prepare' 任务1执行命令 stage 'Checkout' 任务2执行命令 stage 'Build' 任务3执行命令 stage 'Deploy' 任务4执行命令 stage 'Test' 任务5执行命令 } 特点解析 最外层有node{}包裹 可直接使用groovy语句 这是jenkins流水线初期通用的一种样式,而且符合我们平常的linux命令操作习惯
2.2.2、groovy语法
Groovy是一种基于Java平台的面向对象语言,使用方式基本与使用 Java代码的方式相同,使用样式如下: class Example { static void main(String[] args) { // x is defined as a variable String x = "Hello"; // The value of the variable is printed to the console println(x); } } 自从jenkins进入到2.x时代后,Groovy语法开始大幅度发展,进而演进出 声明式 的语法,而且官方也提 供了非常多的复杂命令,用于实现各种循环、条件、调试、并行、选择等场景。
2.2.3、声明式
pipeline { agent any stages{ stage ('Prepare'){ steps{ } } ... stage ('Test'){ steps{ } } } } 声明式特点 最外层必须由pipline{ //do something }来进行包裹 不需要分好作为分隔符,每个语句必须在一行内 不能直接使用groovy语句(例如循环判断等),需要被script {}包裹
2.3、常见指令
无论是脚本式语法还是声明式语法,他们本质上都是执行各种命令,对于不同的命令需要采用专用的语法来实现指定的功能
语法查看:http://192.168.10.21:8080/job/[项目名字]/pipeline-syntax/
2.3.1、echo
作用:输出内容 示例:echo 'Building..'
2.3.2、sh
作用:执行命令 示例:sh 'command_sample' sh([script: 'echo hello'])
2.3.3、git
作用:获取代码 示例:git credentialsId: 'b...a38', url: 'http://xx/root/xx.git', branch: 'master' git'https://xx/xx.git'
2.3.4、env
作用:设置变量 示例:env.PATH = "/usr/local/java/bin:$PATH"
2.4、插件管理
# 这里是使用推荐安装,已经安装好的了