1.什么是pipeline
Jenkins Pipeline 是一套 支持实现和集成持续交付管道的插件 进入 Jenkins。Pipeline 提供了一组可扩展的建模工具 从简单到复杂的交付管道,通过管道 DSL 实现“即代码”
2.先决条件
要使用 Jenkins Pipeline,您需要:
Jenkins 2.x 或更高版本(回到 1.642.3 的旧版本可能有效,但不能 推荐)
流水线插件,作为“建议的插件”的一部分安装(在运行时指定 通过安装 Jenkins 后的安装后设置向导)。
在管理插件中阅读有关如何安装和管理插件的更多信息。
3.定义管道
声明式管道和脚本化管道都是 DSL[1]描述软件交付的各个部分 管道。脚本化流水线是以有限形式的 Groovy 语法编写的。
Groovy 语法的相关组件将根据需要在整个过程中引入 本文档,因此,虽然了解 Groovy 会有所帮助,但事实并非如此 需要使用 Pipeline。
可以通过以下方式之一创建流水线:
通过蓝海 - 在蓝海建立管道项目后, Blue Ocean UI 可帮助您编写 Pipeline 并提交它 到源代码管理。Jenkinsfile
通过经典 UI - 您可以直接在 Jenkins 通过经典 UI。
在 SCM 中 - 您可以手动编写一个,您可以将其提交到项目的源代码管理存储库中。Jenkinsfile[3]
使用这两种方法定义 Pipeline 的语法是相同的,但 Jenkins 支持将 Pipeline 直接输入到经典 UI 中,它是 通常被认为是定义管道的最佳实践,然后 Jenkins 将直接从源代码管理加载该管道。Jenkinsfile
此视频提供了有关如何编写声明性管道和脚本化管道的基本说明。
4.穿过蓝海
如果你不熟悉 Jenkins Pipeline,Blue Ocean UI 可以帮助你设置 Pipeline 项目,以及 自动为您创建并写入 Pipeline(即 ) 通过图形流水线编辑器。Jenkinsfile作为在 Blue Ocean 中设置 Pipeline 项目的一部分,Jenkins 配置了一个 与项目源的安全且经过适当身份验证的连接 控制存储库。因此,您对 via 所做的任何更改 Blue Ocean 的 Pipeline 编辑器会自动保存并提交到源代码 控制。
5.通过经典UI
使用经典 UI 创建的 由 Jenkins 本身存储(在 Jenkins 主目录)。Jenkinsfile
要通过 Jenkins 经典 UI 创建基本管道,请执行以下操作:
1.如果需要,请确保您已登录到 Jenkins。
2.在 Jenkins 主页(即 Jenkins 经典 UI 的 Dashboard)中, 点击左上角的新建项目。
3.在 Enter an item name 字段中,指定新管道的名称 项目。
注意:Jenkins 使用此项目名称在磁盘上创建目录。是的 建议避免在项目名称中使用空格,因为这样做可能会发现 脚本中未正确处理目录路径中的空格的 bug。
4.向下滚动并单击 Pipeline,然后单击页面末尾的 OK 以 打开“管道配置”页面(其“常规”选项卡处于选中状态)。
5.单击页面顶部的“管道”选项卡,向下滚动到“管道”部分。
注意:相反,如果要在源代码管理中定义, 按照下面的在 SCM 中中的说明进行操作。Jenkinsfile
6.在“管道”部分中,确保“定义”字段指示“管道脚本”选项。
7.在“脚本”文本区域中输入管道代码。
例如,复制以下声明性示例管道代码(在 Jenkinsfile ( ... ) 标题下方)或其等效的脚本版本并粘贴 这进入脚本文本区域。(使用下面的声明性示例 贯穿此过程的其余部分。
pipeline {
agent any
stages {
stage('Stage 1') {
steps {
echo 'Hello world!'
}
}
}
}
agent指示 Jenkins 分配一个执行器(在任何可用的 Jenkins 环境中的 agent/node)和整个 Pipeline 的工作区。
echo在控制台输出中写入简单字符串。
node实际上与(上面)相同。
8.单击“保存”以打开“管道项目/项视图”页面。
9.在此页面上,单击左侧的“立即生成”以运行流水线。
10.在左侧的“生成历史记录”下,单击“#1”以访问此详细信息 特定管道运行。
11.单击“控制台输出”以查看管道运行的完整输出。这 以下输出显示管道已成功运行
6.管道语法
1.声明性管道
在声明式管道中有效的基本语句和表达式遵循与 Groovy 语法相同的规则,但以下情况除外:
管道的顶层必须是一个块,具体来说:.pipeline { }
没有分号作为语句分隔符。 每个语句都必须在自己的行上。
块只能由节、指令、步骤或赋值语句组成。
属性引用语句被视为无参数方法调用。 因此,例如,被视为 .inputinput()
可以使用声明性指令生成器来帮助你开始配置声明性管道中的指令和部分。
局限性:
目前存在一个未解决的问题,该问题限制了块中代码的最大大小。 此限制不适用于脚本化管道。pipeline{}
声明式:(1)Declarative pipeline – 在pipeline v2.5 之后引入,结构化方式,比较简单,容易上手。这种类似于我们在做自动化测试时所接触的关键字驱动模式,只要理解其定义好的关键词,按要求填充数据即可。入门容易,但是灵活性欠缺。
脚本式:(2)Scripted pipeline – 基于grjoovy的语法,相较于Declarative,扩展性比较高,好封装,但是有些难度,需要一定的编程工具
7.pipeline的语法学习
5个必备的组成部分
(1)pipeline:整条流水线
(2)agent:指定执行器
(3)stages:所有阶段
(4)stage:某一阶段,可有多个
(5)steps:阶段内的每一步,可执行命令
8.Declarative pipeline 语法详解
(1)必须包含在固定格式Pipeline{} 块内,每个声明语句必须独立一行,行尾无需使用分号。
(2)块 blocks{} 只能包含章节(Sections),指令(Directves),步骤(Steps) 或 赋值语句。
9.agent节点
(1)必须存在,agent必须在pipeline块内的顶层定义
(2)any :可以在任意agent 上执行pipeline
(3)none :pipeline 将不分配全局agent,每个stage分配自己的agent
(4)label :指定运行节点的label
(5)node:自定义运行节点配置,指定label ,指定customWorkspace(工作空间)
(6)docker:控制目标节点上的docker运行相关内容
10.stages 阶段集
(1)必须存在,包含顺序执行的一个或者多个stage命令
(2)在pipeline内仅能使用一次
(3)需要定义stage的名字
- stages{
- stage("stage name"){
- steps{
- echo "this is a step"
- }
- }
- }
11.post 构建后的操作
(1)非必须
(2)always:无论pipeline运行的完成的状态如何都会运行
(3)success:仅当当前pipeline具有 成功 状态时才运行
(4)failure: 仅当当前pipeline 具有 失败 状态时才运行
12.parameters参数
(1)非必须
(2)参数化构建的参数设置,参数类型有booleanParam、choice(选择)、file、text、string 等
parameters{ string( name :'name',defaultValue:'beauty',description:'姓名是')}
13.triggers触发器
(1)非必须
(2)定义了pipeline自动化触发的方式
(3)cron:接受一个cron风格的字符串来定义pipeline触发的常规间隔
(4)pollSCM:接受一个cron风格的字符串来定义jenkins检查SCM源更改的常规间隔;如果存在新的更改,则pipeline将被重新触发
每隔一分钟执行一次: