Jenkins扩展篇-流水线脚本语法

JenkinsFile可以通过两种语法来声明流水线结构,一种是声明式语法,另一种是脚本式语法。

脚本式语法以Groovy语言为基础,语法结构同Groovy相同。

由于Groovy学习不适合所有初学者,所以Jenkins团队为编写Jenkins流水线提供一种更简单、更有主见的语法-声明式。

两者本质上是相同的流水线子系统。即他们都是 “流水线即代码” 的持久实现,都能够使用构建到流水线中或插件提供的步骤,都能够使用 共享库

但是它们的区别在于语法和灵活性。声明式限制了用户使用更严格和预定义的结构, 但是略显繁琐。脚本化提供了很少的限制, 以至于对脚本和语法的唯一限制往往是由Groovy子集本身定义的,而不是任何特定于流水线的系统, 这也使得脚本式语法成为高级用户和那些有更复杂需求的人的理想选择。

脚本式语法

流水线脚本结构

node{
stage('Build'){
checkout scm
echo 'start build'
}
stage('Test'){
echo 'start test'
}
stage('Deploy'){
echo 'start deploy'
}
}

Node(节点): 一个 Node 就是一个 Jenkins 节点,或者是 Master,或者是 Agent,是执行 Step 的具体运行环境,Pipeline 执行中的大部分工作都是在一个或多个声明 Node 步骤的上下文中完成的。如果不指定参数,则默认在master节点运行job

Stage(环节): 一个 Pipeline 可以从逻辑上划分为若干个 Stage,每个 Stage 代表一组操作,如:Build、Test、Deploy。注意,Stage 是一个逻辑分组的概念,可以跨多个 Node。即,一个stage语句块可以包含node,表示不同的节点执行响应的任务步骤。

Step(步骤): Step 是最基本的操作单元,小到执行一个 Shell 脚本,大到构建一个 Docker 镜像,由各类 Jenkins 插件提供,当插件扩展Pipeline DSL 时,通常意味着插件已经实现了一个新的步骤。

另外在 Jenkins Pipeline 中定义的 Stage(各个阶段的逻辑划分),Jenkins 提供了 Stage View 插件,按照 Stage 逻辑划分任务,对用户透明化、可视化展示流水线的执行,如下图:

图片

基本语法

脚本式语法遵从Groovy脚本语言设计,常见的Groovy语法都可以用到流水线脚本中

内置函数

有很多特殊的Step用于pipeline脚本中,如前面提到的node或stage。下面列出一些在你当前插件集合中所有可以用到的step。其他插件提供的pipeline集成功能可以通过更新插件做到。

通常Step 的参数是以键值对形式传递的,但是如果此步骤只有一个必填参数,那么可以省略参数名,如:

readFile 'build.properties'

是下面这种方式的简写

readFile file: 'build.properties'

但是如果有多个必填参数,那么参数名必须指定:

readFile file: 'build.properties', encoding: 'ISO-8859-1'

参数直接用逗号隔开

许多步骤的参数会用到复杂的嵌套配置(一些嵌套配置对象反过来有对象类型的参数),下面列出三种方式指定嵌套对象,按照优先级排列。

1.一些配置对象定义自定义符号。这些用于表示步进调用的符号,或者使用命名参数映射的其他函数调用:

splitTests count(3)

或拼出强制性参数名称:

splitTests parallelism: count(size: 3)

与使用旧的第二语法选项的等效项比较:

splitTests parallelism: [$class: 'CountDrivenParallelism', size: 3]

委托给单个对象的某些Pipeline步骤允许在明确的情况下省略实际的步骤名称,因此您可以简单地编写:

archiveArtifacts '**.txt'

而不是:

step([$class: 'ArtifactArchiver', artifacts: '**.txt'])

嵌套配置是一个实际值,可以保存到变量等中:

def parallelism(deterministic) {
deterministic ? count(3) : time(15)
}
splitTests parallelism(true)

2.使用参数的键值对。可以省略默认值。(注意,这[1, 2, 3]是Groovy中的列表,而是[a: 1, b: 2, c: 3]字典。)

特殊映射键c l a s s 用于表示所请求对象的简单或(必要时)完全限定类名。如果包含的参数只允许一种嵌套对象(或列表),则 class用于表示所请求对象的简单或(必要时)完全限定类名。如果包含的参数只允许一种嵌套对象(或列表),则class用于表示所请求对象的简单或(必要时)完全限定类名。如果包含的参数只允许一种嵌套对象(或列表),则class可以省略:

checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'git://…'], extensions: [[$class: 'CleanBeforeCheckout']]])

在这个例子中,GitSCM必须指定来区分的种类SCM所使用的delegate的checkout (单强制参数名称delegate可省略);

并且CleanBeforeCheckout必须被指定来区分不同类别的GitSCMExtension由所使用extensions的GitSCM-a“异质”列表;

但$class: 'UserRemoteConfig’由于可以省略userRemoteConfigs的GitSCM被定义为只包含UserRemoteConfigS-它是一个“均匀的”列表。(在第一种语法中,同类列表不允许有这样的遗漏。)

请注意,如果给出单个参数,省略名称,并且该参数是映射,则必须将其括在括号中以避免语法歧义。

3使用Java对象:

import hudson.plugins.git。*
import hudson.plugins.git.extensions.impl。*
checkout(new GitSCM([new UserRemoteConfig('git:// ...',null,null,null)],null,false,[],null,null,[new CleanBeforeCheckout()]))

除了细节程度更深入Groovy语法,这些脚本如果没有签名批准通过则无法在Groovy沙箱中运行,这使得此模式在典型的安全Jenkins中无法运行。

代码生成器

在流水线任务的主页面有一个pipeline语法菜单,点击进入可以生成常用的语法

图片

选择下拉框里面的示例步骤,可以选择你需要的step,如读取文件,填入相关参数点击生成流水线脚本,再把生成的流水脚本复制到你的pipeline脚本中即可。

图片

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

Jenkins流水线有两种语法,分别是声明流水线脚本流水线。 声明流水线Jenkins流水线的核心语法之一。它采用了更简单、更有主见的语法来编写Jenkins流水线。在声明流水线中,流水线定义被放置在一个外层的pipeline块中,而步骤则被定义在stage块中。通过使用不同的指令和参数,您可以定义不同的阶段和步骤,以构建和部署您的应用程序。 脚本流水线Jenkins流水线的另一种语法。它提供了一个功能丰富的编程环境,使用Groovy脚本来编写Jenkins流水线脚本流水线提供了更大的灵活性和可扩展性,但也需要对Groovy编程有一定的了解。 在Jenkins流水线中,步骤是流水线的基本构建块,它告诉Jenkins要做什么。您可以使用各种内置的步骤来执行不同的任务,例如构建代码、运行测试、部署应用程序等。在声明流水线中,步骤可以通过stage块来定义,在脚本流水线中,则可以直接在Groovy脚本中编写步骤。 总结来说,Jenkins流水线的基本语法包括声明流水线脚本流水线。声明流水线采用更简单、更有主见的语法,而脚本流水线提供了更大的灵活性和可扩展性。无论选择哪种语法,步骤都是构建流水线的基本单位。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [2.2 Jenkins流水线语法](https://blog.csdn.net/hackermmm/article/details/106140519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Jenkins 流水线语法](https://blog.csdn.net/wadeltf/article/details/90287339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值