管道的语法

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

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

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

声明式管道

声明式管道是Jenkins管道中相对较新的一种必威国际有限公司

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

管道{/*在这里插入声明式管道*/
  • 管道的顶层必须是,具体而言:管道{}

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

  • 块只能由小节指令台阶,或赋值语句。

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

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

限制

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

小节

声明式管道中的部分通常包含一个或多个指令台阶

代理

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

要求

是的

参数

允许

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

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

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

顶级特工

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

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

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

timeout(unit: 'SECONDS', time: 5) {stage("One"){node {sleep 10 echo 'Hello'}}}

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

参数

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

任何

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

没有一个

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

标签

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

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

节点

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

码头工人

使用给定的容器执行Pipeline或阶段,该容器将在58必威网站 预配置为接受基于Docker的管道,或在与可选定义的管道匹配的节点上标签参数。码头工人还可以选择接受arg游戏参数,该参数可以包含要直接传递给码头工人赛跑调用,永远选项,这将迫使a码头工人拉力即使图像名称已经存在。例如:Agent {docker 'maven:3.8.1-adoptopenjdk-11'}

代理{docker{图像maven: 3.8.1-adoptopenjdk-11标签my-defined-labelarg游戏- v / tmp: / tmp} }

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

代理{docker{图像myregistry.com/node标签my-defined-label注册URLhttps://myregistry.com/registryCredentialsId我预定的印第安金斯证书必威国际有限公司} }
dockerfile

使用从中构建的容器执行管道或阶段Dockerfile包含在源存储库中。为了使用这个选项,必威国际有限公司Jenkinsfile必须从a多分支管道或者一个管道从SCM.按照惯例,这是Dockerfile在源存储库的根目录中:代理{dockerfile true}.如果建造一个Dockerfile在另一个目录中,使用dir选择:代理{dockerfile {dir 'someSubDir'}}.如果你的Dockerfile有另一个名称时,可以使用文件名选择。可以将附加参数传递给码头工人建造……命令附加构建参数选择,比如代理{dockerfile{additionalBuildArgs'--buildarg foo=bar'}. 例如,包含该文件的存储库构建/ Dockerfile.build,期待一个构建参数版本

代理{//相当于“docker build -f Dockerfile. conf . conf”Build——Build -arg version=1.0.2 ./ Build /dockerfile{filenameDockerfile.builddir构建标签my-defined-label附加构建参数——build-arg版本1.0.2 =arg游戏- v / tmp: / tmp} }

dockerfile还可以选择接受注册URLregistryCredentialsId参数,这些参数将帮助指定要使用的Docker注册表及其凭据。例如:

代理{dockerfile{文件名Dockerfile.builddir构建标签my-defined-label注册URLhttps://myregistry.com/registryCredentialsId我预定的印第安金斯证书必威国际有限公司} }
库伯内特斯

在部署在Kubernetes集群上的pod内执行管道或阶段必威国际有限公司Jenkinsfile必须从a多分支管道或者一个管道从SCM这个Pod template is defined inside the kubernetes { } block. For example, if you want a pod with a Kaniko container inside it, you would define it as follows:

代理{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-secretKaniko能够通过ECR进行认证。这个秘密应该包含~ / .aws /凭证。另一个卷是ConfigMap,其中应包含ECR注册表的终结点。例如:

船员: {.dkr.ecr.eu-central-1.amazonaws.comecr登录} }
常见的选项

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

标签

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

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

自定义工作区

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

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

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

雷塞诺德

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

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

arg游戏

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

此选项适用于码头工人dockerfile

例1。Docker代理,声明式管道
管道{代理{dockermaven: 3.8.1-adoptopenjdk-11(1)阶段{阶段(示例构建){步骤{shmvn-B清洁验证} } } }
1 在新创建的具有给定名称和标记的容器(3.8.1-adoptopenjdk-11).
示例2.阶段级代理部分
管道{代理无(1)阶段{阶段(示例构建){代理{dockermaven: 3.8.1-adoptopenjdk-11(2)步骤{echo你好,Mavenmvn——版本}}阶段(示例测试){代理{dockeropenjdk: 8-jre(3)步骤{echo你好,JDKjava版本} } } }
1 定义代理没有在管道的顶层确保58必威网站 将不会被不必要地分配。使用代理没有也迫使每个人阶段节来包含它自己的代理部分。
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。后节,声明式管道
管道{代理任何阶段{阶段(例子){步骤{回音你好,世界}}} post {(1)总是{(2)回响我会永远说你好再次!}}}
1 照惯例,帖子管段应放置在管道末端。
2 后置条件块包含台阶台阶部分。

舞台

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

要求

是的

参数

没有一个

允许

只有一次,里面管道块。

例4。阶段,声明式管道
管道{代理任何阶段{(1)舞台(例子){步骤{回音你好,世界} } } }
1 舞台Section通常会遵循以下指令代理选项等。

台阶

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

要求

是的

参数

没有一个

允许

在每个阶段块。

例5。单步,声明式管道
管道{代理任何阶段{阶段('示例'){步骤{(1)回声“你好,世界”}}}}
1 台阶节必须包含一个或多个步骤。

指令

环境

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

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

要求

参数

没有一个

允许

管道块,或在阶段指令。

支持的凭据类型
密文

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

机密文件

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

用户名和密码

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

使用私钥进行SSH

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

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

示例6.密文凭据,声明性管道
管道{代理任何环境{(1)CC =铿锵声}阶段{阶段(例子环境{(2)AN_ACCESS_KEY =凭证(我预定义的密文(3)}步骤{shprintenv} } } }
1 一个环境在顶层中使用的指令管道块将应用于管道中的所有步骤。
2 一个环境定义在阶段只将给定的环境变量应用到阶段
3. 环境块有一个助手方法全权证书()定义,可用于通过Jenkins环境中的标识符访问预定义的凭据。必威国际有限公司
示例7.用户名和密码凭据
管道{代理任何阶段{阶段(示例用户名/密码){environment{SERVICE\u CREDS=凭证(my-predefined-username-password)}步骤{shecho "Service user is $SERVICE_CREDS_USR"echo "服务密码为$SERVICE_CREDS_PSW"curl -u $SERVICE_CREDS https://myservice.example.com . txt}}阶段(带有私钥的SSH用户名示例){环境{SSH_CREDS =凭据(my-predefined-ssh-creds)}步骤{shecho“SSH私钥位于$SSH\u CREDS”echo "SSH user is $SSH_CREDS_USR"echo "SSH密码为$SSH_CREDS_PSW"} } } }

选项

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

要求

参数

没有一个

允许

只有一次,里面管道块。

可用选项
构建丢弃器

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

签出子目录

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

disableConcurrentBuilds

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

无法恢复

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

newContainerPerStage

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

overrideIndexTriggers

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

preserveStashes

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

quietPeriod

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

重试

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

skipDefaultCheckout

中默认跳过从源代码控制签出代码代理指令。例如:options {skipDefaultCheckout()}

skipStagesAfterUnstable

一旦构建状态变为不稳定,就跳过各个阶段。例如:options {skipstagesafterinstability ()}

超时

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

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

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

parallelsAlwaysFailFast

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

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

阶段的选择

选项指令为阶段类似于选项指令。但是阶段-水平仪选项只能包含以下步骤重试超时时间戳,或与阶段喜欢skipDefaultCheckout

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

可用的阶段选项
skipDefaultCheckout

中默认跳过从源代码控制签出代码代理指令。例如:options {skipDefaultCheckout()}

超时

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

示例9.阶段超时,声明性管道
管道{代理任何阶段{阶段(例子) {options {timeout(时间1单元小时(1)}步骤{echo你好,世界} } } }
1 的执行超时时间为1小时例子阶段,之后詹金斯将中止管道运行。必威国际有限公司
重试

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

时间戳

将在此阶段生成的所有控制台输出加上该行发出的时间。例如:选项{时间戳()}

参数

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

要求

参数

没有一个

允许

只有一次,里面管道块。

可用参数
字符串

字符串类型的参数,例如:参数{string(名称:'DEPLOY_ENV',默认值:'staging',说明:'')}

文本

文本参数,可以包含多行,例如:{text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '')}

booleanParam

一个布尔参数,例如:{booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: ")}

选择

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

暗语

密码参数,例如:parameters {password(name: ' password', defaultValue: 'SECRET', description: 'A SECRET password')}

示例10。参数,声明式管道
管道{代理任何参数{字符串(的名字defaultValue詹金斯必威国际有限公司先生描述我应该向谁问好?)正文(的名字传记defaultValue描述输入有关此人的一些信息) booleanParam (的名字切换defaultValue符合事实的描述切换此值)选择(的名字选择选择: [三个],描述选择的东西)密码(的名字密码defaultValue秘密描述输入一个密码)}阶段{阶段(例子){步骤{回音你好$ {参数个数。人回响传记:$ {帕拉姆斯传记回响切换:$ {参数个数。切换回响选择:$ {参数选择回响密码:$ {参数个数。密码} } } }

的可用参数的全面列表正在等待完成INFRA-1503

触发器

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

要求

参数

没有一个

允许

只有一次,里面管道块。

cron

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

pollSCM

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

上游

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

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

示例11.触发器,声明性管道
//声明的//管道{代理任何触发器{cron(4 * * 1-5)}阶段{阶段(例子){步骤{回音你好,世界} } } }

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

Jenk必威国际有限公司ins cron语法遵循cron实用程序(细微的差别)。具体来说,每行由5个由TAB或空格分隔的字段组成:

分钟 小时 DOM 陶氏

一小时内的分钟数(0-59)

白天的时刻(0-23)

(1-31)

月(1 - 12)

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

要为一个字段指定多个值,可以使用以下运算符。按优先顺序,

  • 指定所有有效值

  • mn指定值的范围

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

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

为了允许定期计划的任务在系统上产生均匀的负载,符号H(对于“哈希”)应尽可能使用。例如,使用0 0 * * *对于12个日常工作来说,午夜将导致一个巨大的峰值。相比之下,使用H***仍然每天执行一项工作,但不是同时执行所有工作,更好地利用有限的资源。

H符号可以与范围一起使用。例如,H(0-7)***表示从上午12:00(午夜)到上午7:59之间的某段时间。您也可以将步长间隔用于H,有或没有范围。

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

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

空行和以将作为注释被忽略。

此外,@yearly@annually@月刊@weekly@daily@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('459-16/2**1-5')}

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

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

每月1日和15日一次,12月除外

触发器{cron('H H 1,15 1-11 *')}

阶段

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

要求

至少有一个

参数

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

允许

舞台部分。

示例12。阶段,声明式管道
//声明的//管道{代理任何阶段{阶段(例子){步骤{回音你好,世界} } } }

工具

一节定义工具,以自动安装和放在路径。如果代理没有都是确定的。

要求

参数

没有一个

允许

管道块或阶段块。

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

输入

输入一个指令阶段允许您使用输入一步这个阶段将在任何时间后暂停选项已被申请,在进入代理块的阶段或评估的条件阶段.如果输入经批准后阶段然后将继续。作为输入提交将可在环境中的其余阶段

配置选项
消息

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

id

一个可选的标识符输入.默认的阶段的名字。

好啊

屏幕上“确定”按钮的可选文本输入类型

提交人

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

提交参数

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

参数

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

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

指令允许管道根据给定的条件决定阶段是否应该执行。的指令必须包含至少一个条件。如果指令包含多个条件,所有子条件必须返回true才能执行舞台。这与子条件嵌套在所有条件(见例子下文)。如果一个任何使用条件时,请注意,一旦发现第一个“真”条件,该条件将跳过剩余的测试。

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

要求

参数

没有一个

允许

在一个阶段指令

内置的条件
分支

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

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

buildingTag

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

更新日志

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

变更集

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

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

变更请求

如果当前构建是为了一个“更改请求”(也就是在GitHub和Bitbucket上拉请求,在GitLab上合并请求,在Gerrit上更改,等等),执行阶段。当没有传递参数时,阶段在每个更改请求上运行,例如:当{changeRequest()}

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

可选参数比较器可添加在属性之后,以指定如何为匹配计算任何模式:等于对于简单的字符串比较(默认值),一团对于ANT样式的路径glob(与示例相同)变更集),或正则表达式用于正则表达式匹配。例如:当{changeRequest authorEmail:[\\w_-.]+@example.com”,比较器:'REGEXP'}

环境

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

=

当期望值等于实际值时执行阶段,例如:当{= expected: 2,实际:currentBuild。号}

表示

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

标签

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

可选参数比较器可添加在属性之后,以指定如何为匹配计算任何模式:等于对于简单的字符串比较,一团(默认值)用于ANT样式的路径全局(与示例相同变更集),或正则表达式用于正则表达式匹配。例如:当{标记模式:“release-\\d+”,比较器:“REGEXP”}

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

所有

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

任何

当至少一个嵌套条件为true时执行阶段。必须至少包含一个条件。例如:当{anyOf {branch 'master';分支'staging'}}

triggeredBy

当给定的参数触发当前构建时,执行该阶段。例如:

  • 当{触发'SCMTrigger'}

  • 当{triggeredBy 'TimerTrigger'}

  • 当{触发'UpstreamCause'}

  • 当{trigedby原因:"UserIdCause", detail: "vlinde"}

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

默认情况下,条件阶段将在进入代理为那阶段,如果有定义的话。但是,可以通过指定前代理人选项中块。如果前代理人设置为符合事实的,条件将首先被计算,然后代理只有在条件的计算结果为true。

评估输入指令

默认情况下,如果定义了阶段,则阶段的when条件不会在输入之前计算。但是,可以通过指定输入前选项。如果输入前设置为true时,将首先计算when条件,并且仅当when条件计算为true时才输入输入。

beforeInput真实优先于beforeAgent真实

评估选项指令

默认情况下,条件阶段将在进入选项为那阶段,如果有定义的话。但是,可以通过指定beforeOptions选项中块。如果beforeOptions设置为符合事实的,条件将首先被计算,然后选项只有在条件的计算结果为true。

beforeOptions真实优先于beforeInput真实beforeAgent真实

15例。单条件,声明式管道
管道{代理任何阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){当{分支生产}步骤{echo部署} } } }
示例16。多重条件,声明性管道
管道{代理任何阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){当{分支生产环境的名字DEPLOY_TO价值生产}步骤{echo部署} } } }
示例17.嵌套条件(行为与前一示例相同)
管道{代理任何阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){当{所有的{分支生产环境的名字DEPLOY_TO价值生产}}步骤{echo部署} } } }
示例18.多个条件和嵌套条件
管道{代理任何阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){当{分支生产任何{环境的名字DEPLOY_TO价值生产环境的名字DEPLOY_TO价值暂存}}步骤{echo部署} } } }
示例19。表达式条件和嵌套条件
管道{代理任何阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){当{表达式{分支\名称==~/(生产|分段)/{环境的名字DEPLOY_TO价值生产环境的名字DEPLOY_TO价值暂存}}步骤{echo部署} } } }
例20。前代理人
管道{代理无阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){代理{标签some-label}当{beforeAgent符合事实的分支生产}步骤{echo部署} } } }
示例21。输入前
管道{代理无阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){当{输入符合事实的分支生产} input{消息部署到生产?id简单的输入}步骤{echo部署} } } }
例22。beforeOptions
管道{代理无阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){when{before选项符合事实的分支测试}选项{锁}标签testing-deploy-envs1变量deployEnv}步骤{echo部署到$ {deployEnv} } } }
例23。triggeredBy
管道{代理无阶段{阶段(示例构建){步骤{回音你好,世界}}阶段(示例部署){当{被触发计时器}步骤{echo部署} } } }

连续的阶段

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

例24。顺序阶段,声明式管道
管道{代理无阶段{阶段(非时序的阶段){代理{标签for-non-sequential}步骤{echo论非序贯阶段}}阶段(顺序){代理{标签的顺序}环境{FOR_SEQUENTIAL =一些价值}阶段{阶段(在连续的1){步骤{回音在连续的1}}阶段(在连续2){步骤{回音在连续2}}阶段(顺序并行){平行{阶段(在平行1){步骤{回音在平行1}}阶段(在平行2){步骤{回音在平行2} } } } } } } }

平行

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

此外,你可以强迫你的平行当它们中的任何一个失败时,所有的阶段都将被中止,通过添加failFast真实阶段包含平行.添加的另一个选项failfast正在向管道定义中添加一个选项:parallelsAlwaysFailFast ()

示例25.并行阶段,声明性管道
管道{代理任何阶段{阶段(非平行级){步骤{回音这一阶段将首先执行。}}阶段(并行的阶段){当{分支主人} failFast符合事实的平行{级(一个分支){代理{标签for-branch-a}步骤{echo在分支}}阶段(分支B){代理{标签for-branch-b}步骤{echo在分支B}}阶段(分支C){代理{标签for-branch-c}阶段{阶段(嵌套1){步骤{回音在阶段嵌套1在分支C}}阶段(嵌套2){步骤{回音在阶段嵌套2在分支C} } } } } } } }
26个例子。parallelsAlwaysFailFast
管道{agent any options{parallelsAlwaysFailFast()}stages{stage(非平行级){步骤{回音这一阶段将首先执行。}}阶段(并行的阶段){当{分支主人}平行{阶段(一个分支){代理{标签for-branch-a}步骤{echo在分支}}阶段(分支B){代理{标签for-branch-b}步骤{echo在分支B}}阶段(分支C){代理{标签for-branch-c}阶段{阶段(嵌套1){步骤{回音在阶段嵌套1在分支C}}阶段(嵌套2){步骤{回音在阶段嵌套2在分支C} } } } } } } }

矩阵

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

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

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

节指定一个或多个指令。每一个由一个的名字以及一份.将每个轴的所有值与其他轴的值组合以生成单元格。

示例27.一个轴有3个单元
矩阵{轴{轴{名称站台linuxmac窗户} }/ /……
28例。两轴12格(3 × 4)
矩阵{轴{轴{名称站台linuxmac窗户}轴{名称浏览器火狐游猎} }/ /……
示例29.具有24个单元的三轴矩阵(三乘四乘二)
矩阵{轴{轴{名称站台linuxmac窗户}轴{名称浏览器火狐游猎}轴{名称体系结构32位64位} }/ /……

舞台

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

30例。带有3个单元的单轴,每个单元运行三个阶段——“构建”、“测试”和“部署”
矩阵{轴{轴{名称站台linuxmac窗户}}阶段{阶段(构建) {/ /……}阶段(测试) {/ /……}阶段(部署) {/ /……}}}
例31。两轴12格(3 × 4)
矩阵{轴{轴{名称站台linuxmac窗户}轴{名称浏览器火狐游猎}}阶段{阶段(构建和测试) {/ /……}}}

不包括(可选)

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

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

处理要排除的一长串值时,请选择“排除”指令可以使用notValues而不是。这些将排除匹配传递给的值之一notValues

32例。三轴矩阵,包含24个单元,不包括“32位,mac”(不包括4个单元)
矩阵{轴{轴{名称站台linuxmac窗户}轴{名称浏览器火狐游猎}轴{名称体系结构32位64位}}排除{排除{轴{名称站台mac}轴{名称体系结构32位}}}/ /……

排除linux,旅行组合并排除任何窗户浏览器。

33例。三轴矩阵,包含24个单元格,排除“32位,mac”和无效的浏览器组合(排除9个单元格)
矩阵{轴{轴{名称站台linuxmac窗户}轴{名称浏览器火狐游猎}轴{名称体系结构32位64位}}排除{排除{/ / 4细胞轴{名称站台mac}轴{名称体系结构32位}}排除{/ / 2细胞轴{名称站台linux}轴{名称浏览器游猎}}排除{//3个以上单元和32位mac(已排除)轴{名称站台notValues窗户}轴{名称浏览器}}}/ /……

矩阵单元级指令(可选)

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

排除指令定义了组成矩阵的静态单元格集合。这组组合是在管道开始运行之前生成的。另一方面,“per-cell”指令在运行时被计算。

这些指令包括:

例34。完整的矩阵示例,声明性管道
管道{参数{选择(的名字平台过滤器选择: [所有linux窗户mac],描述在特定平台上运行)}代理无阶段{阶段(构建与测试){矩阵{代理{标签$ {站台代理}当{anyOf{表达式{参数。PLATFORM_FILTER = =所有}表达式{参数。PLATFORM_FILTER = =env.PLATFORM } } } axes { axis { name站台linux窗户mac}轴{名称浏览器火狐游猎}}排除{排除{轴{名称站台linux}轴{名称浏览器游猎}}排除{轴{名称站台notValues窗户}轴{名称浏览器}}}阶段{阶段(建筑){步骤{回音建造$ {站台-$ {浏览器}}阶段(测试){步骤{回音做测试$ {站台-$ {浏览器} } } } } } }

台阶

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

脚本

脚本一步走一块脚本化的管道并在声明式管道中执行。对于大多数用例来说脚本在声明性管道中,步骤应该是不必要的,但它可以提供一个有用的“逃生舱口”脚本大小和/或复杂的区块应该被移到其中共享库代替。

例35。声明性管道中的脚本块
管道{代理任何阶段{阶段(例子){步骤{回音你好,世界剧本{def浏览器= [火狐int我=0;我< browsers.size ();+ + i){呼应测试$ {浏览器(我)浏览器} } } } } }

脚本化的管道

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

流控制

脚本化的管道是从顶部串行执行必威国际有限公司Jenkinsfile向下,就像Groovy或其他语言中的大多数传统脚本一样如果/其他条件语句,例如:

36例子。条件语句如果脚本化的管道
节点{阶段(例子) {如果(环境分支机构名称)==主人){回声我只在主分支上执行其他的{回声我在别处执行}}}

管理Scripted Pipeline流控制的另一种方式是使用Groovy的异常处理支持。当台阶无论出于何种原因引发异常,都会失败。错误处理行为必须使用try / catch / finally块,例如:

37个例子。Try-Catch块,脚本化管道
节点{阶段(例子) {尝试{上海出口1(exc){echo有些事失败了,我应该听听克拉克森夫妇的声音!}}}

台阶

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

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

与普通Groovy的区别

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

语法比较

当Jenk必威国际有限公司ins Pipeline第一次创建时,Groovy被选为基础。必威国际有限公司Jenkins长期以来一直使用嵌入式Groovy引擎,为管理员和用户提供高级脚本功能。此外,Jenkins Pipeline的实现者发现Groovy是构建必威国际有限公司现在称为“脚本化管道”DSL的坚实基础。

由于它是一个功能齐全的编程环境,Scripted Pipeline为Jenkins用户提供了巨大的灵活性和可扩展性。必威国际有限公司Groovy学习曲线通常并不适合特定团队的所有成员,因此创建Declarative Pipeline是为了为编写Jenkins Pipeline提供一种更简单、更有个性的语法。必威国际有限公司

然而,它们的不同之处在于语法和灵活性。声明性限制了用户可以使用更严格和预定义的结构,使其成为更简单的连续传递管道的理想选择。Scripted提供了很少的限制,因为对结构和语法的唯一限制往往是由Groovy本身定义的与任何特定于管道的系统相比,它是高级用户和需求更复杂的用户的理想选择。顾名思义,声明性管道鼓励声明性编程模型。


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


这个页面有用吗?

请通过这个提交你对这个页面的反馈快速形成

或者,如果您不希望完成快速表单,您可以简单地指出,如果您觉得这个页面有帮助?

是的


在这里.