首页 > 技术文章 > Jenkins高级篇 pipeline系列之-—01简介

liuyitan 2020-04-19 10:00 原文

系列目录

jenkins高级篇 pipeline系列之-—01 简介

jenkins高级篇 pipeline系列之-—02 Shared Libraries

jenkins高级篇 pipeline系列之-—03 项目样例

jenkins高级篇 pipeline系列之-—04 语法

jenkins高级篇 pipeline系列之-—05 Pipeline Basic Steps

jenkins高级篇 pipeline系列之-—06-Pipeline Utility Steps

 

jenkins高级篇 pipeline系列之-—07 实现钉钉机器人插件效果

jenkins高级篇 pipeline系列之-—08 模板库最佳实践

jenkins高级篇 pipeline系列之-—09 实现自动打增量包

jenkins高级篇 pipeline系列之-—10 插件开发记录

一、简介 

Pipeline是Jenkins2.X的最核心的特性,帮助Jenkins实现从CI到CD与DevOps的转变

Jenkins从根本上讲是一种支持多种自动化模式的自动化引擎。Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施。

Pipeline五大特性

代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑、审查和迭代其CD流程。
可持续性:Jenklins重启或者中断后都不会影响Pipeline Job。
停顿:Pipeline可以选择停止并等待人工输入或批准,然后再继续Pipeline运行。
多功能:Pipeline支持现实世界的复杂CD要求,包括fork/join子进程,循环和并行执行工作的能力
可扩展:Pipeline插件支持其DSL的自定义扩展以及与其他插件集成的多个选项。

 图一、CD Pipeline的流程图

二、相关基本概念

pipeline 支持两种语法
 - Declarative 声明式

对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,同时支持BlueOcean图形化脚本操作,是用户更理想的选择。

 

 - Scripted pipeline 脚本式

更灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的Pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。

 

  • agent: 表示Jenkins应该为Pipeline的这一部分分配一个执行者和工作区。
  • Stage:阶段,一个Pipeline可以划分成若干个Stage,每个Stage代表一组操作,例如:“Build”,“Test”,“Deploy”。注意,Stage是一个逻辑分组的概念,可以跨多个Node
  • Node:节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行环境。
  • Step:步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenklins Plugin提供,例如:sh ‘make’

三、变量使用

3.1 变量类型

变量分为:环境变量(内置环境变量、自定义环境变量),自定义变量

系统内置环境变量,见 http://$ {YOUR_JENKINS_URL}/pipeline-syntax/globals#env,在脚本中可以直接引用。

自定义变量需要先定义,在顶层pipeline块中定义的变量将应用于管道中的所有步骤,在stage中设置的只应用于stage内。

 

3.2 变量使用

#1. Declarative Pipeline 中使用 environment 定义环境变量
environment {
        JAVA_HOME='/data/jdk'        
}
#调用:
echo " java path $JAVA_HOME"

#
2. Declarative Pipeline 中支持参数化构建(全局) parameters { string(name: 'GIT_BRANCH', defaultValue: 'master', description: 'default build branch') } 调用: echo "${params.name}"
#
3. Scripted Pipeline中使用 withEnv 定义环境变量 withEnv(['JAVA_HOME=/data/jdk']) { #调用:   sh '$JAVA_HOME/bin/start.sh' }
#4
. Scripted Pipeline 中自定义变量 def username = 'jenkins' #调用跟shell的一样,使用双引号引用变量,单引号为字符串。 echo "hello Mr.${username}"

 Jenkins2.0中提供了流水线语法查询的功能,可以自动生成流水线代码片断(包括Scripted Pipeline,Declarative Pipeline ),直接拷贝粘贴就可以。

 

 

 

参考资料

官方文档

官方文档2

简书-参考

推荐阅读