pipeline 使用之语法详解

本文介绍了Jenkins Pipeline的两种语法——Declarative Pipeline和Scripted Pipeline,强调了Declarative Pipeline的简洁和结构化优势。内容涵盖了Pipeline的基本概念、优势,以及Declarative Pipeline的agent、section、directives、steps等关键元素,同时对比了Scripted Pipeline的灵活性。
摘要由CSDN通过智能技术生成
编辑推荐:
本文来自于YatHo,Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature,本文简单介绍了pipeline,希望对您的学习有帮助。

一、引言

Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature。

简单的来说,就是把Jenkins1.0版本中,Project中的相关配置信息,如SVN/Git的配置,Parameter的配置等都变成Code,即Pipeline as Code。

随着pipeline交付流水线在团队中的推广,使用pipeline脚本的job也迅速增加。

优势:

通过写代码的形式配置Project,且Jenkins中内置了常用的steps。

实现了构建步骤代码化、构建过程视图化。

二、语法简介

Pipeline最基本的部分是“step”。基本上,step告诉Jenkins 要做什么,并且作为Declarative Pipeline和Scripted Pipeline语法的基本构建块。

Pipeline支持两种语法:Declarative Pipeline(在Pipeline 2.5中引入,结构化方式)和Scripted Pipeline,两者都支持建立连续输送的Pipeline。

选择Declarative Pipeline还是Scripted Pipeline

最开始的Pipeline plugin,支持的只有一种脚本类型,就是Scripted Pipeline;

Declarative Pipeline为Pipeline plugin在2.5版本之后新增的一种脚本类型,与原先的Scripted Pipeline一样,都可以用来编写脚本。

相关资料:

从检索的资料来看,Declarative Pipeline 是后续Open Blue Ocean所支持的类型。相对而言,Declarative Pipeline比较简单,Declarative Pipeline中,也是可以内嵌Scripted Pipeline代码的。

为与BlueOcean脚本编辑器兼容,通常建议使用Declarative Pipeline的方式进行编写,从jenkins社区的动向来看,很明显这种语法结构也会是未来的趋势。

三、Declarative Pipeline

Declarative Pipeline是Jenkins Pipeline 的一个相对较新的补充, 它在Pipeline子系统之上提出了一种更为简化和有意义的语法。

所有有效的Declarative Pipeline必须包含在一个pipeline块内,例如:

pipeline { /* insert Declarative Pipeline here */ }

Declarative Pipeline中的基本语句和表达式遵循与Groovy语法相同的规则 ,但有以下例外:

a.Pipeline的顶层必须是块,具体来说是:pipeline { }

b.没有分号作为语句分隔符。每个声明必须在自己的一行

c.块只能包含Sections, Directives, Steps或赋值语句。

d.属性引用语句被视为无参方法调用。所以例如,输入被视为input()

1.Sections(章节)

Declarative Pipeline里的Sections通常包含一个或多个Directives或 Steps

agent

agent部分指定整个Pipeline或特定阶段将在Jenkins环境中执行的位置,具体取决于该agent 部分的放置位置。该部分必须在pipeline块内的顶层定义 ,但stage级使用是可选的。

为了支持Pipeline可能拥有的各种用例,该agent部分支持几种不同类型的参数。这些参数可以应用于pipeline块的顶层,也可以应用在每个stage指令内。

参数

any

在任何可用的agent 上执行Pipeline或stage。例如:agent any

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' }或

docker
agent {
docker {
image 'maven:3-alpine'
label 'my-defined-label'
args '-v /tmp:/tmp'
}
}

使用从Dockerfile源存储库中包含的容器来构建执行Pipeline或stage 。为了使用此选项,Jenkinsfile必须从Multibranch Pipeline或“Pipeline from SCM"加载。

默认是在Dockerfile源库的根目录:agent { dockerfile true }。如果Dockerfile需在另一个目录中建立,请使用以下dir选项:agent { dockerfile { dir 'someSubDir' } }。您可以通过docker build ...使用additionalBuildArgs选项,如agent {     dockerfile { additionalBuildArgs '--build-arg foo=bar' } }。

参数

any

在任何可用的agent 上执行Pipeline或stage。例如:agent any

none

当在pipeline块的顶层使用none时&

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值