「持续集成」:Jenkins Pipeline 入门必知
「持续集成 Continuous Integration」
「持续交付 Continuous Delivery」
「持续部署 Continuous Development」
Jenkins,Jenkins Pipeline,Jenkinsfile三者之间的关系是什么?
- Jenkins是开放的工具平台
- Jenkins Pipeline是部署到Jenkins的工作流
- Jenkinsfile是Jenkins Pipeline的文件包
Jenkins
基于Java语言开发,开源的,界面的友好的CI&CD工具
- Jenkins可以用于监控持续重复的工作;旨在提供一个开放制作的软件应用平台,使软件的持续集成变得可能
- Jenkins可以应用于简单的次序集成服务;或者变为任何项目的持续交付中心
- Jenkins可以快速的运行在多个不同的操作系统上;还可以轻松的在多台机器上分配工作;帮助跨多个平台,推动构建,测试,和部署
Jenkins Pipeline
简单来说,就是Jenkins上的工作流框架,支持实现和集成持续交付流水线到Jenkins;将原本独立运行于单个或多个节点的任务连接起来;实现单个任务难以发布的复杂流程
Jenkins Pipeline的两种语法
- 申明式Declarative【从Pipeline 2.5开始引入,是目前主流运用的更简单,更结构化的语法,更符合阅读习惯】
- 脚本式流水线Scripted pipeline,灵活,可拓展;但更复杂(需学习Groovy语法)
Jenkins Pipeline的优势
- 代码方式:Pipeline通常以代码方式实现,通常会卷入源代码;使团队能够编辑,迭代,审查传送流程。
- 耐用:Pipeline可以在计划或者计划外,重新启用;Jenkins管理池同时存在
- 可暂停:Pipeline可以或停止,或等待人工输入,或批准;然后再继续运行
- 多功能:Pipeline支持复杂的交互要求;包括了并行,分叉,循环工作的能力
- 可拓展:Pipeline支持插件式的拓展方式
Jenkins Pipeline使用方式
- UI界面配置
- 代码描述Pipeline(Pipeline As Code是最佳实践,将Pipeline检入源代码控制仓库)
Pipeline As Code的优势
①更好的版本化:通过代码定义的形式能往Pipeline提交软件版本,进行版本控制
②更好的协作:每次修改,对于所有人都可见;并且可以对Pipeline进行代码审查
③更好的重用:UI手动操作配置,无法重用;但是代码的方式可以非常方便的进行复用。
Jenkinsfile
- 是包含Jenkins Pipeline定义的文本文件
- Jenkinsfile文件不能替代现有的构建工具;应视为将项目的多个生命周期绑定在一起的粘合层
语法基础
Pipeline声明式语法基础结构
- Pipeline字段:代表整条流水线(Tips:看见pipeline就知道是声明式语法,脚本式语法则是node)
- Agent:代表流水线的执行位置
- Stages:代表流水线的所有阶段(多个Stage的容器)
- Stage:代表流水线的某个阶段
- Steps:代表1个或多个步骤
- 设置环境变量【environment】:pipeline块的environment是整个流水线的变量;stage中的environment只适应stage的步骤
- 执行shell命令【sh】:可执行相对应的命令
Pipeline流水线构建语法结构:
通常流水线的构建阶段包括源代码的组装,编译或打包
构建时两个核心
- Build代表构建阶段
- sh步骤调用make命令
- archiveArtifacts完成构建结果的记录和存储
Pipeline流水线测试语法结构:
- Test代表测试阶段
- make check 执行测试
- junit是一个聚合测试报告的流水线step
Pipeline流水线部署语法结构:
- Deploy代表部署阶段,只有在之前的构建,测试阶段成功后,才会进行部署;否则流水线会提前退出
- when允许pipeline根据条件判断是否执行
- currentBuild.result变量确定是否有任何测试失败