iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Pipeline脚本式与声明式语法差异有哪些
  • 735
分享到

Pipeline脚本式与声明式语法差异有哪些

2024-04-02 19:04:59 735人浏览 八月长安
摘要

这篇文章主要讲解了“Pipeline脚本式与声明式语法差异有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pipeline脚本式与声明式语法差异有哪些”

这篇文章主要讲解了“Pipeline脚本式与声明式语法差异有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pipeline脚本式与声明式语法差异有哪些”吧!

为什么要有两种管道类型?

  • 脚本化管道是jenkins中作为代码的管道的第一个实现。即使它使用底层的管道子系统,它还是或多或少地设计为使用Groovy构建的通用DSL。这意味着它不具有固定的结构,并且由您决定如何定义管道逻辑。

  • 声明性管道更自以为是,其结构是明确定义的。可能看起来有些局限。

但实际上,您可以使用脚本化或声明性管道来实现相同的目的。那么选择哪一个呢?如果您问我这个问题,我会说使用声明性管道。以下内容这就是为什么。

1.管道启动时的代码验证

pipeline {     agent any      stages {         stage("Build") {             steps {                 echo "Some code compilation here..."             }         }          stage("Test") {             steps {                 echo "Some tests execution here..."                 echo 1             }         }     } }

如果我们尝试运行以下管道,则验证将很快使构建失败。该日志显示只能与触发String参数,所以我们得到这样的错误。

Pipeline脚本式与声明式语法差异有哪些

请注意,管道没有执行任何阶段,只是失败了。这可能为我们节省了很多时间-想象一下执行Build阶段几分钟,而只是获取echo步骤希望得到的信息java.lang.String而不是java.lang.Integer

现在,让我们看一下与该示例等效的脚本管道。

node {     stage("Build") {         echo "Some code compilation here..."     }      stage("Test") {         echo "Some tests execution here..."         echo 1     } }

该管道执行相同的阶段和相同的步骤。但是,有一个明显的区别。让我们执行它,看看它产生什么结果。

Pipeline脚本式与声明式语法差异有哪些

它按预期失败。但是这次是执行Build阶段,也是Test阶段的第一步。如您所见,没有验证管道代码。在这种情况下,声明式管道可以更好地处理此类用例。

2.从指定步骤重新开始

声明式管道具有的另一个很酷的功能是“从阶段重新启动”。让我们修复上一个示例中的管道,看看是否只能重新启动Test阶段。

pipeline {     agent any      stages {         stage("Build") {             steps {                 echo "Some code compilation here..."             }         }          stage("Test") {             steps {                 echo "Some tests execution here..."             }         }     } }

让我们执行它。

Pipeline脚本式与声明式语法差异有哪些

在这里您可以看到已选择测试阶段。在右侧的步骤列表上方,有一个名为“重新启动测试”的选项。让我们单击它并查看结果。

Pipeline脚本式与声明式语法差异有哪些

如您所见,Jenkins跳过了Build阶段(它使用了先前构建中的工作空间),并从Test阶段开始了下一个管道执行。当您执行一些外部测试并且由于远程环境的某些问题而导致测试失败时,这可能会很有用。您可以使用测试环境解决问题,然后重新运行该阶段,而无需重建所有工件。(在这种情况下,应用程序的代码未更改。)

现在,让我们看一下脚本化管道示例。

node {     stage("Build") {         echo "Some code compilation here..."     }      stage("Test") {         echo "Some tests execution here..."     } }

 Pipeline脚本式与声明式语法差异有哪些

如您所见,没有重新启动选项。声明式管道与脚本式管道-2:0。

3.声明式管道options块

两种管道类型都支持第三个功能,但是我认为声明性管道更好地处理了它。假设我们将以下功能添加到上一个管道中。

  • 控制台日志中的时间戳。

  • ANSI颜色输出。

  • 在1分钟的超时构建阶段,2分钟超时的测试阶段。

声明式管道如下所示。

pipeline {     agent any      options {         timestamps()         ansiColor("xterm")     }      stages {         stage("Build") {             options {                 timeout(time: 1, unit: "MINUTES")             }             steps {                 sh 'printf "\\e[31mSome code compilation here...\\e[0m\\n"'             }         }          stage("Test") {             options {                 timeout(time: 2, unit: "MINUTES")             }             steps {                 sh 'printf "\\e[31mSome tests execution here...\\e[0m\\n"'             }         }     } }

让我们运行它。

Pipeline脚本式与声明式语法差异有哪些

这是控制台日志。

Started by user Szymon Stepniak Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline [Pipeline] node Running on Jenkins in /home/wololock/.jenkins/workspace/pipeline-sandbox [Pipeline] { [Pipeline] timestamps [Pipeline] { [Pipeline] ansiColor [Pipeline] { [Pipeline] stage [Pipeline] { (Build) [Pipeline] timeout 15:10:04  Timeout set to expire in 1 min 0 sec [Pipeline] { [Pipeline] sh 15:10:04  + printf '\e[31mSome code compilation here...\e[0m\n' 15:10:04  Some code compilation here... [Pipeline] } [Pipeline] // timeout [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Test) [Pipeline] timeout 15:10:04  Timeout set to expire in 2 min 0 sec [Pipeline] { [Pipeline] sh 15:10:05  + printf '\e[31mSome tests execution here...\e[0m\n' 15:10:05  Some tests execution here... [Pipeline] } [Pipeline] // timeout [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // ansiColor [Pipeline] } [Pipeline] // timestamps [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS

在声明性管道中,选项与管道脚本逻辑分开。该脚本管道也支持timestamps,ansiColor和timeout选项,但它需要一个不同的代码。这是使用脚本化管道表达的相同管道。

node {     timestamps {         ansiColor("xterm") {             stage("Build") {                 timeout(time: 1, unit: "MINUTES") {                     sh 'printf "\\e[31mSome code compilation here...\\e[0m\\n"'                 }             }             stage("Test") {                 timeout(time: 2, unit: "MINUTES") {                     sh 'printf "\\e[31mSome tests execution here...\\e[0m\\n"'                 }             }         }     } }

我想你看到了问题。在这里,我们仅使用timestamps和ansiColorJenkins插件。想象再添加一个或两个插件。声明式与脚本式,3:0。

4.用when块跳过阶段。

在此博客文章中我最后要提到的是when声明性管道支持的块。让我们改进前面的示例并添加以下条件:

  • 仅在等于时执行测试阶段。env.FOO``bar

这是声明性管道代码的外观。

pipeline {     agent any      options {         timestamps()         ansiColor("xterm")     }      stages {         stage("Build") {             options {                 timeout(time: 1, unit: "MINUTES")             }             steps {                 sh 'printf "\\e[31mSome code compilation here...\\e[0m\\n"'             }         }          stage("Test") {             when {                 environment name: "FOO", value: "bar"             }             options {                 timeout(time: 2, unit: "MINUTES")             }             steps {                 sh 'printf "\\e[31mSome tests execution here...\\e[0m\\n"'             }         }     } }

然后执行它。

Pipeline脚本式与声明式语法差异有哪些

该测试如预期阶段被跳过。现在,让我们尝试在脚本化管道示例中执行相同的操作。

node {     timestamps {         ansiColor("xterm") {             stage("Build") {                 timeout(time: 1, unit: "MINUTES") {                     sh 'printf "\\e[31mSome code compilation here...\\e[0m\\n"'                 }             }             if (env.FOO == "bar") {                 stage("Test") {                     timeout(time: 2, unit: "MINUTES") {                         sh 'printf "\\e[31mSome tests execution here...\\e[0m\\n"'                     }                 }             }         }     } }

如您所见,我们必须使用if-condition来检查是否env.FOO等于bar,然后才添加Test阶段。(不幸的是,这并不是真正的跳过。)让我们运行它,看看结果如何。

Pipeline脚本式与声明式语法差异有哪些

这是不同的结果。在脚本化管道用例中,甚至不会呈现“  测试”阶段。在我看来,这可能会带来一些不必要的混乱,声明性管道会更好地处理它。声明式与脚本式,4:0。

感谢各位的阅读,以上就是“Pipeline脚本式与声明式语法差异有哪些”的内容了,经过本文的学习后,相信大家对Pipeline脚本式与声明式语法差异有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Pipeline脚本式与声明式语法差异有哪些

本文链接: https://www.lsjlt.com/news/84059.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Pipeline脚本式与声明式语法差异有哪些
    这篇文章主要讲解了“Pipeline脚本式与声明式语法差异有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pipeline脚本式与声明式语法差异有哪些”...
    99+
    2024-04-02
  • 声明Flex CSS样式的基本方法有哪些
    本篇内容介绍了“声明Flex CSS样式的基本方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Flex内的CSS首先,对于具有Web...
    99+
    2023-06-17
  • shell声明数组的方式有哪些
    在 shell 中,声明数组的方式主要有以下几种:1、使用小括号可以使用小括号来声明数组,例如:```shellarr=(1 2 3...
    99+
    2023-05-13
    shell声明数组 shell
  • java声明变量的方式有哪些
    在Java中,声明变量的方式有以下几种: 声明并初始化变量: int age = 20; String name = "...
    99+
    2024-03-13
    java
  • java声明数组的方式有哪些
    在Java中,声明数组的方式有以下几种:1. 声明数组并指定长度:   ```   int[] array = ...
    99+
    2023-08-30
    java
  • Spring IOC的bean声明方式有哪些
    本篇内容主要讲解“Spring IOC的bean声明方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC的bean声明方式有哪些”吧!  Spring简介  Spring...
    99+
    2023-06-02
  • java的数组声明方式有哪些
    在Java中,有以下几种方式可以声明数组:1. 声明数组并分配内存空间:```javaint[] array = new int[5...
    99+
    2023-08-12
    java
  • PHP常量的声明方式有哪些
    在PHP中声明常量的方法有以下几种使用const函数声明常量class CL{ //定义常量 const CLS = '常量值'; function a(){ //调用常量方法 echo self::CLS; } } (new CL)->a...
    99+
    2024-04-02
  • MySQL与Oracle SQL语言差异有哪些
    小编给大家分享一下MySQL与Oracle SQL语言差异有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据类型编号ORA...
    99+
    2024-04-02
  • JavaScript命令式和声明式代码有哪些区别
    这篇文章主要介绍“JavaScript命令式和声明式代码有哪些区别”,在日常操作中,相信很多人在JavaScript命令式和声明式代码有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2024-04-02
  • java中声明数组的方式有哪些
    在Java中,声明数组的方式有以下几种:1. 声明一个数组变量,但不初始化数组:    ```   &...
    99+
    2023-08-30
    java
  • 有哪些csh脚本语法
    这篇文章主要介绍“有哪些csh脚本语法”,在日常操作中,相信很多人在有哪些csh脚本语法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些csh脚本语法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!cs...
    99+
    2023-06-09
  • MySQL常见的脚本语句格式有哪些
    这篇文章主要介绍“MySQL常见的脚本语句格式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL常见的脚本语句格式有哪些”文章能帮助大家解决问题。表整体(TABLE )操作针对数据库的表...
    99+
    2023-07-02
  • Angular入口组件与声明式组件的区别有哪些
    小编给大家分享一下Angular入口组件与声明式组件的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言组件是Angu...
    99+
    2024-04-02
  • 从python2.7和python3.0的语法差异有哪些
    本篇内容介绍了“从python2.7和python3.0的语法差异有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、基本语法pytho...
    99+
    2023-06-04
  • jquery和javascript在语法上有哪些差异
    这篇文章主要介绍“jquery和javascript在语法上有哪些差异”,在日常操作中,相信很多人在jquery和javascript在语法上有哪些差异问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操...
    99+
    2024-04-02
  • C语言中定义与声明有哪些区别
    目录一、变量的声明与定义二、函数的声明与定义三、总结一、变量的声明与定义 首先,举个简单的例子: int a; extern int b; 这里的两个变量,哪个是声明?哪个是定义?...
    99+
    2024-04-02
  • vue-cli@3.0使用方式和之前版本的差异有哪些
    这篇文章主要为大家展示了“vue-cli@3.0使用方式和之前版本的差异有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue-cli@3.0使用方式和之前...
    99+
    2024-04-02
  • c语言函数声明的方法有哪些
    在C语言中,函数声明的方法有以下几种:1. 在函数使用之前,将函数的原型放在函数调用之前。例如:```cint add(int a,...
    99+
    2023-08-08
    c语言
  • JavaScript脚本加载的方式有哪些
    这篇文章主要为大家展示了“JavaScript脚本加载的方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript脚本加载的方式有哪些”这篇文...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作