一、什么是pipeline
什么是Pipeline?简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程(实用场景:将多个Jenkins构建任务轻松集成)。
简而言之,就是一套工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。
目前比较流行的pipeline实践方式如下。
- gitlabrunner: 是gitlab内置的一套pipeline框架,脚本是yml语言。
- jenkins: 通过安装插件的形式实现,脚本语言是jenkinsfile。
Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。
- Jenkinsfile:是 Jenkins Pipeline 的配置文件,包含了流水线执行的各种操作。
使用条件
要使用Jenkins Pipeline,需要: Jenkins 2.x或更高版本、Pipeline插件
使用语言
Pipeline脚本是用Groovy写的 。
二、pipeline在哪
首先确保Jenkins上已经有pipeline相关插件。如果想在Jenkins上新建一个pipeline Job,按照下列步骤操作:
1、单击Jenkins主页上的New Item。
2、输入Pipeline的名称,选择Pipeline,然后单击确定。
3、最后点击完成,一个pipeline项目就生成了
三、一个简单的pipeline脚本
pipeline项目中实际起作用的就是pipeline 脚本部分,这里写一个HelloWorld,编辑后点击保存,期望执行打印hello world操作。
由于这个脚本是无参数的,所以直接点击Build Now就可以了,来查看一下构建结果,
可以看到最后输出了期望的 Hello world!
这里对语法进行简单介绍
Example
stages
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
复制
agent
在任何可用的agent 上执行Pipeline或stage。例如:agent any
还有其他的agent后面可跟的参数,例如:none,label,node,docker
none
当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分。
label
使用提供的label标签,在Jenkins环境中可用的代理上执行Pipeline或stage。例如:agent { label 'my-defined-label' }
node
agent { node { label 'labelName' } },等同于 agent { label 'labelName' },但node允许其他选项(如customWorkspace)。
docker
定义此参数时,执行Pipeline或stage时会动态供应一个docker节点去接受Docker-based的Pipelines。docker还可以接受一个args,直接传递给docker run调用。例如:agent { docker 'maven:3-alpine' }
stages
包含一个或多个stage的序列,Pipeline的大部分工作在此执行。建议stages至少包含至少一个stage指令,用于连接各个交付过程,如构建,测试和部署等。
steps
steps包含一个或多个在stage块中执行的step序列。
总结:
1、Pipeline最基本的部分是“step”。基本上,step告诉Jenkins 要做什么,并且作为Declarative Pipeline和Scripted Pipeline语法的基本构建块。
2、Pipeline支持两种语法:Declarative Pipeline(在Pipeline 2.5中引入,结构化方式)和Scripted Pipeline,两者都支持建立连续输送的Pipeline。
3、所有有效的Declarative Pipeline必须包含在一个pipeline块内,例如:
pipeline { /* insert Declarative Pipeline here */ }
4、Declarative Pipeline中的基本语句和表达式遵循与Groovy语法相同的规则 ,但有以下例外:
a.Pipeline的顶层必须是块,具体来说是:pipeline { }
b.没有分号作为语句分隔符。每个声明必须在自己的一行
c.块只能包含Sections, Directives, Steps或赋值语句。
四、pipeline实际实用意义
前文说了Pipeline是将原本独立运行于单个或者多个节点的任务连接起来
https://www.cnblogs.com/mq0036/p/16146065.html