devops [持续交付实践] pipeline:pipeline 使用之快速入门

蒋刚毅 · 2017年09月07日 · 最后由 fengyu 回复于 2018年08月01日 · 6299 次阅读
本帖已被设为精华帖!

什么是 pipeline

先介绍下什么是 Jenkins 2.0,Jenkins 2.0 的精髓是 Pipeline as Code,是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。什么是 Pipeline,简单来说,就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本,并且 Jenkins 支持从代码库直接读取脚本,从而实现了 Pipeline as Code 的理念。
Pipeline 的几个基本概念:
Stage: 阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作。注意,Stage 是一个逻辑分组的概念,可以跨多个 Node。
Node: 节点,一个 Node 就是一个 Jenkins 节点,或者是 Master,或者是 Agent,是执行 Step 的具体运行期环境。
Step: 步骤,Step 是最基本的操作单元,小到创建一个目录,大到构建一个 Docker 镜像,由各类 Jenkins Plugin 提供。
本节介绍 Jenkins Pipeline 的一些核心概念,并介绍在运行的 Jenkins 实例中定义和使用 Pipelines 的基础知识。

使用条件

要使用 Jenkins Pipeline,需要:
Jenkins 2.x 或更高版本
Pipeline 插件

Pipeline 定义

Pipeline 脚本是用 Groovy 写的 。Groovy 语法将在后续文档中介绍。
可以通过以下任一方式创建基本 Pipeline:
pipeline script:直接在 Web UI 的 script 输入框里面输入 pipeline script 语句即可,参考说明可以点击输入框下边的 Pipeline Syntax,里面有很多示例操作说明,非常好用。
pipeline script from SCM:需要配置 SCM 代码存储 Git 地址或 SVN 地址,指定 script 文件 Jenkinsfile 所在路径,每次构建 job 会自动去指定的目录执行 script 文件
以上两种方法定义 Pipeline 的语法都是一样的。

在 Web UI 中定义 Pipeline
要在 Jenkins Web UI 中创建基本 Pipeline Job,请按照下列步骤操作:
单击 Jenkins 主页上的 New Item。

输入 Pipeline 的名称,选择 Pipeline,然后单击确定。

在脚本文本区域中,输入 Pipeline,然后单击保存。



单击 “构建历史记录” 下的#buildId,然后单击控制台输出以查看 Pipeline 的完整输出

在 SCM 中定义 pipeline
复杂的 Pipeline 难以在 Pipeline 配置页面的文本区域内进行写入和维护。为了解决这一问题,jenkins Pipeline 支持在文本编辑器中编写脚本文件 jenkinsFile,Jenkins 可以通过从 SCM 选项的控件中加载 Pipeline 脚本。
选择 SCM 选项中的 Pipeline 脚本后,不要在 Jenkins UI 中输入任何 Groovy 代码; 只需指定要检索的 Pipeline 脚本的路径。更新指定的存储库时,只要 Pipeline 配置了 SCM 轮询触发器,就会触发一个新构建。
---文本编辑器,IDE,GitHub 等将使用 Groovy 代码进行语法高亮显示, 第一行 Jenkinsfile 应该是 #!/usr/bin/env groovy Jenkinsfile。
内置文档
Pipeline 配有内置的文档功能,可以更轻松地创建不同复杂性的 Pipeline。根据 Jenkins 实例中安装的插件自动生成和更新内置文档。
内置文档可以在全局范围内找到: localhost:8080/pipeline-syntax/,假设您有一个 Jenkins 实例在本地端口 8080 上运行。同样的文档也作为 pipeline 语法链接到任何配置的 Pipeline 的侧栏中项目。

代码段生成器
内置的 “Snippet Generator” 程序有助于为单个步骤生成代码段。
Snippet Generator 动态填充 Jenkins 实例可用的步骤列表。可用的步骤数量取决于安装的插件,它明确地暴露了在 Pipeline 中使用的步骤。
要使用代码段生成器生成步骤代码片段:
1、从配置的流水线或本地主机:8080 / pipeline-syntax 导航到 Pipeline 语法链接 Pipeline Syntax

2、在 “ Sample Step” 下拉菜单中选择所需的步骤,使用 “Sample Step” 下拉列表下方的动态填充区域配置所选步骤,如 message 为 “hello world”,单击生成 Pipeline 脚本以创建一个可以复制并粘贴到 Pipeline 中的 Pipeline 代码段

全局变量引用
除了代码片段生成器之外,Pipeline 还提供了一个内置的 “ 全局变量引用”。像 Snippet Generator 一样,它也是由插件动态填充的。与代码段生成器不同的是,全局变量引用仅包含 Pipeline 提供的变量,这些变量可用于 Pipeline。

在 Pipeline 中默认提供的变量是:
ENV
Pipeline 脚本可访问的环境变量,例如: env.PATH 或 env.BUILD_ID。请参阅内置的全局变量,以获取管道中可用的完整和最新的环境变量列表。
PARAMS
将为 Pipeline 定义的所有参数公开,例如:params.MY_PARAM_NAME。
currentBuild
可获取当前正在执行的 Pipeline job 的信息,例如属性 currentBuild.result,currentBuild.displayName 等等

引用官方文档:https://jenkins.io/doc/book/pipeline/getting-started/
Groovy 语法及入门:
Groovy 入门之语法和变量定义
Groovy 进阶之函数、闭包和类
精通 Groovy

主帖直达:https://testerhome.com/topics/9977

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 4 条回复 时间 点赞
思寒_seveniruby 将本帖设为了精华贴 09月08日 13:39

问一下楼主,我现在用的应该还是 jenkins1.0,也可以通过在一个 job 配置里添加” 构建后操作”,来触发下一个 job 的执行,同时可以创建 pipeline 视图来查看多个 job 的组织拓扑。请问使用效果上跟 2.0 的 pipeline as code 有什么区别?

Nisir 回复

最直接的区别就是前者是配置,后者是 code;多个 job 的配置松散无法统一化管理,实现臃肿而生硬。

我按照 pipeline-demo 做了一个,build fail, “No data available. This Pipeline has not yet run.”

  • Declarative (introduced in Pipeline 2.5)
  • Scripted Pipeline

两种 pipeline 分别对应创建 pipeline 的两种形式,语法还是有区别的

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册