使用Jenkin必威国际有限公司sfile

本节以本节中介绍的信息为基础从管道入门并介绍了更多有用的步骤、常见模式,并演示了一些重要的内容必威国际有限公司Jenkinsfile的例子。

创造A.必威国际有限公司Jenkinsfile,该源控制[

创建一个Jenkins必威国际有限公司file

如讨论的那样在SCM中定义管道,一个必威国际有限公司Jenkinsfile是一个文本文件,包含Jenkins管道的定义,并签入源代码管理。考虑下面的管道,它实现了一个基本的必威国际有限公司三级连续输送管道。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任意阶段{阶段('建造'){步骤{echo'建筑。。'} } 阶段('测试'){步骤{echo'测试. .'} } 阶段('部署'){步骤{echo'部署....'}}}}}
切换脚本管道 (先进的)

并不是所有的pipeline都有这三个相同的阶段,但是对于大多数项目来说,定义它们是一个很好的起点。下面几节将演示在Jenkins测试安装中创建和执行一个简单的Pipeline。必威国际有限公司

假设已经为项目设置了一个源控制存储库,并且在Jenkins之后已经定义了一个管道必威国际有限公司这些指令

使用文本编辑器,理想情况下是一个支持的Groovy语法突出显示,创建一个新的必威国际有限公司Jenkinsfile在项目的根目录中。

上面的声明性管道示例包含实现连续交付管道的最小必要结构。这代理指令,它指示Jenkins为管道分配一个执行器和工作区。必威国际有限公司没有一个代理指令,不仅声明式管道无效,而且它将无法执行任何工作!默认情况下,代理指令可确保检查源存储库并在后续阶段的步骤中提供

阶段指令,及步骤指令也是有效的声明式管道所必需的,因为它们指示Jenkins执行什么以及应该在哪个阶段执行。必威国际有限公司

有关脚本管道的更高级使用,上面的示例节点是关键的第一步,因为它为管道分配了执行器和工作区。从本质上说,没有节点,管道不能做任何工作!从内部节点,第一批业务将是签署此项目的源代码。自从此以来必威国际有限公司Jenkinsfile正在从源控制中直接拉动,管道提供了一种快速简便的方法来访问源代码的正确版本

必威国际有限公司Jenkinsfile(脚本管道)
节点{checkout scm(1)/ * .. Snip .. * /}
1 结帐步骤将从源代码管理中签出代码;SCM.是一个特殊的变量,它指示结帐步骤克隆触发该管道运行的特定修订。

建造

对于许多项目来说,管道中“工作”的开始将是“构建”阶段。管道的这一阶段通常是源代码组装、编译或打包的地方。这个必威国际有限公司Jenkinsfile不是替换现有的构建工具,如GNU / make,maven,gradle等,而是可以被视为胶水层,以将项目的开发生命周期(构建,测试,部署等)的多个阶段绑定在一起。

必威国际有限公司Jenkins有许多插件用于常常使用实际上的构建工具,但此示例将简单地调用使从壳步骤(上海).这上海步骤假设系统是基于UNIX / Linux的基于Windows的系统蝙蝠可以用来代替。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任意阶段{阶段('建造'){步骤{sh'使'(1)archiveartifacts.人工制品'** /目标/ *。罐子'指纹真的(2)}}}}}
切换脚本管道 (先进的)
1 上海步骤调用使命令,并仅在命令返回零退出码时继续。任何非零退出代码都将导致管道失败。
2 archiveartifacts.捕获与include模式匹配的文件(** /目标/ *。罐子)并将它们保存到Jenkins控制器中以供以后检必威国际有限公司索。

归档工件不是使用外部工件存储库的替代品,例如artifactory或nexus,并且应该仅考虑基本报告和文件档案。

测试

运行自动化测试是任何成功的连续交付过程的关键组成部分。因此,Jenkins拥有一系列测试记录、报告和可视化设施,这些设施由必威国际有限公司插件数量.在基本级别,当有测试失败时,有jenkins记录Web UI中报告和可视化的失败是有用的。必威国际有限公司以下示例使用junit.步骤,由JUNIT插件

在下面的示例中,如果测试失败,则管道标记为“不稳定”,如Web UI中的黄色球所示。基于记录的测试报告,Jenkins还可以提供历史趋势分析和可视化。必威国际有限公司

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任意阶段{阶段('测试'){步骤{/ *`在测试失败时,返回非零,*使用`true`将允许管道继续* /上海'使||为真'(1)junit.'** / target / *。XML'(2)}}}}}
切换脚本管道 (先进的)
1 使用内联shell条件(SH'取消||真的')确保上海步骤始终看到零退出代码,给出junit.逐步获得获取和处理测试报告的机会。可选择的方法将在处理失败下面的部分。
2 junit.捕获并关联与包含模式匹配的JUnit XML文件(** / target / *。XML).

部署

根据项目或组织的需求,部署可能意味着各种步骤,可以是将构建的工件发布到Artifactory服务器,也可以是将代码推送到生产系统。

在示例管道的此阶段,“构建”和“测试”阶段都已成功执行。从本质上讲,“部署”阶段只会在假设先前阶段成功完成,否则管道将早期退出。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任意阶段{阶段('部署'){当{表达式{currentbuild.result ==时无效的||currentbuild.result ==.'成功'(1)}}步骤{sh'让发布'}}}}}
切换脚本管道 (先进的)
1 访问currentBuild.result变量允许管道确定是否存在任何测试失败。在这种情况下,该价值将是不稳定

假设在示例Jenkins Pipeline中一切都已成功执行,每一次成功的Pipeline运行都将在Jenkins中归档相必威国际有限公司关的构建工件、报告测试结果和完整的控制台输出。

脚本化的管道可以包括条件测试(如上所示)、循环、try/catch/finally块甚至函数。下一节将更详细地介绍这种高级脚本化管道语法。

使用你的jenkinsfile必威国际有限公司

以下部分提供有关处理的详细信息:

  • 特定的管道语法必威国际有限公司Jenkinsfile

  • 管道语法的功能和功能在构建应用程序或管道项目方面是必不可少的。

使用环境变量

必威国际有限公司Jenkins管道通过全局变量暴露环境变量env.,它可以在a的任何地方使用必威国际有限公司Jenkinsfile.在Jenkins Pipeline中可访问的环境变量的完整列表记录在${YOUR_JENKINS_URL}/ Pipelin必威国际有限公司e -syntax/globals#env,包括:

BUILD_ID

当前构建ID,与在Jenkins版本1.597+中创建的构建的BUILD_NUMBER相同必威国际有限公司

BUILD_NUMBER

当前内部版本号,如“153”

build_tag.

jenkins的字符必威国际有限公司串 - $ {wab_name} - $ {build_number}。方便地放入资源文件,jar文件等,以便更轻松地识别

构建URL

可以找到此构建结果的URL(例如http:// buildserver / jenkins / nob / myjobname / 17 /)必威国际有限公司

executor_number.

标识执行此构建的当前执行器(同一机器的执行器之间)的惟一编号。这是您在“构建执行器状态”中看到的数字,只是这个数字从0开始,而不是1

爪哇之家酒店

如果您的作业配置为使用特定的JDK,则将此变量设置为指定JDK的JAVA_HOME。当设置这个变量时,PATH也会被更新,以包含JAVA_HOME的bin子目录

必威国际有限公司Jenkins_URL.

Jenkins的完整UR必威国际有限公司L,如https://example.com:port/jenkins/(注意:只有当Jenkins URL设置为“系统配置”)

JOB_NAME

此构建项目的名称,例如“foo”或“foo / bar”。

节点名称

当前构建运行的节点的名称。设置为Jenkins控制器的“Master”。必威国际有限公司

工作区

工作区的绝对路径

参考或使用这些环境变量可以完成,如访问Groovy中的任何键地图,例如:

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任意阶段{阶段('例子'){步骤{echo跑步${env.Build_id.}${env.必威国际有限公司jenkins_url.}}}}}}
切换脚本管道 (先进的)

设置环境变量

在Jenkins管道中设置环境变量根据是否使用了声明性或脚本的流水线而不同地完成。必威国际有限公司

声明式管道支持环境指令,而脚本化管道的用户必须使用with步。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理人任何环境{(1)CC ='叮当声'阶段{阶段('例子') { 环境 {(2)debug_flags ='- g'}步骤{sh'printenv'}}}}}
切换脚本管道 (先进的)
1 一个环境在顶层中使用的指令管道块将应用于管道中的所有步骤。
2 一个环境在a内定义的指令阶段只将给定的环境变量应用于内部的步骤阶段

动态设置环境变量

环境变量可以在运行时设置,可以由shell脚本(上海),Windows批处理脚本(蝙蝠)和PowerShell脚本(电源外壳).每个脚本可以returnstatus.returnStdout有关脚本的更多信息

下面是使用上海(壳)两者returnstatus.returnStdout

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理人(1)环境 {//使用returnstdout.CC =“”${SH(returnStdout真的脚本'回声“叮当声”'}“”(2)/ /使用returnStatusEXIT_STATUS =.“”${SH(returnstatus.真的脚本'出口1'}“”阶段{阶段('例子'){环境{DEBUG_FLAGS ='- g'}步骤{sh'printenv'}}}}}
1 一个代理必须设置在管道的顶级。如果代理程序设置为此,则会失败代理没有
2 使用时returnStdout尾随空格将附加到返回的字符串。用。修剪()要删除此。

处理凭证

凭证配置在詹金斯必威国际有限公司可以在管道中处理以立即使用。在Jenkins上阅读更多关于使用凭证的内容必威国际有限公司使用凭证页面。

对于秘密文本,用户名和密码和密码文件

必威国际有限公司Jenkins的声明式Pipeline语法具有凭证()方法中使用的环境指令)支持秘密的文本用户名和密码, 也秘密文件证书。如果要处理其他类型的凭据,请参阅对于其他凭据类型部分(下图)。

秘密文本

下面的Pipeline代码展示了如何使用环境变量为秘密文本凭据创建一个Pipeline。

在本例中,将两个秘密文本凭证分配给单独的环境变量以访问Amazon Web Services (AWS)。这些凭证将在Jenkins中配置为它们各自的凭证id必威国际有限公司
必威国际有限公司Jenkins-AWS-Secret-Key-ID必威国际有限公司jenkins-aws-secret-access-key

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理{//定义此处的代理详细信息}环境{AWS\u访问\u密钥\u ID=凭据('必威国际有限公司Jenkins-AWS-Secret-Key-ID')aws_secret_access_key =凭据('必威国际有限公司jenkins-aws-secret-access-key'阶段{阶段('示例阶段1'){步骤{//(1)} } 阶段('例二期'){步骤{//(2)}}}}}
1 您可以引用这两个凭据环境变量(在此管道的环境指令),在此阶段使用该语法的步骤$ aws_access_key_id.AWS_SECRET_ACCESS_KEY美元.例如,这里可以使用分配给这些凭据变量的秘密文本凭据对AWS进行身份验证。
为了维护这些凭据的安全性和匿名性,如果作业从管道中显示这些凭据变量的值(例如。echo $ AWS_SECRET_ACCESS_KEY), 必威国际有限公司Jenkins只返回值“****”,以减少向控制台输出和任何日志泄露机密信息的风险。在Pipeline运行的输出中,凭据id本身中的任何敏感信息(如用户名)也会以“****”的形式返回。
这只降低了风险意外曝光.它不会阻止恶意用户通过其他方式捕获凭证价值。使用凭据的管道也可以披露这些凭据。不要允许不受信任的管道作业来使用可信凭据。
2 在这个管道示例中,分配给这两个人的凭据美国焊接学会…环境变量是全局用于整个管道的范围,因此这些凭据变量也可以在此阶段的步骤中使用。但是,如果环境这个管道中的指令被移动到一个特定的阶段(如用户名和密码管道示例下面),然后是这些美国焊接学会…环境变量只会在该阶段中的步骤范围。
用户名和密码

下面的Pipeline代码片段展示了如何使用用户名和密码凭据的环境变量创建一个Pipeline。

在此示例中,将用户名和密码凭据分配给环境变量,以访问组织的公共帐户或团队中的Bitbucket存储库;这些凭证将在Jenkins中使用凭证ID进行配置必威国际有限公司必威国际有限公司Jenkins-Bitbucket-Common-Creds

属性中设置凭据环境变量时环境指令:

环境{bitbucket_common_creds =凭据('必威国际有限公司Jenkins-Bitbucket-Common-Creds')}

这实际上设置了以下三个环境变量:

  • 比特桶\u普通\u信条-包含由冒号分隔的用户名和密码,格式为用户名:密码

  • 比特桶\u普通\u信用\u USR-仅包含用户名组件的附加变量。

  • BITBUCKET_COMMON_CREDS_PSW- 仅包含密码组件的其他变量。

按照惯例,环境变量的变量名通常以大写字母指定,单个单词之间用下划线分隔。但是,您可以使用小写字符指定任何合法的变量名。请记住,由凭证()方法(上面的)将总是被附加_USR._PSW(即下划线后跟三个大写字母的格式)。

以下代码段显示其全部内容:

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理{//定义此处的代理详细信息阶段{阶段('示例阶段1'){环境{bitbucket_common_creds =凭据('必威国际有限公司Jenkins-Bitbucket-Common-Creds')}步骤{//(1)} } 阶段('例二期'){步骤{//(2)}}}}}
1 以下凭证环境变量(在本市管道中定义环境指令)在此阶段的步骤中可用,可以使用语法引用:
  • $BITBUCKET\u普通\u信条

  • $ bitbucket_common_creds_usr.

  • BITBUCKET_COMMON_CREDS_PSW美元

例如,这里您可以使用分配给这些凭证变量的用户名和密码对Bitbucket进行身份验证。
为了维护这些凭据的安全性和匿名性,如果作业从管道中显示这些凭据变量的值,则采用与秘密文本上面的示例也适用于这些用户名和密码凭据变量类型。
这只降低了风险意外曝光.它不会阻止恶意用户通过其他方式捕获凭证价值。使用凭据的管道也可以披露这些凭据。不要允许不受信任的管道作业来使用可信凭据。

2 在此管线示例中,分配给三个的凭据COMMON_BITBUCKET_CREDS……环境变量的作用域仅为示例阶段1,因此这些凭据变量不可用于此应用程序例二期阶段的步骤。但是,如果环境在本市管道中的指令立即移动管道块(如秘密文本上面的管道例子),然后是这些COMMON_BITBUCKET_CREDS……环境变量的作用域是全局的,可以在任何阶段的步骤中使用。
秘密文件

秘密文件是一种凭证,存储在一个文件中并上传到Jenkins。必威国际有限公司机密文件用于以下凭据:

  • 太笨重直接进入詹金斯和/或必威国际有限公司

  • 以二进制格式,例如GPG文件。

在本例中,我们使用一个Kubernetes配置文件,该配置文件被配置为一个名为我的kubeconfig

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理{//定义此处的代理详细信息} 环境 {//将分配my_kubeconfig环境变量//临时文件的值。例如:///home/user/.j必威国际有限公司enkins/workspace/cred_test@tmp/secretFiles/546a5cf3-9b56-4165-a0fd-19e2afe6b31f/kubeconfig.txtMY_KUBECONFIG =凭证('我的kubeconfig'阶段{阶段('示例阶段1'){步骤{sh(kubectl——kubeconfig$MY_KUBECONFIG得到豆荚}}}}}}

对于其他凭据类型

如果您需要在管道中为机密文本、用户名和密码或机密文件以外的任何东西设置凭据(以上) -即SSH密钥或证书,然后使用Jenkins的必威国际有限公司代码段生成器功能,你可以通过Jenkins的经典UI访问它。必威国际有限公司

访问代码段生成器对于您的管道项目/项目:

  1. 从Jenkins主必威国际有限公司页(即Jenkins's Classic UI的仪表板),单击管道项目/项目的名称。

  2. 在左侧,单击管道语法并确保了代码段生成器链接在左上角处于粗体状态。(如果没有,请单击其链接。)

  3. 来自样一步字段中,选择保证金:将凭据绑定到变量

  4. 绑定, 点击添加从下拉菜单中选择:

    • SSH用户私钥——处理SSH公私密钥对凭据,你可以指定:

      • 密钥文件变量- 将绑定到这些凭据的环境变量的名称。必威国际有限公司Jenkins实际上将此临时变量分配给SSH公共/私钥对身份验证过程所需的私钥文件的安全位置。

      • 密码变量可选的)—将被绑定到的环境变量的名称密码与SSH公共/私钥对相关联。

      • 用户名变量可选的)—将被绑定到与SSH公钥/私钥对关联的用户名的环境变量的名称。

      • 凭证-选择存储在Jenkins中的SSH公钥/私钥凭据。必威国际有限公司此字段的值是凭据ID,Jenkins将其写入生成的片段。必威国际有限公司

    • 证书——处理PKCS#12证书,你可以指定:

      • 密钥存储库变量- 将绑定到这些凭据的环境变量的名称。必威国际有限公司Jenkins实际上将此临时变量分配给证书身份验证过程中所需的证书密钥库的安全位置。

      • 密码变量可选的)-将绑定到与证书关联的密码的环境变量的名称。

      • 别名变量可选的) - 将绑定到与证书关联的唯一别名的环境变量的名称。

      • 凭证- 选择存储在Jenkins中的证书凭据。必威国际有限公司此字段的值是凭据ID,Jenkins将其写入生成的片段。必威国际有限公司

    • 码头工人客户端证书-处理Docker主机证书身份验证。

  5. 点击生成管道脚本詹金斯生必威国际有限公司成了使用凭据(…){…}指定凭据的管道步骤片段,然后可以将其复制并粘贴到声明式或脚本化的管道代码中。
    注:

    • 凭证字段(如上)显示在Jenkins中配置的凭据的名称。必威国际有限公司但是,单击之后,这些值会转换为凭据id生成管道脚本

    • 将多个凭据组合成一个使用凭据(…){…}管道一步,看到在一个步骤中结合凭证详情(下图)。

SSH用户私钥示例

承担信守(绑定:[sshuserprivatekey(CredienceSid.'必威国际有限公司Jenkins-Ssh-key-for-abc', \keyFileVariable'ssh_key_for_abc.', \passphrasevariable.'', \usernameVariable'')]){//一些块}

可选passphrasevariable.usernameVariable定义可以在最终的Pipeline代码中删除。

证书的例子

承担信守(绑定: [证书(aliasvariable.'', \CredienceSid.'必威国际有限公司jenkins-certificate-for-xyz', \keystorevariable.'certificate_for_xyz.', \密码等级'XYZ-CERTIFICATE-PASSWORD')]){//一些块}

可选aliasvariable.密码等级变量定义可以在最终的Pipeline代码中删除。

以下代码片段显示了一个例子,其整体上实现了它实现的SSH用户私钥证书上面代码片段:

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理{//定义代理细节阶段{阶段('示例阶段1'){步骤{withcrientials(绑定:[sshuserprivatekey(CredienceSid.'必威国际有限公司Jenkins-Ssh-key-for-abc', \keyFileVariable'ssh_key_for_abc.')]){//(1)坚持信(绑定: [证书(CredienceSid.'必威国际有限公司jenkins-certificate-for-xyz', \keystorevariable.'certificate_for_xyz.', \密码等级'XYZ-CERTIFICATE-PASSWORD')]){//(2)}}}阶段('例二期'){步骤{//(3)}}}}}
1 在此步骤中,您可以使用语法引用凭据环境变量SSH_KEY_FOR_ABC美元.例如,在这里,您可以使用ABC应用程序配置的SSH公钥/私钥对凭据进行身份验证SSH用户私钥文件已分配给SSH_KEY_FOR_ABC美元
2 在此步骤中,您可以使用语法引用凭据环境变量$ certificate_for_xyz.
$ xyz-certificate-password. 例如,在这里,您可以使用其配置的证书凭据对XYZ应用程序进行身份验证证书将密钥库文件和密码分配给变量$ certificate_for_xyz.$ xyz-certificate-password, 分别。
3. 在此管线示例中,分配给的凭据SSH_KEY_FOR_ABC美元$ certificate_for_xyz.
$ xyz-certificate-password环境变量仅在各自的范围内使用凭据(…){…}步骤,因此这些凭据变量不能在此使用例二期阶段的步骤。

为了维护这些凭据的安全性和匿名性,如果您尝试从这些内部检索这些凭据变量的值使用凭据(…){…}步骤,相同的行为秘密文本示例(上图)适用于这些SSH公共/私钥对凭证和证书变量类型。
这只降低了风险意外曝光.它不会阻止恶意用户通过其他方式捕获凭证价值。使用凭据的管道也可以披露这些凭据。不要允许不受信任的管道作业来使用可信凭据。

  • 当使用样一步字段的保证金:将凭据绑定到变量选项代码段生成器,只有您当前的管道项目/项目可以访问的凭据可以从任何凭证字段的列表。而你可以手动写使用凭据(…){…}步骤(如示例所示)以上),使用代码段生成器,以避免指定超出此管道项目/项范围的凭据,这在运行时将使步骤失败。

  • 你也可以使用代码段生成器生成使用凭据(…){…}处理机密文本、用户名、密码和机密文件的步骤。但是,如果您只需要处理这些类型的凭据,建议您使用本节中描述的相关过程以上以提高管道代码的可读性。

  • 指某东西的用途单引号代替双引号定义脚本的隐式参数上海)。单引号将导致shell将secret作为环境变量展开。双引号可能不太安全,因为这个秘密是由Groovy插入的,所以典型的操作系统进程列表会意外地泄露它:

节点{withcredentials([string(credentialsid:'mytoken',变量:'令牌')]){sh / *错误!* /“”“set + x curl -h'令牌:$ token'thtps://some.api/”“”sh / *正确* /''''''set + x curl -h'令牌:$ token'https://some.api/'''}}
在一个步骤中结合凭证

使用代码段生成器,您可以在单个中提供多个凭据使用凭据(…){…}步骤执行以下操作:

  1. 从Jenkins主必威国际有限公司页(即Jenkins's Classic UI的仪表板),单击管道项目/项目的名称。

  2. 在左侧,单击管道语法并确保了代码段生成器链接在左上角处于粗体状态。(如果没有,请单击其链接。)

  3. 来自样一步字段中,选择保证金:将凭据绑定到变量

  4. 点击添加在下面绑定

  5. 选择要添加到的凭据类型使用凭据(…){…}步骤从下拉列表。

  6. 指定凭据绑定细节。在下面的程序中阅读更多以上内容对于其他凭据类型(以上)。

  7. 重复“点击添加……”,以便将每一(套)证书添加到使用凭据(…){…}步。

  8. 点击生成管道脚本生成决赛使用凭据(…){…}一步片段。

字符串插值

必威国际有限公司Jenkins管道使用的规则与Groovy用于字符串插值。Groovy的字符串插值支持可能会对许多新人令人困惑。虽然Groovy支持用单引号或双引号声明字符串,例如:

defsinglyquoted =.'你好'def双倍引用=世界

只有后一个字符串将支持美元符号($)的字符串插值,例如:

def用户名='必威国际有限公司'回声'Hello $ {username}先生'回声我说,你好。${用户名}

将导致:

你好,$ {username}我说,你好Jenkins先生必威国际有限公司

理解如何使用字符串插值对于使用一些更高级的Pipeline特性至关重要。

敏感环境变量的插值

groovy字符串插值应该从未与凭据一起使用。

Groovy字符串插值可能会泄漏敏感环境变量(即凭据,请参阅:处理凭证).这是因为敏感的环境变量将在Groovy求值期间被插入,并且环境变量的值可能比预期的更早可用,从而导致各种上下文中的敏感数据泄漏。

例如,考虑传递给的敏感环境变量上海步。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任何环境{example_creds =凭据('示例凭据id'阶段{阶段('例子'){步骤{/*错了*/SH(卷曲-u.${example_creds_usr.}${EXAMPLE_CREDS_PSW}https://example.com/}}}}}}

Groovy应该执行插值,敏感值将被直接注入其中的参数上海步骤,其中包括其他问题,意味着字面价值将被视为对争论的争论上海在OS流程列表中的代理程序进程。当引用这些敏感环境变量时使用单引号而不是双引号可防止此类泄漏。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任何环境{example_creds =凭据('示例凭据id'阶段{阶段('例子'){步骤{/* 正确的 */SH('curl -u $ example_creds_usr:$ example_creds_psw https://example.com/'}}}}}}

通过插值注射

Groovy String插值可以通过特殊字符将Rogue命令注入命令解释器。

另一个注意事项。对用户控制的变量使用Groovy字符串插值,步骤将它们的参数传递给命令解释器,例如上海蝙蝠电源外壳,或pwsh步骤可能导致类似于SQL注入的问题。当用户控制的变量(一般是环境变量通常是传递给构建的参数)时发生这种情况(例如,/ \ $ & % ^ > < |;)被传递给了上海蝙蝠电源外壳,或pwsh使用Groovy插值的步骤。举个简单的例子:

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任何参数{String(姓名'陈述'默认值'你好;ls /'描述'我该怎么说呢?'阶段{阶段('例子'){步骤{/*错了*/SH(回声${陈述}}}}}}}

在这个例子中,对此的论点上海步骤由Groovy评估,和陈述直接插入参数,好像你好;ls/')已写在管道。当这在代理上处理时,而不是回应该值你好;ls /,它会发出回声你好然后继续列出代理的整个根目录。任何能够控制通过该步骤插值的变量的用户都可以上海步骤在代理上运行任意代码。要避免此问题,请确保参数到诸如此类步骤上海蝙蝠参考参数或其他用户控制的环境变量使用单引号来避免Groovy Interpolation。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任何参数{String(姓名'陈述'默认值'你好;ls /'描述'我该怎么说呢?'阶段{阶段('例子'){步骤{/* 正确的 */SH('echo ${语句}'}}}}}}

当使用Groovy插值将包含特殊字符的凭证传递给一个步骤时,凭证混乱是可能发生的另一个问题。当凭证值被mangled时,它将不再有效,并且不再在控制台日志中被屏蔽。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任何环境{example_key =凭据('示例凭据id'//秘密值为“秒%ret”阶段{阶段('例子'){步骤{/*错了*/蝙蝠回声${示例\u键}}}}}}

在这里,这是蝙蝠步骤收到回声交会ret %和Windows批处理shell将简单地删除并输出值秘密.因为有一个字符的差异,值秘密不会被蒙面。尽管该值与实际凭据不相同,但这仍然是敏感信息的重大暴露。单引号再次避免了这个问题。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任何环境{example_key =凭据('示例凭据id'//秘密值为“秒%ret”阶段{阶段('例子'){步骤{/* 正确的 */蝙蝠'回声% SECRET_VALUE %'}}}}}

处理参数

声明式管道支持开箱即用的参数,允许管道在运行时通过参数指令.使用脚本管道配置参数完成属性步骤,可以在Snippet Generator中找到。

如果将管道配置为接受参数使用建立与参数选项,这些参数可作为成员访问params变量。

假设名为“问候语”的字符串参数一直在配置必威国际有限公司Jenkinsfile,它可以通过$ {params.greeting}

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任何参数{String(姓名'问候'默认值'你好'描述'我该如何迎接这个世界?'阶段{阶段('例子'){步骤{echo${参数个数。问候}世界!}}}}}
切换脚本管道 (先进的)

处理失败

声明性管道支持默认情况下的强大故障处理帖子部分这允许声明许多不同的“帖子条件”,例如:总是不稳定的成功失败,及改变了.这管道语法小节提供了关于如何使用各种后置条件的更多细节。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任意阶段{阶段('测试'){步骤{sh'审核'}}}帖子{始终{JUnit'** / target / *。XML'}失败{mail: 团队@例子.com,,主题'管道失败:('}}}
切换脚本管道 (先进的)

然而,脚本化的管道依赖于Groovy的内置试一试/抓住/最后在执行管道期间处理失败的语义。

测试上面的例子,上海步骤被修改为永远不会返回非零退出代码(SH'取消||真的'). 这种方法虽然有效,但意味着需要检查以下阶段currentBuild.result来知道是否有测试失败。

另一种处理此问题的方法,它保留了管道中故障的早期退出行为,同时仍然提供junit.捕获测试报告的机会是使用一系列试一试/最后块:

使用多个代理

在前面的所有示例中,只使用了一个代理。这意味着Jenkins必威国际有限公司将在任何可用的地方分配执行器,而不管它是如何标记或配置的。不仅可以重写此行为,而且Pipeline还允许在Jenkins环境中使用多个代理必威国际有限公司相同的必威国际有限公司Jenkinsfile,这有助于更高级的用例,如跨多个平台执行构建/测试。

在下面的示例中,“构建”阶段将在一个代理上执行,并且在“测试”阶段期间,构建结果将在两个后续代理(分别标记为“linux”和“windows”)上重用。

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理无阶段{阶段('建造'){代理任何步骤{检查SCM sh'使'包括'** /目标/ *。罐子'姓名'应用程序'(1)} } 阶段('在Linux上测试') { 代理人 {(2)标签'linux'步骤{unstash'应用程序'(3)上海'审核'}post{always{junit'** / target / *。XML'}}}阶段('Windows上的测试'){代理{标签'视窗'步骤{unstash'应用程序'蝙蝠'审核'(4)}post{always{junit'** / target / *。XML'}}}}}}
切换脚本管道 (先进的)
1 步骤允许捕获与包含模式匹配的文件(** /目标/ *。罐子)用于重新使用相同的管道。一旦管道完成其执行,填补文件就会从Jenkins控制器中删除。必威国际有限公司
2 的参数代理/节点允许任何有效的Jenkins标签表达式。必威国际有限公司查阅管道语法章节以了解更多细节。
3. unstash将从Jenkins控制器检索命名的“stash”到Pipeline的当前工作空间。必威国际有限公司
4. 蝙蝠脚本允许在基于windows的平台上执行批处理脚本。

可选步骤论点

Pipeline遵循了Groovy语言的约定,即允许在方法参数周围省略圆括号。

许多管道步骤还使用命名参数语法作为在Groovy中创建映射的速写,它使用语法[键1:value1,键2:value2].制作以下功能等同的语句:

git网址'git: / / example.com/amazing-project.git'分支''吉特([网址'git: / / example.com/amazing-project.git'分支''])

为方便起见,当调用仅使用一个参数(或仅使用一个强制参数)的步骤时,可以省略参数名称,例如:

上海'echo你好'/*缩写形式*/SH([脚本'echo你好'])/* long form */

高级脚本管道

脚本化管道是一种特定于域的语言[Groovy语法可以在脚本化管道中使用而无需修改。

并行执行

的例子上面部分在线性系列的两个不同平台上运行测试。在实践中,如果审核执行需要30分钟才能完成,“测试”阶段现在需要60分钟才能完成!

幸运的是,管道拥有齐全的功能,用于并行执行脚本的流水线部分,在恰当地命名中实现平行线步。

重构上面的示例以使用平行线步:

必威国际有限公司Jenkinsfile(脚本管道)
阶段('建造') {/ * .. Snip .. * /}舞台('测试'){并行linux:{node('linux'){checkout scm试一试{unstash'应用程序'上海'审核'}最后{junit'** / target / *。XML'}}},视窗:{node('视窗') {/ * .. Snip .. * /}}}

现在,假设Jenkins环境中存在必要的容量,它们将并行执行,而不是在“linux”和“windows”标记的节点上串联执行测试。必威国际有限公司



这个页面有用吗?

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

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

是的没有


在这里.