管道的语法

本节以中介绍的信息为基础开始使用管道应仅作为参考。有关如何在实际示例中使用Pipeline语法的更多信息,请参阅使用jenkin必威国际有限公司sfile.从管道插件的2.5版开始,管道支持两种离散语法,详细内容如下。关于每种语法的优缺点,请参阅语法比较

正如在本章开始,管道最基本的部分是“步骤”。基本上,步骤告诉詹金斯必威国际有限公司什么作为声明式和脚本式管道语法的基本构建块。

有关可用步骤的概述,请参阅管道步骤参考它包含了一个完整的步骤列表,包括内置到Pipeline中的步骤以及插件提供的步骤。

声明式管道

声明性管道是Jenkins管道的一个相对较新的补充必威国际有限公司

所有有效的声明性管道必须包含在管道块,例如:

管道{/*在此处插入声明性管道*/
  • 管道的顶级必须是一个堵塞,特别是:管道{}

  • 没有分号作为语句分隔符。每个语句必须在自己的行上。

  • 块必须仅由部分指令台阶,或赋值语句。

  • 属性引用语句被视为无参数方法调用,输入被视为输入()

你可以使用声明式指令发生器以帮助您开始配置声明式管道中的指令和部分。

限制

目前有一个公开发行它限制了管道{}块。这个限制不适用于脚本化的管道。

部分

声明性管道中的节通常包含一个或多个指令台阶

代理人

代理人节指定整个管道或特定阶段在Jenkins环境中的执行位置,具体取决于必威国际有限公司代理人部分被放置。类的顶层必须定义section管道块,但阶段级的使用是可选的。

要求

是的

参数

允许

在顶层管道块和每个阶段块。

顶级和阶段级代理之间的差异

当将代理添加到顶层或阶段级别时,会有一些细微差别选项指令。

顶级代理

代理人在管道的最外层声明,将调用选项进入代理。作为一个例子,当使用超时它只适用于执行在内部代理人。

node("myAgent") {timeout(单位:'SECONDS',时间:5){stage("One"){sleep 10 echo 'hello'}}}
级代理

代理人在阶段中声明,将调用选项之前进入代理人之前检查任何条件。在这种情况下,当使用超时,它被应用之前代理人已分配。

超时(单位:秒),时间:5{stage(“One”){node{sleep 10 echo'Hello'}

此超时将包括代理设置时间。由于超时包括代理设置时间,因此在代理分配延迟的情况下,管道可能会失败。

参数

为了支持管道作者可能拥有的各种各样的用例代理人节支持几种不同类型的参数。这些参数可以应用于管道块,或在每个阶段指令。

任何

在任何可用的代理上执行管道或舞台。例如:任何代理人

没有一个

当应用于顶级时管道阻塞时,将不会为整个管道运行分配全局代理阶段节将需要包含自己的代理人部分。例如:代理人没有

标签

在Jenkins环境中可用的具有提供标签的代理上执行管道或阶段。例如:必威国际有限公司代理{label'my defined label'}

还可以使用标签条件。例如:代理{label 'my-label1 && my-label2'}代理{label 'my-label1 || my-label2'}

节点

代理{node{label'labelName'}}行为与代理{label'labelName'}但是节点允许其他选项(例如自定义工作区).

码头工人

使用给定的容器执行Pipeline或阶段,该容器将在节点预先配置以接受基于docker的管道,或者在匹配可选定义的节点上标签参数。码头工人也可选择接受args.可能包含直接传递参数的参数码头工人运行调用,以及alwaysPull选项,该选项将强制码头工人拉即使图像名称已存在。例如:Agent {docker 'maven:3.8.1-adoptopenjdk-11'}

代理{docker{imagemaven: 3.8.1-adoptopenjdk-11标签my-defined-labelargs.-v/tmp:/tmp}}

码头工人也可以选择接受registryUrlregistryCredentialsId有助于指定要使用的Docker注册表及其凭据的参数。参数registryCredentialsId可单独用于docker hub内的私有存储库。例如:

代理{docker{imagemyregistry.com/node标签my-defined-labelregistryUrlhttps://myregistry.com/registryCredentialsIdmyPredefinedCredentialsIn必威国际有限公司Jenkins}}
dockerfile

执行管道,或阶段,使用从Dockerfile包含在源存储库中。为了使用这个选项,必威国际有限公司詹金斯档案必须从以下任一位置加载Multibranch管道或者来自SCM的管道.按照惯例,这是Dockerfile在源存储库的根目录中:代理{dockerfile true}.如果建立一个Dockerfile在另一个目录中,使用迪尔选择:代理{dockerfile {dir 'someSubDir'}}.如果你的Dockerfile如果具有其他名称,则可以使用文件名选项。您可以传递其他参数码头工人建造…命令附加构建参数选项,如代理{dockerfile{additionalBuildArgs'--buildarg foo=bar'}. 例如,包含该文件的存储库构建/ Dockerfile.build,期待一个构建参数版本

代理{//相当于“docker build -f dockerfile.build --build-arg版本= 1.0.2 ./build/dockerfile{文件名dockerfile.build.迪尔构建标签my-defined-label附加构建参数——build-arg版本1.0.2 =args.-v/tmp:/tmp}}

dockerfile也可以选择接受registryUrlregistryCredentialsId有助于指定要使用的Docker注册表及其凭据的参数。例如:

代理{dockerfile{文件名dockerfile.build.迪尔构建标签my-defined-labelregistryUrlhttps://myregistry.com/registryCredentialsIdmyPredefinedCredentialsIn必威国际有限公司Jenkins}}
kubernetes

在Kubernetes集群上部署的pod中执行Pipeline或阶段。为了使用这个选项,必威国际有限公司詹金斯档案必须从以下任一位置加载Multibranch管道或者来自SCM的管道.Pod模板是在kubernetes{}块中定义的。例如,如果您想要一个包含Kaniko容器的Pod,可以按如下方式定义它:

代理{kubernetes{label podlabel yaml"""kind: Pod metadata: name: 必威国际有限公司jenkins-agent spec: containers: - name: kaniko image: gcr。io/kaniko-project/executor:debug imagePullPolicy: Always命令:—/busybox/cat tty: true volumeMounts:—name: ws-secret mountPath: /root/。aws/ - name: docker-registry-config mountPath: /kaniko/。码头工人restartPolicy: Never volumes: - name: aws-secret secret: secretName: aws-secret - name: docker-registry-config configMap: name: docker-registry-config"""

你需要创造一个秘密aws-secret使Kaniko能够通过ECR进行身份验证。此机密应包含~ / .aws /凭证这个other volume is a ConfigMap which should contain the endpoint of your ECR registry. For example:

credHelpers:{.dkr.ecr.eu-central-1.amazonaws.comecr登录}}
共同选择

这些选项可以应用于两个或更多代理人实现。除非明确说明,否则不需要。

标签

一个字符串。在其上运行管道或个人的标号或标号条件阶段

此选项适用于节点码头工人,dockerfile,是必需的节点

自定义工作区

字符串。运行管道或单个阶段代理人应用于此自定义工作区内的,而不是默认值。它可以是相对路径,在这种情况下,自定义工作区将位于节点上的工作区根目录下,也可以是绝对路径。例如:

代理{节点{标签my-defined-label自定义工作区/ /其他/路径}}

此选项适用于节点码头工人,dockerfile

雷塞诺德

布尔值,默认为false。如果为true,则在管道顶层指定的节点上,在同一工作区中,而不是在整个新节点上运行容器。

此选项适用于码头工人dockerfile,只有在使用时才有效果代理人对一个人阶段

args.

一个字符串。要传递给的运行时参数码头工人运行

此选项适用于码头工人dockerfile

例1。Docker代理,声明式管道
管道{代理{dockermaven: 3.8.1-adoptopenjdk-11(1)阶段{阶段(示例构建){步骤{shmvn -B干净验证} } } }
1 在新创建的具有给定名称和标记的容器中执行此管道中定义的所有步骤(3.8.1-adoptopenjdk-11).
例2。阶段代理部分
管道{代理无(1)阶段{阶段(示例构建){代理{码头工人maven: 3.8.1-adoptopenjdk-11(2)步骤{echo你好,Maven上海mvn——版本}}阶段(示例测试){代理{码头工人openjdk:8-jre(3)步骤{echo你好,JDK上海java - version} } } }
1 决定性的代理人没有在管道的顶级确保一个执行人将不会被不必要地分配。使用代理人没有也迫使每一个阶段节来包含它自己的代理人部分。
2 使用此图像在新创建的容器中执行此阶段中的步骤。
3. 使用与上一阶段不同的映像,在新创建的容器中执行此阶段中的步骤。

帖子

帖子部分定义一个或多个额外的部分步骤在完成管道或阶段的运行时运行(取决于所在的位置帖子部分在管道内)。帖子可以支持以下任何一项后置条件块:总是改变固定回归流产失败成功不稳定的不成功的,清理这个se condition blocks allow the execution of steps inside each condition depending on the completion status of the Pipeline or stage. The condition blocks are executed in the order shown below.

要求

没有

参数

没有一个

允许

在顶层管道块和每个阶段块。

条件
总是

中的步骤运行帖子段,而不管管道或阶段的运行完成状态如何。

改变

只运行步骤帖子如果当前的管道或阶段的运行中的运行具有不同的完井状态。

固定

只运行步骤帖子如果当前管道或阶段的运行成功,而上一次运行失败或不稳定。

回归

只运行步骤帖子如果当前管道或阶段的运行状态为失败、不稳定或中止,而前一次运行是成功的。

流产

只运行步骤帖子如果当前管道或阶段的运行具有“中止”状态,通常是由于管道被手动中止。这在web UI中通常用灰色表示。

失败

只运行步骤帖子如果当前的流水线或阶段的运行具有“失败”状态,通常通过Web UI中的红色表示。

成功

只运行步骤帖子如果当前管道或阶段的运行有“成功”状态,通常在web UI中用蓝色或绿色表示。

不稳定的

只运行步骤帖子如果当前Pipeline或阶段的运行处于“不稳定”状态,通常是由测试失败、代码违规等引起的。这在web UI中通常用黄色表示。

不成功的

只运行步骤帖子如果当前管道或阶段的运行没有“成功”状态。这通常在web UI中表示,取决于前面提到的状态。

清理

运行这个步骤帖子时不时帖子无论管道或阶段的状态如何,都已评估条件。

例3。后节,声明式管道
管道{代理任意阶段{阶段(实例){步骤{echo你好世界}}} post {(1)总是{(2)回声我会永远说你好再次!}}}
1 按照惯例帖子管段应放置在管道末端。
2 后置条件块包含步骤步骤部分。

舞台

包含一个或多个序列的阶段指令舞台部分是由管道描述的大部分“工作”的位置。至少,我们建议舞台包含至少一个阶段指令为连续交付过程的每个离散部分,例如构建,测试和部署。

要求

是的

参数

没有一个

允许

只有一次,里面管道块。

例4。阶段,声明式管道
管道{代理任何阶段{(1)阶段(实例){步骤{echo你好世界} } } }
1 舞台部分通常会遵循诸如此类的指令代理人选项, 等等。

步骤

步骤节定义一个或多个序列步骤在给定条件下执行阶段指令。

要求

是的

参数

没有一个

允许

每个内部阶段块。

例5。单步,声明式管道
管道{代理任何阶段{stage('Example'){步骤{(1)echo 'Hello World'}}}}
1 步骤节必须包含一个或多个步骤。

指令

环境

环境指令指定一个键值对序列,这些键值对将被定义为所有步骤或特定于阶段的步骤的环境变量,具体取决于环境指令位于管道中。

这个指令支持一个特殊的帮助器方法全权证书()它可用于通过Jenkins环境中的标识符访问预定义的凭据。必威国际有限公司

要求

没有

参数

没有一个

允许

在 - 的里面管道块,或在阶段指令。

支持凭证类型
秘密的文本

指定的环境变量将被设置为Secret Text内容

秘密文件

指定的环境变量将被设置为临时创建的File文件的位置

用户名和密码

指定的环境变量将设置为用户名:密码另外两个环境变量将被自动定义:MYVARNAME_USRMYVARNAME_PSW分别。

使用私钥进行SSH

指定的环境变量将被设置为临时创建的SSH密钥文件的位置,并且可能会自动定义两个额外的环境变量:MYVARNAME_USRMYVARNAME_PSW(拿着密码)。

不支持的凭据类型导致管道与消息失败:org.必威国际有限公司jenkinsci.plugins.credentialsbinding.impl.crediendedNotFoundException:无法找到合适的绑定处理程序

示例6.密文凭据,声明性管道
管道{代理任何环境{(1)CC =叮当声}阶段{阶段(实例环境{(2)\u访问\u密钥=凭据(my-predefined-secret-text(3)}步骤{shprintenv.} } } }
1 一个环境在顶层中使用的指令管道块将应用于管道内的所有步骤。
2 一个环境定义在阶段只将给定的环境变量应用到阶段
3. 环境块有一个辅助方法全权证书()定义,可用于通过Jenkins环境中的标识符访问预定义的凭据。必威国际有限公司
例7。用户名和密码凭据
管道{代理任意阶段{阶段(示例用户名/密码){环境{SERVICE_CREDS =凭据(我的预定义用户名和密码)}步骤{shecho "Service user is $SERVICE_CREDS_USR"上海echo“服务密码是$ service_creds_psw”上海curl -u $ service_creds https://myservice.example.com}}阶段(使用实例SSH用户名){environment{SSH\u CREDS=凭据(我的信用)}步骤{shecho“SSH私钥位于$SSH\u CREDS”上海echo“SSH用户是$SSH\u CREDS\u USR”上海echo“ssh passphrase是$ ssh_creds_psw”} } } }

选项

选项指令允许在管道本身内部配置特定于管道的选项。管道提供了许多这样的选项,例如构建丢弃器,但它们也可以由插件提供,例如时间戳

要求

没有

参数

没有一个

允许

只有一次,里面管道块。

可用选项
构建丢弃器

为最近管道运行的特定数量持久化工件和控制台输出。例如:options {buildDiscarder(logRotator(numToKeepStr: '1'))}

签出子目录

在工作区的子目录中执行自动源代码控制签出。例如:选项{checkoutToSubdirectory('foo')}

禁用ConcurrentBuilds

禁止并发执行管道。可用于防止对共享资源的同时访问等。例如:选项{disableConcurrentBuilds()}

disableResume

如果控制器重启,则不允许管道恢复。例如:选项{disableresume()}

新货柜台

使用码头工人dockerfile顶级代理商。指定后,每个阶段将在同一节点上的新容器实例中运行,而不是在同一容器实例中运行所有阶段。

overrideIndexTriggers

允许覆盖分支索引触发器的默认处理。如果分支索引触发器在多分支或组织标签上被禁用,options {overrideIndexTriggers(true)}将仅为此作业启用它们。否则,选项{overrideIndexTriggers(false)}将仅为此作业禁用分支索引触发器。

preserveStashes

保存已完成构建的文件,以便与阶段重新启动一起使用。例如:options {preserveStashes()}保存最近完成的构建的隐藏,或者选项{preserveStaches(buildCount:5)}保存五个最近完成的构建的隐藏。

quietPeriod

设置安静时期,以秒为单位,用于管道,覆盖全局默认值。例如:选项{quietPeriod(30)}

重试

如果失败,请按照指定的次数重试整个管道。例如:选项{重试(3)}

skipDefaultCheckout

默认情况下,在中跳过从源代码管理检出代码代理人指令。例如:options {skipDefaultCheckout()}

skipStagesAfterUnstable

构建状态已不稳定后跳过阶段。例如:options {skipstagesafterinstability ()}

超时

为管道运行设置一个超时时间,之后Jenkins应该中止管道。必威国际有限公司例如:options {timeout(time: 1, unit: 'HOURS')}

示例8。全局超时,声明性管道
管道{代理任何选项{超时(时间1单位小时(1)}阶段{阶段(实例){步骤{echo你好世界} } } }
1 指定一个小时的全局执行超时,之后Jenkins将中止管道运行。必威国际有限公司
时间戳

在管道运行生成的所有控制台输出前加上发出该行的时间。例如:选项{时间戳()}

parallelsAlwaysFailFast

将流水线中所有后续并行阶段的failfast设置为true。例如:options {parallelsAlwaysFailFast()}

一份可供选择的全面清单正在等待完成下文- 1503

阶段选择

选项指令为阶段类似于选项管道的根目录下的指令。然而,阶段层次的选项只能包含步骤像重试超时,或时间戳,或与阶段,就像skipDefaultCheckout

阶段,步骤在选项指令在进入代理人或检查任何条件。

可用的阶段选项
skipDefaultCheckout

默认情况下,在中跳过从源代码管理检出代码代理人指令。例如:options {skipDefaultCheckout()}

超时

为这个阶段设置一个超时时间,之后Jenkins应该中止这个阶段。必威国际有限公司例如:options {timeout(time: 1, unit: 'HOURS')}

示例9。阶段超时,声明性管道
管道{代理任意阶段{阶段(实例){选项{timeout(时间1单位小时(1)}步骤{echo你好世界} } } }
1 指定一个小时的执行超时实例舞台,之后詹金斯将中止管道运行。必威国际有限公司
重试

失败时,请按指定次数重试此阶段。例如:选项{重试(3)}

时间戳

在此阶段中生成的所有控制台输出,其中包含线路的时间。例如:选项{时间戳()}

参数

参数指令提供了一个参数列表,用户在触发Pipeline时应该提供这些参数。属性的管道步骤可以使用这些用户指定参数的值params对象,看到参数,声明式管道对于它的具体用途。

要求

没有

参数

没有一个

允许

只有一次,里面管道块。

可用参数
字符串

字符串类型的参数,例如:参数{string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '')}

文本

一个文本参数,可以包含多行,例如:参数{text(名称:'DEPLOY\u text',默认值:'One\nTwo\ntree\n',说明:'')}

booleanParam

一个布尔参数,例如:参数{booleanParam(名称:'DEBUG_BUILD',defaultValue:true,说明:''}

选择

一个选择参数,例如:参数{choice(name: 'CHOICES', CHOICES: ['one', 'two', 'three'], description: ")}

密码

例如,密码参数:参数{password(name:password',defaultvalue:'secret',描述:'秘密密码')}

示例10。参数,声明式管道
管道{代理任何参数{字符串(的名字defaultValue詹金斯必威国际有限公司先生描述我该向谁问好?)正文(的名字传记defaultValue描述输入有关此人的一些信息)布尔参数(的名字切换defaultValue真正的描述切换这个值)选择(的名字选择选择: [一个两个],描述挑点东西)密码(的名字密码defaultValue秘密描述输入一个密码)}阶段{阶段(实例){步骤{echo你好${参数个数。人回声传记:${参数个数。传记回声切换:${Params.Toggle.回声选择:${参数选择回声密码:${Params.Password.} } } }

一份全面的可用参数清单有待完成下文- 1503

触发器

触发器指令定义了重新触发管道的自动方式。对于与源(如GitHub或BitBucket)集成的管道,触发器可能没有必要作为基于Webhooks的集成可能已经存在。目前可用的触发器是cronpollSCM上游

要求

没有

参数

没有一个

允许

只有一次,里面管道块。

cron

接受cron样式的字符串以定义重新触发管道的常规间隔,例如:触发器{cron('H */4 * * 1-5')}

pollSCM

接受cron样式的字符串来定义一个规则的间隔,Jenkins应该在这个间隔上检查新的源更改。必威国际有限公司如果存在新的更改,则将重新触发Pipeline。例如:{pollSCM('H */4 * * 1-5')}

上游

接受逗号分隔的作业字符串和一个阈值。当字符串中的任何作业以最小阈值结束时,将重新触发Pipeline。例如:{upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS)}

pollSCM触发器仅在Jenkins 2.22或更高版本中可用。必威国际有限公司

例11。触发器、声明式管道
/ /声明/ /管道{agent any触发器{cron(4 * * 1-5)}阶段{阶段(实例){步骤{echo你好世界} } } }

必威国际有限公司詹金斯cron语法

Jenk必威国际有限公司ins cron语法遵循的语法cron实用程序(略有不同)。具体来说,每行由5个字段组成,用制表符或空格分隔:

一分钟 小时 dom

小时内分钟(0-59)

白天的时刻(0-23)

月日(1-31)

月份(1-12)

一周中的一天(0-7),其中0和7是星期天。

要为一个字段指定多个值,可以使用以下操作符。按照先后顺序,

  • 指定所有有效值

  • M-N指定值的范围

  • M-N/XX * /一步一步地X通过指定的范围或整个有效范围

  • A、 B,…,Z列举了多个值

为了允许定期调度的任务在系统上产生均匀的负载,符号H(对于“哈希”)应尽可能使用。例如,使用0 * * *因为每天有十几份工作会在午夜引起一个大的高峰我有仍然每天执行一项工作,但不是同时执行所有工作,更好地利用有限的资源。

H符号可以与范围一起使用。例如,H H(0-7) * * *指上午12点至7点59分之间的某个时间。你也可以使用步距H,带或不带范围。

H符号可以被认为是一个范围内的随机值,但它实际上是作业名称的散列,而不是随机函数,因此该值对于任何给定项目都保持稳定。

注意,对于月中的日字段,短周期,例如* / 3H / 3由于月长可变,在大多数月末无法持续工作。例如,* / 3将在漫长的一个月的1、4、31天运行,然后在下一个月的第二天再次运行。哈希值总是选择在1-28范围内,所以H / 3将在月底的3到6天运行之间产生间隔。(较长的周期也会有不一致的长度,但影响可能相对不太明显。)

以空的线条和行开头将作为注释被忽略。

此外@每年@每年@ monthly@weekly@每日@midnight,@hourly作为方便的别名支持。它们使用散列系统来实现自动平衡。例如,@hourly是相同的H****也可能是在一小时内的任何时候。@midnight实际上是指凌晨12点到2点59分之间的某个时间。

表1。必威国际有限公司Jenkins cron语法示例

每十五分钟(可能在:07,:22,:37,:52)

触发器{cron('H/15 * * * *')}

每小时前半小时每十分钟一次(三次,可能是在:04、:14、:24)

触发器{cron('H(0-29)/10****')}

从周一至周五上午9时45分至下午3时45分,每两小时一次。

触发器{cron('45 9-16/2 * * 1-5')}

工作日上午9点至下午5点之间每两小时一次(可能是上午10:38,12:38,2:38,4:38)

触发器{cron('H H(9-16)/2 * * 1-5')}

除12月外,每个月的1号和15号每天一次

触发器{cron('h1,151-11*)}

阶段

阶段指令在舞台节,并应包含步骤第节,可选代理人实际上,管道所完成的所有实际工作都将封装在一个或多个文件中阶段指令。

要求

至少一个

参数

一个必选参数,舞台名称的字符串。

允许

在 - 的里面舞台部分。

示例12。阶段,声明式管道
/ /声明/ /管道{代理任意阶段{阶段(实例){步骤{echo你好世界} } } }

工具

一节定义了自动安装和放置的工具路径.如果代理人没有是指定的。

要求

没有

参数

没有一个

允许

在 - 的里面管道块或阶段块。

支持工具
专家
jdk
gradle
示例13.工具、声明性管道
管道{代理任何工具{mavenapache-maven-3.0.1(1)}阶段{阶段(实例){步骤{shmvn——版本} } } }
1 工具名称必须在Jenkins中的必威国际有限公司管理詹金斯必威国际有限公司全球工具配置

输入

输入一个指令阶段允许您使用输入这个阶段将在任何选项已被申请,在进入代理人块的阶段或评估的条件阶段.如果输入批准,阶段将继续下去。方法中提供的任何参数输入提交将可在环境中的其余阶段

配置选项
信息

必需的。这将在用户提交时呈现给他们输入

身份证件

此的可选标识符输入.默认为默认为阶段姓名。

好吧

屏幕上“确定”按钮的可选文本输入的形式。

提交者

允许提交此文件的用户或外部组名的可选逗号分隔列表输入.默认允许任何用户。

submitterParameter

要使用设置的环境变量的可选名称提交者名字,如果存在。

参数

提示提交者提供的可选参数列表。看到参数了解更多信息。

示例14.输入步骤,声明性管道
管道{代理任意阶段{阶段(实例){输入{消息我们应该继续吗?好吧是的,我们应该。提交者爱丽丝,鲍勃参数{字符串(的名字defaultValue詹金斯必威国际有限公司先生描述我该向谁问好?步骤{echo你好${很高兴认识你。} } } }

指令允许管道根据给定的条件决定阶段是否应该执行。的指令必须包含至少一个条件。如果指令包含多个条件,所有子条件必须返回true才能执行阶段。这与子条件嵌套在所有条件(见例子下)。如果任何人条件,请注意,只要找到第一个“true”条件,条件就会跳过其余的测试。

更复杂的条件结构可以使用嵌套条件来构建:所有,或任何人嵌套条件可以嵌套到任意深度。

要求

没有

参数

没有一个

允许

阶段指示

内置的条件
分支

在生成的分支与给定的分支模式(ANT样式的路径glob)匹配时执行阶段,例如:当{branch 'master'}。请注意,这仅适用于多分支管道。

可选参数比较器可以添加在属性后,以指定如何对匹配的任何模式进行计算:=对于简单的字符串比较,地球仪(默认值)用于ANT样式的路径glob(与示例相同)变更集),或正则表达式用于正则表达式匹配。例如:当{分支模式:“release-\\d+”,比较器:“REGEXP”}

buildingTag

当构建正在构建标记时执行该阶段。例子:什么时候{buildiontag()}

变更日志

如果构建的SCM变更日志包含给定的正则表达式模式,则执行该阶段,例如:当{更新日志'。*^\\[DEPENDENCY\\] .+$' }

变更集

如果构建的SCM变更集包含一个或多个与给定模式匹配的文件,则执行该阶段。例子:当{changeset "**/*.js"}

可选参数比较器可以添加在属性后,以指定如何对匹配的任何模式进行计算:=对于简单的字符串比较,地球仪(默认值)对于ANT样式的路径glob不区分大小写,可以使用区分大小写参数,或正则表达式用于正则表达式匹配。例如:当{changesset pattern: "。TEST\\.java",比较器:"REGEXP"}当{变更集模式:“*/*TEST.java", casesensensitive: true}

changeRequest

执行当前构建的“更改请求”(A.K.A.在GitHub和Bitbucket上的Light请求,Gitlab上的合并请求,GERRIT等)。当没有参数通过时,舞台在每个更改请求上运行,例如:当{changeRequest()}

通过向更改请求添加带有参数的筛选器属性,可以使该阶段仅在匹配的更改请求上运行。可能的属性身份证件目标分支网址标题作者authorDisplayName,authorEmail.每个都对应于aCHANGE_ *环境变量,例如:当{changeRequest目标:'master'}

可选参数比较器可以添加在属性后,以指定如何对匹配的任何模式进行计算:=对于简单的字符串比较(默认值),地球仪对于ANT样式的路径全局(与示例相同变更集),或正则表达式用于正则表达式匹配。例如:当{changeRequest authorremail: "[\\w_-.]+@example.com", comparator: 'REGEXP'}

环境

当指定的环境变量被设置为给定值时,执行该阶段,例如:当{环境名:'DEPLOY_TO',值:'production'}

等于

当预期值等于实际值时执行阶段,例如:当{Equals预期:2,实际:CurrentBuild.number}

表达式

当指定的Groovy表达式的计算结果为true时执行阶段,例如:当{expression{返回参数。DEBUG_BUILD}}请注意,从表达式返回字符串时,必须将其转换为布尔值或返回值评价为假。简单地返回“0”或“false”仍然会被计算为“true”。

标签

如果出现以下情况,则执行阶段:标签名称变量匹配给定的模式。例子:当{标签"release-*"}.如果提供了空模式,则阶段将执行标签名称变量存在(与buildingTag ()).

可选参数比较器可以添加在属性后,以指定如何对匹配的任何模式进行计算:=对于简单的字符串比较,地球仪(默认值)用于ANT样式的路径glob(与示例相同)变更集),或正则表达式用于正则表达式匹配。例如:当{标签模式:"release-\\d+",比较器:"REGEXP"}

当嵌套条件为false时执行阶段。必须包含一个条件。例如:当{not {branch 'master'}}

所有

当所有嵌套条件都为真时执行该阶段。必须包含至少一个条件。例如:当{allOf {branch 'master';环境名称:'DEPLOY_TO',值:'production'}}

任何人

当至少一个嵌套条件为true时执行阶段。必须至少包含一个条件。例如:什么时候{Anyof {分支机构';分支机构'staging'}}

triggeredBy

当给定参数触发当前生成时,执行阶段。例如:

  • 当{触发'SCMTrigger'}

  • 当{triggeredBy 'TimerTrigger'}

  • 当{triggeredBy'UpstreamCause'触发}

  • 当{triggeredBy cause:“UserIdCause”,细节:“vlinde”}

评估在进入代理人在一个阶段

默认情况下,条件阶段将在输入代理人为此阶段,如果有定义的话。但是,这可以通过指定来改变前代理人块。如果前代理人设置为真正的,首先对条件进行评估,然后代理人只有在条件的值为true。

评估之前输入指示

默认情况下,如果定义一个,则不会在输入之前评估舞台的条件。但是,这可以通过指定来改变beforeInput块中的选项。如果beforeInput设置为true时,when条件将首先计算,只有当when条件计算为true时才会输入输入。

beforeInput真实优先于beforeAgent真实

评估之前选项指示

默认情况下,条件阶段将在输入选项为此阶段,如果有定义的话。但是,这可以通过指定来改变beforeOptions块。如果beforeOptions设置为真正的,首先对条件进行评估,然后选项只有在条件的值为true。

以前的选择是正确的优先于beforeInput真实beforeAgent真实

15例。单条件,声明式管道
管道{代理任意阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署){当{分支生产}步骤{echo部署} } } }
示例16.多条件、声明性管道
管道{代理任意阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署){当{分支生产环境的名字部署到价值生产}步骤{echo部署} } } }
示例17.嵌套条件(行为与前一示例相同)
管道{代理任意阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署){{allof {branch生产环境的名字部署到价值生产}}步骤{echo部署} } } }
示例18.多个条件和嵌套条件
管道{代理任意阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署){当{分支生产任何{环境的名字部署到价值生产环境的名字部署到价值登台}}步骤{echo部署} } } }
示例19。表达式条件和嵌套条件
管道{代理任意阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署){当{表达式{分支\名称==~/(生产|分段)/{环境的名字部署到价值生产环境的名字部署到价值登台}}步骤{echo部署} } } }
20例。前代理人
管道{代理无阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署){代理{标签some-label}当{beforeAgent真正的分支生产}步骤{echo部署} } } }
例21。beforeInput
管道{代理无阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署){当{在输入之前真正的分支生产}输入{消息部署到生产?身份证件简单的输入}步骤{echo部署} } } }
示例22。beforeOptions
管道{代理无阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署) {when {before选项真正的分支测试}选项{锁定标签测试部署环境1变量deployEnv}步骤{echo部署到${deployEnv} } } }
示例23。triggeredBy
管道{代理无阶段{阶段(示例构建){步骤{echo你好世界}}阶段(示例部署){当{被触发TimerTrigger}步骤{echo部署} } } }

连续阶段

声明式管道中的阶段可能有舞台部分,其中包含按顺序运行的嵌套阶段列表。注意,一个阶段必须有且只有一个步骤舞台平行,或矩阵.不可能嵌套一个平行矩阵闭塞阶段指令,如果阶段指令嵌套在平行矩阵块本身。然而,一个阶段内部指令平行矩阵块可以使用的所有其他功能阶段,包括代理人工具, 等等。

例24。顺序阶段,声明式管道
管道{代理无阶段{阶段(非连续阶段){代理{标签对于非顺序}步骤{echo非时序的舞台上}}阶段(顺序){代理{标签的顺序}环境{FOR_SEQUENTIAL =一些价值}阶段{阶段(在连续的1){步骤{echo在连续的1}}阶段(在连续2){步骤{echo在连续2}}阶段(平行的顺序){并行{阶段(并行1){步骤{echo并行1}}阶段(并行2){步骤{echo并行2} } } } } } } }

平行

声明式管道中的阶段可能有平行包含要并行运行的嵌套阶段列表的节。请注意,一个阶段必须有且只有一个步骤舞台平行,或矩阵.不可能嵌套一个平行矩阵闭塞阶段指令,如果阶段指令嵌套在平行矩阵块本身。然而,一个阶段内部指令平行矩阵块可以使用的所有其他功能阶段,包括代理人工具, 等等。

此外,你可以强迫你的平行当其中任何一个都失败时,所有人都会中止的阶段快速失效真到了阶段包含平行.添加的另一个选项failfast正在向管道定义添加选项:parallelsalwaysfailfast()

示例25.并行阶段,声明性管道
管道{代理任意阶段{阶段(非阶段){步骤{echo这个阶段将首先执行。}}阶段(平行阶段){当{分支} failFast真正的平行{阶段(分支A){代理{标签for-branch-a}步骤{echo在A分支上}}阶段(分支机构B){代理{标签for-branch-b}步骤{echo关于B分支}}阶段(分支C){代理{标签for-branch-c}阶段{阶段(嵌套1){步骤{echo在阶段嵌套1在分支C}}阶段(嵌套2){步骤{echo在阶段2中嵌套在分支C中} } } } } } } }
例26。parallelsAlwaysFailFast
{代理任何选项{parallelsAlwaysFailFast()}阶段{阶段(非阶段){步骤{echo这个阶段将首先执行。}}阶段(平行阶段){当{分支}平行{阶段(分支A){代理{标签for-branch-a}步骤{echo在A分支上}}阶段(分支机构B){代理{标签for-branch-b}步骤{echo关于B分支}}阶段(分支C){代理{标签for-branch-c}阶段{阶段(嵌套1){步骤{echo在阶段嵌套1在分支C}}阶段(嵌套2){步骤{echo在阶段2中嵌套在分支C中} } } } } } } }

矩阵

声明式管道中的阶段可能有矩阵节,定义要并行运行的多维名称-值组合矩阵。我们将把这些组合称为矩阵中的“单元格”。矩阵中的每个单元格可以包括一个或多个使用该单元格的配置顺序运行的阶段。注意,一个阶段必须有且只有一个步骤舞台平行,或矩阵.不可能嵌套一个平行矩阵闭塞阶段指令,如果阶段指令嵌套在平行矩阵块本身。然而,一个阶段内部指令平行矩阵块可以使用的所有其他功能阶段,包括代理人工具, 等等。

此外,你可以强迫你的矩阵当其中任何一个单元出现故障时,通过添加快速失效真到了阶段包含矩阵.添加的另一个选项failfast正在向管道定义添加选项:parallelsalwaysfailfast()

矩阵章节必须包括斧头部分和一个舞台部分这个斧头第节定义了每个属性的值在矩阵中舞台第节定义了阶段在每个单元中按顺序运行。一个矩阵可能有一个不包括切片从矩阵中移除无效单元。很多指令可以在阶段,包括代理人工具等,也可以添加到矩阵控制每个单元格的行为。

斧头

斧头节指定一个或多个指令。每一个由一个的名字以及一系列.所有坐标轴上的值都与其他坐标轴上的值相结合,生成单元格。

27个例子。带有3个单元格的单轴
矩阵{轴{轴{名称平台linux雨衣窗户}}// ...
28例。两轴12格(3 × 4)
矩阵{轴{轴{名称平台linux雨衣窗户}轴{名称浏览器边缘火狐safari}}// ...
29岁的例子。24个单元格的三轴矩阵(3 × 4 × 2)
矩阵{轴{轴{名称平台linux雨衣窗户}轴{名称浏览器边缘火狐safari}轴{名称建筑学32位64位}}// ...

舞台

舞台节指定一个或多个阶段将在每个单元格中顺序执行。这部分与其他部分相同`舞台部分

30例。带有3个单元的单轴,每个单元运行三个阶段——“构建”、“测试”和“部署”
矩阵{轴{轴{名称平台linux雨衣窗户}}阶段{阶段(构建){// ...}舞台(测验){// ...}舞台(部署){// ...}}}
示例31.具有12个细胞的双轴(三个乘四)
矩阵{轴{轴{名称平台linux雨衣窗户}轴{名称浏览器边缘火狐safari}}阶段{阶段(构建和测试){// ...}}}

不包括(可选)

可选不包括节允许作者指定一个或多个排除选择要从扩展的矩阵单元格集中排除的单元格的筛选器表达式(也称为sparsening)。筛选器使用一个或多个exclude的基本指令结构构造每个指令都有一个的名字列表

内部指令排除生成一组组合(类似于生成矩阵单元)。匹配所有值的矩阵单元排除组合从矩阵中移除。如果多于一个排除指令,每个单独计算以删除单元格。

当处理一长串要排除的值时,排除指令可以使用不值为而不是。这些将排除不要匹配传递给的一个值不值为

示例32.带24个单元的三轴矩阵,不包括“32位,mac”(不包括4个单元)
矩阵{轴{轴{名称平台linux雨衣窗户}轴{名称浏览器边缘火狐safari}轴{名称建筑学32位64位}}排除{排除{轴{名称平台雨衣}轴{名称建筑学32位}}}// ...

排除linux,旅行组合和排除任何平台窗户边缘浏览器

示例33.包含24个单元格的三轴矩阵,排除“32位,mac”和无效浏览器组合(排除9个单元格)
矩阵{轴{轴{名称平台linux雨衣窗户}轴{名称浏览器边缘火狐safari}轴{名称建筑学32位64位}}排除{排除{/ / 4细胞轴{名称平台雨衣}轴{名称建筑学32位}}排除{//2个细胞轴{名称平台linux}轴{名称浏览器safari}}排除{// 3个cell和'32位,mac'(已经排除)轴{名称平台不值为窗户}轴{名称浏览器边缘}}}// ...

矩阵单元级指令(可选)

通过在下面添加阶段级指令,Matrix允许用户有效地配置每个单元的整体环境矩阵本身。这些指令的行为与它们在舞台上的行为相同,但它们也可以接受矩阵为每个单元格提供的值。

排除指令定义构成矩阵的静态单元格集。在流水线运行开始之前生成该组合组合。另一方面,“每个单元格”指令在运行时进行评估。

这些指令包括:

例34。完整的矩阵示例,声明性管道
管道{参数{选择(的名字PLATFORM_FILTER选择: [全部linux窗户雨衣],描述在特定平台上运行)}代理无阶段{阶段(构建与测试){矩阵{代理{标签${平台-代理人}当{AnyOf {表达式{params.platform_filter ==全部}表达式{params.PLATFORM_FILTER==env.PLATFORM}}}axes{axis{name平台linux窗户雨衣}轴{名称浏览器火狐safari边缘}}排除{排除{轴{名称平台linux}轴{名称浏览器safari}}排除{轴{名称平台不值为窗户}轴{名称浏览器边缘阶段{阶段(构建){步骤{echo做建设${平台-${浏览器}}阶段(测试){步骤{echo做测试${平台-${浏览器} } } } } } }

台阶

声明式管道可以使用文档中记录的所有可用步骤管道步骤参考,其中包含一个完整的步骤列表,添加下面列出的步骤只支持在声明性管道。

脚本

脚本一步走一块脚本化管道并在声明性管道中执行。对于大多数用例,脚本在声明性管道中,步骤应该是不必要的,但它可以提供一个有用的“逃生舱口”脚本应搬入非琐碎尺寸和/或复杂性的块共享库代替。

35例。声明式管道中的脚本块
管道{代理任意阶段{阶段(实例){步骤{echo你好世界脚本{def浏览器= [火狐对于int我=0;i测试${浏览器[I]浏览器} } } } } }

脚本化管道

脚本化的管道,就像声明式管道,构建在底层的Pipeline子系统之上。与声明式管道不同,脚本化管道实际上是一种通用DSL棒极了.Groovy语言提供的大多数功能对Scripted Pipeline的用户都是可用的,这意味着它可以是一个非常富有表现力和灵活的工具,可以使用它创建连续的交付管道。

流控制

脚本化的管道是从顶部串行执行必威国际有限公司詹金斯档案向下,就像Groovy或其他语言中的大多数传统脚本一样。因此,提供流控制依赖于Groovy表达式,例如如果别的条件,例如:

36例子。条件语句如果,脚本化管道
节点{阶段(实例){如果(env。BRANCH_NAME = =){回声我只在主分支上执行其他的{回声我执行其他地方}}}

另一种管理脚本化管道流控制的方法是使用Groovy的异常处理支持。什么时候台阶失败的原因是抛出异常。处理错误上的行为必须使用尝试/抓住/最后例如,在Groovy中块:

示例37.尝试Catch块,脚本化管道
节点{阶段(实例){试一试{上海出口1(exc){呼应有东西坏了,我应该吹响喇叭!}}}

台阶

正如在本章开始,管道最基本的部分是“步骤”。基本上,步骤告诉Jenkins必威国际有限公司什么作为声明式和脚本式管道语法的基本构建块。

脚本化管道不需要介绍特定于其语法的任何步骤;管道步骤参考包含管道和插件提供的步骤的综合列表。

与普通Groovy的区别

为了提供耐久性,这意味着运行管道可以在Jenkins重启后继续运行必威国际有限公司控制器,脚本管道必须将数据序列化回控制器。由于这种设计要求,一些众一的成语如收集。每个{item→/*执行操作*/}不完全支持。看到必威国际有限公司詹金斯-27421必威国际有限公司Jenkins-26481.了解更多信息。

语法比较

当Jenk必威国际有限公司ins Pipeline第一次创建时,Groovy被选择为基础。詹金斯已经长期使用嵌入式Groovy引擎来为管理员和用户提供先进的脚本功能。此外,詹金斯管道的实现者发现Groovy是建立现在被称为“脚本化管道”DSL。

由于它是一个功能齐全的编程环境,脚本化管道为Jenkins用户提供了巨大的灵活性和可扩展性。必威国际有限公司Groovy学习曲线通常不适合给定团队的所有成员,因此创建了声明性流水线,以便为创作Jenkins管道提供更简单和更具自以为言的语法。必威国际有限公司

然而,它们的不同之处在于语法和灵活性。声明式使用更严格和预定义的结构限制用户可以使用的内容,使其成为更简单的连续交付管道的理想选择。脚本化提供了很少的限制,到目前为止,对结构和语法的唯一限制往往是由Groovy本身定义的,而不是任何特定于管道的系统,这使得它成为高级用户和那些有更复杂需求的用户的理想选择。顾名思义,声明式管道鼓励声明式编程模型。


1.“管道插件”的2.5版引入了对声明式管道语法的支持


这个页面有用吗?

请通过此网站提交您对此页面的反馈快速形成

或者,如果您不想填写快速表格,您可以简单地指出此页面是否有用?

是的没有


在这里.