使用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,并且应该仅考虑基本报告和文件档案。

测试

运行自动化测试是任何成功的连续交付过程的重要组成部分。因此,Jenkin必威国际有限公司s拥有多个测试记录,报告和可视化设施插件数量.在基本的层面上,当出现测试失败时,让Jenkins记录失败是很有用的,以便在web UI中报告和可视化。必威国际有限公司下面的示例使用junit.步骤,由JUNIT插件

在下面的例子中,如果测试失败,管道就会被标记为“不稳定”,在web UI中用一个黄色的球表示。Jenkins还可以根据记录的测试报告提供历史趋势分析和可视化。必威国际有限公司

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

部署

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

在示例Pipeline的这个阶段,“构建”和“测试”阶段都已成功执行。本质上,“部署”阶段只会在前几个阶段成功完成的情况下执行,否则管道会提前退出。

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

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

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

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

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

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

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

使用环境变量

必威国际有限公司Jenkins Pipeline通过全局变量公开环境变量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文件等,以便更轻松地识别

build_url.

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

executor_number.

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

java_home.

如果您的作业配置为使用特定的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”。

node_name.

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

工作区

工作区的绝对路径

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

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

设置环境变量

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

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

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理任何环境{(1)CC =阶段{阶段(例子) { 环境 {(2)debug_flags =- g}步骤{shprintenv}}}}}
切换脚本管道 (先进的)
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}步骤{shprintenv}}}}}
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_ACCESS_KEY_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 在这个管道示例中,分配给这两个人的凭据aws_ ...对于整个Pipeline,环境变量的作用域是全局的,因此这些凭据变量也可以在本阶段的步骤中使用。但是,如果环境这个管道中的指令被移动到一个特定的阶段(如用户名和密码管道示例下面),然后是这些aws_ ...环境变量只会在该阶段中的步骤范围。
用户名和密码

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

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

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

BITBUCKET_COMMON_CREDS =证书(必威国际有限公司Jenkins-Bitbucket-Common-Creds)}

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

  • bitbucket_common_creds.- 包含由格式分隔的用户名和密码用户名:密码

  • bitbucket_common_creds_usr.- 仅包含用户名组件的附加变量。

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

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

下面的代码片段完整地展示了示例Pipeline:

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理{//在这里定义代理的细节阶段{阶段(示例阶段1) {environment {BITBUCKET_COMMON_CREDS =凭据(必威国际有限公司Jenkins-Bitbucket-Common-Creds)}步骤{//(1)} } 阶段(例二期){步骤{//(2)}}}}}
1 以下凭据环境变量(在此管道的环境指令)在此阶段的步骤中可用,可以使用语法引用:
  • $ bitbucket_common_creeds.

  • $ 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/.必威国际有限公司jenkins/workspace/cred_test@tmp/secretfiles/546a5cf3-9b56-4165-a0fd-19e2afe6b31f/kubeconfig.txt.txt.MY_KUBECONFIG =凭证(我的kubeconfig阶段{阶段(示例阶段1){步骤{sh(kubectl --kubeconfigMY_KUBECONFIG得到豆荚)}}}}

对于其他凭据类型

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

访问片段发电机对于您的管道项目/项目:

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

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

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

  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, \keyFileVariablessh_key_for_abc., \passphrasevariable., \usernameVariable)]){/ /一些块

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

证书的例子

承担信守(绑定:【证书(aliasVariable, \CredienceSid.必威国际有限公司jenkins-certificate-for-xyz, \keystorevariable.certificate_for_xyz., \passwordVariableXYZ-CERTIFICATE-PASSWORD)]){/ /一些块

可选aliasVariablepasswordVariable变量定义可以在最终的Pipeline代码中删除。

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

必威国际有限公司Jenkinsfile(声明式管道)
管道{代理{//定义代理细节阶段{阶段(示例阶段1){步骤{withcrientials(绑定:[sshuserprivatekey(CredienceSid.必威国际有限公司Jenkins-Ssh-key-for-abc, \keyFileVariablessh_key_for_abc.)]){//(1)坚持信(绑定:【证书(CredienceSid.必威国际有限公司jenkins-certificate-for-xyz, \keystorevariable.certificate_for_xyz., \passwordVariableXYZ-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公共/私钥对凭证和证书变量类型。
这只会降低意外接触.它不会阻止恶意用户通过其他方式捕获凭证价值。使用凭据的管道也可以披露这些凭据。不要允许不受信任的管道作业来使用可信凭据。

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

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

  • 指某东西的用途单引号而不是双引号定义脚本的隐式参数上海)。单引号将导致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. 来自样一步字段中,选择withCredentials:将凭证绑定到变量

  4. 点击添加在下面绑定

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

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

  7. 重复“点击添加……”,以便将每一(套)证书添加到被信守(...){...}步。

  8. 点击生成管道脚本生成最终的被信守(...){...}一步片段。

字符串插值

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

defsinglyquoted =你好def双排Q.世界

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

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

将导致:

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

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

敏感环境变量的插值

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

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

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

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

Groovy应该执行插值,敏感值将被直接注入其中的参数上海的参数,这意味着文本值将作为参数可见上海在OS流程列表中的代理程序进程。当引用这些敏感环境变量时使用单引号而不是双引号可防止此类泄漏。

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

注入通过插值

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

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

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

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

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

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

必威国际有限公司Jenkinsfile(声明式管道)
{代理任何环境{EXAMPLE_KEY =凭据(example-credentials-id//秘密值是'秒%Ret'阶段{阶段(例子){步骤{/* 错误的!* /蝙蝠回声$ {example_key.}}}}}

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

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

处理参数

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

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

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

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

处理失败

声明式管道默认通过其支持健壮的故障处理文章部分这允许声明许多不同的“帖子条件”,例如:总是不稳定成功失败, 和改变了.的管道语法小节提供了关于如何使用各种后置条件的更多细节。

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

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

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

处理这一点的另一种方法,它保留了管道中失败的早期退出行为,同时仍在给予junit.捕获测试报告的机会是使用一系列试一试/最后块:

使用多个代理

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

在下面的示例中,“构建”阶段将在一个代理上执行,内部结果将分别在两个后续代理中重复使用,标记为“Linux”和“Windows”,在“测试”阶段。

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

可选步骤论点

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

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

gitURL.git: / / example.com/amazing-project.git分支git([URL.git: / / example.com/amazing-project.git分支])

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

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

高级脚本管道

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

并行执行

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

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

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

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

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



这个页面有用吗?

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

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

是的没有


在这里.