Jenkins pipeline:pipeline 使用之语法详解

jenkins 中pipeline相关语法学习 阅读详情

一、引言

  Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature。

  简单的来说,就是把Jenkins1.0版本中,Project中的相关配置信息,如SVN/Git的配置,Parameter的配置等都变成Code,即Pipeline as Code。

  随着pipeline交付流水线在团队中的推广,使用pipeline脚本的job也迅速增加。

    优势:

    •     通过写代码的形式配置Project,且Jenkins中内置了常用的steps。
    •     实现了构建步骤代码化、构建过程视图化。

二、语法简介

  Pipeline最基本的部分是“step”。基本上,step告诉Jenkins 要做什么,并且作为Declarative Pipeline和Scripted Pipeline语法的基本构建块。 
  Pipeline支持两种语法:Declarative Pipeline(在Pipeline 2.5中引入,结构化方式)和Scripted Pipeline,两者都支持建立连续输送的Pipeline。

选择Declarative Pipeline还是Scripted Pipeline

  最开始的Pipeline plugin,支持的只有一种脚本类型,就是Scripted Pipeline;
  Declarative Pipeline为Pipeline plugin在2.5版本之后新增的一种脚本类型,与原先的Scripted Pipeline一样,都可以用来编写脚本。

  相关资料:

  https://stackoverflow.com/questions/43484979/jenkins-scripted-pipeline-or-declarative-pipeline
  http://jenkins-ci.361315.n4.nabble.com/Declarative-pipelines-vs-scripted-td4891792.html

  从检索的资料来看,Declarative Pipeline 是后续Open Blue Ocean所支持的类型。相对而言,Declarative Pipeline比较简单,Declarative Pipeline中,也是可以内嵌Scripted Pipeline代码的。

  为与BlueOcean脚本编辑器兼容,通常建议使用Declarative Pipeline的方式进行编写,从jenkins社区的动向来看,很明显这种语法结构也会是未来的趋势。

三、Declarative Pipeline

Declarative Pipeline是Jenkins Pipeline 的一个相对较新的补充, 它在Pipeline子系统之上提出了一种更为简化和有意义的语法。
所有有效的Declarative Pipeline必须包含在一个pipeline块内,例如:
pipeline { /* insert Declarative Pipeline here */ }
Declarative Pipeline中的基本语句和表达式遵循与Groovy语法相同的规则 ,但有以下例外:

  •   a.Pipeline的顶层必须是块,具体来说是:pipeline { }
  •   b.没有分号作为语句分隔符。每个声明必须在自己的一行
  •   c.块只能包含Sections, Directives, Steps或赋值语句。
  •   d.属性引用语句被视为无参方法调用。所以例如,输入被视为input()

1.Sections(章节)

  Declarative Pipeline里的Sections通常包含一个或多个Directives或 Steps

agent

  agent部分指定整个Pipeline或特定阶段将在Jenkins环境中执行的位置,具体取决于该agent 部分的放置位置。该部分必须在pipeline块内的顶层定义 ,但stage级使用是可选的。

  
  为了支持Pipeline可能拥有的各种用例,该agent部分支持几种不同类型的参数。这些参数可以应用于pipeline块的顶层,也可以应用在每个stage指令内。
参数
   any

    在任何可用的agent 上执行Pipeline或stage。例如:agent any
  none
    当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分。
  label
    使用提供的label标签,在Jenkins环境中可用的代理上执行Pipeline或stage。例如:agent { label 'my-defined-label' }
  node
    agent { node { label 'labelName' } },等同于 agent { label 'labelName' },但node允许其他选项(如customWorkspace)。
  docker
    定义此参数时,执行Pipeline或stage时会动态供应一个docker节点去接受Docker-based的Pipelines。 docker还可以接受一个args,直接传递给docker run调用。例如:agent { docker 'maven:3-alpine' }或

1
2
3
4
5
6
7
8
docker
agent {
     docker {
         image  'maven:3-alpine'
         label  'my-defined-label'
         args   '-v /tmp:/tmp'
     }
}

  dockerfile

    使用从Dockerfile源存储库中包含的容器来构建执行Pipeline或stage 。为了使用此选项,Jenkinsfile必须从Multibranch Pipeline或“Pipeline from SCM"加载。
    默认是在Dockerfile源库的根目录:agent { dockerfile true }。如果Dockerfile需在另一个目录中建立,请使用以下dir选项:agent { dockerfile { dir 'someSubDir' } }。您可以通过docker build ...使用additionalBuildArgs选项,如agent {     dockerfile { additionalBuildArgs '--build-arg foo=bar' } }。

 

参数
any
  在任何可用的agent 上执行Pipeline或stage。例如:agent any
none
  当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分。
label
  使用提供的label标签,在Jenkins环境中可用的代理上执行Pipeline或stage。例如:agent { label 'my-defined-label' }
node
  agent { node { label 'labelName' } },等同于 agent { label 'labelName' },但node允许其他选项(如customWorkspace)。
docker
  定义此参数时,执行Pipeline或stage时会动态供应一个docker节点去接受Docker-based的Pipelines。 docker还可以接受一个args,直接传递给docker run调用。例如:agent { docker 'maven:3-alpine' }或

docker
agent {
    docker {
        image 'maven:3-alpine'
        label 'my-defined-label'
        args  '-v /tmp:/tmp'
    }
}

dockerfile
使用从Dockerfile源存储库中包含的容器来构建执行Pipeline或stage 。为了使用此选项,Jenkinsfile必须从Multibranch Pipeline或“Pipeline from SCM"加载。
默认是在Dockerfile源库的根目录:agent { dockerfile true }。如果Dockerfile需在另一个目录中建立,请使用以下dir选项:agent { dockerfile { dir 'someSubDir' } }。您可以通过docker build ...使用additionalBuildArgs选项,如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }。

常用选项

这些是可以应用于两个或多个agent的选项。除非明确定义,否则不需要。
  label
    一个字符串。标记在哪里运行pipeline或stage
    此选项适用于node,docker和dockerfile,并且 node是必需的。
  customWorkspace
    一个字符串。自定义运行的工作空间内。它可以是相对路径,在这种情况下,自定义工作区将位于节点上的工作空间根目录下,也可以是绝对路径。例如:

1
2
3
4
5
6
agent {
     node {
         label  'my-defined-label'
         customWorkspace  '/some/other/path'
     }
}

  reuseNode
    一个布尔值,默认为false。如果为true,则在同一工作空间中。
    此选项适用于docker和dockerfile,并且仅在 individual stage中使用agent才有效。

1
2
3
4
5
6
7
8
9
10
11
pipeline {
     //Execute all the steps defined in this Pipeline within a newly created container of the given name and tag (maven:3-alpine).
     agent { docker  'maven:3-alpine'  }
     stages {
         stage( 'Example Build' ) {
             steps {
                 sh  'mvn -B clean verify'
             }
         }
     }
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pipeline {
     agent none
     stages {
         stage( 'Example Build' ) {
             agent { docker  'maven:3-alpine'  }
             steps {
                 echo  'Hello, Maven'
                 sh  'mvn --version'
             }
         }
         stage( 'Example Test' ) {
             agent { docker  'openjdk:8-jre'  }
             steps {
                 echo  'Hello, JDK'
                 sh  'java -version'
             }
         }
     }
}

  

post

  定义Pipeline或stage运行结束时的操作。post-condition块支持post部件:always,changed,failure,success,unstable,和aborted。这些块允许在Pipeline或stage运行结束时执行步骤,具体取决于Pipeline的状态。

  

  conditions项:
  always
    运行,无论Pipeline运行的完成状态如何。
  changed
    只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行。
  failure
    仅当当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示。
  success
    仅当当前Pipeline具有“成功”状态时才运行,通常在具有蓝色或绿色指示的Web UI中表示。
  unstable
    只有当前Pipeline具有“不稳定”状态,通常由测试失败,代码违例等引起,才能运行。通常在具有黄色指示的Web UI中表示。
  aborted
    只有当前Pipeline处于“中止”状态时,才会运行,通常是由于Pipeline被手动中止。通常在具有灰色指示的Web UI中表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pipeline {
     agent any
     stages {
         stage( 'Example' ) {
             steps {
                 echo  'Hello World'
             }
         }
     }
     post {
         always {
             echo  'I will always say Hello again!'
         }
     }
}
stages

  包含一个或多个stage的序列,Pipeline的大部分工作在此执行。建议stages至少包含至少一个stage指令,用于连接各个交付过程,如构建,测试和部署等。
  

steps

  steps包含一个或多个在stage块中执行的step序列。
  

1
2
3
4
5
6
7
8
9
10
pipeline {
     agent any
     stages {
         stage( 'Example' ) {
             steps {
                 echo  'Hello World'
             }
         }
     }
}

  

2.Directives (指令)

  environment

environment指令指定一系列键值对,这些键值对将被定义为所有step或stage-specific step的环境变量,具体取决于environment指令在Pipeline中的位置。
该指令支持一种特殊的方法credentials(),可以通过其在Jenkins环境中的标识符来访问预定义的凭据。
对于类型为“Secret Text”的凭据,该 credentials()方法将确保指定的环境变量包含Secret Text内容;对于“标准用户名和密码”类型的凭证,指定的环境变量将被设置为username:password。
  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pipeline {
     agent any
     environment {
         CC =  'clang'
     }
     stages {
         stage( 'Example' ) {
             environment {
                 AN_ACCESS_KEY = credentials( 'my-prefined-secret-text' )
             }
             steps {
                 sh  'printenv'
             }
         }
     }
}

  

options

options指令允许在Pipeline本身内配置Pipeline专用选项。Pipeline本身提供了许多选项,例如buildDiscarder,但它们也可能由插件提供,例如 timestamps。

  
可用选项

  buildDiscarder
    pipeline保持构建的最大个数。例如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }
  disableConcurrentBuilds
    不允许并行执行Pipeline,可用于防止同时访问共享资源等。例如:options { disableConcurrentBuilds() }
  skipDefaultCheckout
    默认跳过来自源代码控制的代码。例如:options { skipDefaultCheckout() }
  skipStagesAfterUnstable
    一旦构建状态进入了“Unstable”状态,就跳过此stage。例如:options { skipStagesAfterUnstable() }
  timeout
    设置Pipeline运行的超时时间。例如:options { timeout(time: 1, unit: 'HOURS') }
  retry
    失败后,重试整个Pipeline的次数。例如:options { retry(3) }
  timestamps
    预定义由Pipeline生成的所有控制台输出时间。例如:options { timestamps() }

1
2
3
4
5
6
7
8
9
10
11
12
13
pipeline {
     agent any
     options {
         timeout(time: 1, unit:  'HOURS' )
     }
     stages {
         stage( 'Example' ) {
             steps {
                 echo  'Hello World'
             }
         }
     }
} 
parameters

parameters指令提供用户在触发Pipeline时的参数列表。这些参数值通过该params对象可用于Pipeline步骤,具体用法如下

  

可用参数
  string
    A parameter of a string type, for example: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
  booleanParam
    A boolean parameter, for example: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
  目前只支持[booleanParam, choice, credentials, file, text, password, run, string]这几种参数类型,其他高级参数化类型还需等待社区支持。

1
2
3
4
5
6
7
8
9
10
11
12
13
pipeline {
     agent any
     parameters {
         string (name:  'PERSON' , defaultValue:  'Mr Jenkins' , description:  'Who should I say hello to?' )
     }
     stages {
         stage( 'Example' ) {
             steps {
                 echo  "Hello ${params.PERSON}"
             }
         }
     }
}
triggers

triggers指令定义了Pipeline自动化触发的方式。对于与源代码集成的Pipeline,如GitHub或BitBucket,triggers可能不需要基于webhook的集成也已经存在。目前只有两个可用的触发器:cron和pollSCM。

  
cron
  接受一个cron风格的字符串来定义Pipeline触发的常规间隔,例如: triggers { cron('H 4/* 0 0 1-5') }
pollSCM
  接受一个cron风格的字符串来定义Jenkins检查SCM源更改的常规间隔。如果存在新的更改,则Pipeline将被重新触发。例如:triggers { pollSCM('H 4/* 0 0 1-5') }
1
2
3
4
5
6
7
8
9
10
11
12
13
pipeline {
     agent any
     triggers {
         cron( 'H 4/* 0 0 1-5' )
     }
     stages {
         stage( 'Example' ) {
             steps {
                 echo  'Hello World'
             }
         }
     }
}
stage

 stage指令在stages部分中,应包含stop部分,可选agent部分或其他特定于stage的指令。实际上,Pipeline完成的所有实际工作都将包含在一个或多个stage指令中。

  
1
2
3
4
5
6
7
8
9
10
pipeline {
     agent any
     stages {
         stage( 'Example' ) {
             steps {
                 echo  'Hello World'
             }
         }
     }
} 
tools

 通过tools可自动安装工具,并放置环境变量到PATH。如果agent none,这将被忽略。

  
Supported Tools(Global Tool Configuration)
  maven
  jdk
  gradle

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
pipeline {
     agent any
     tools {
         //工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预配置。
         maven  'apache-maven-3.0.1'
     }
     stages {
         stage( 'Example' ) {
             steps {
                 sh  'mvn --version'
             }
         }
     }
}

  

when

  when指令允许Pipeline根据给定的条件确定是否执行该阶段。该when指令必须至少包含一个条件。如果when指令包含多个条件,则所有子条件必须为stage执行返回true。这与子条件嵌套在一个allOf条件中相同(见下面的例子)。
更复杂的条件结构可使用嵌套条件建:not,allOf或anyOf。嵌套条件可以嵌套到任意深度。

  
  内置条件
  branch
    当正在构建的分支与给出的分支模式匹配时执行,例如:when { branch 'master' }。请注意,这仅适用于多分支Pipeline。
  environment
    当指定的环境变量设置为给定值时执行,例如: when { environment name: 'DEPLOY_TO', value: 'production' }
  expression
    当指定的Groovy表达式求值为true时执行,例如: when { expression { return params.DEBUG_BUILD } }
  not
    当嵌套条件为false时执行。必须包含一个条件。例如:when { not { branch 'master' } }
  allOf
    当所有嵌套条件都为真时执行。必须至少包含一个条件。例如:when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }
  anyOf
    当至少一个嵌套条件为真时执行。必须至少包含一个条件。例如:when { anyOf { branch 'master'; branch 'staging' } }

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pipeline {
     agent any
     stages {
         stage( 'Example Build' ) {
             steps {
                 echo  'Hello World'
             }
         }
         stage( 'Example Deploy' ) {
             when {
                 allOf {
                     branch  'production'
                     environment name:  'DEPLOY_TO' , value:  'production'
                 }
             }
             steps {
                 echo  'Deploying'
             }
         }
     }
}

  

3.Parallel(并行)

Declarative Pipeline近期新增了对并行嵌套stage的支持,对耗时长,相互不存在依赖的stage可以使用此方式提升运行效率。除了parallel stage,单个parallel里的多个step也可以使用并行的方式运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
pipeline {
     agent any
     stages {
         stage( 'Non-Parallel Stage' ) {
             steps {
                 echo  'This stage will be executed first.'
             }
         }
         stage( 'Parallel Stage' ) {
             when {
                 branch  'master'
             }
             parallel {
                 stage( 'Branch A' ) {
                     agent {
                         label  "for-branch-a"
                     }
                     steps {
                         echo  "On Branch A"
                     }
                 }
                 stage( 'Branch B' ) {
                     agent {
                         label  "for-branch-b"
                     }
                     steps {
                         echo  "On Branch B"
                     }
                 }
             }
         }
     }
}

  

4.Steps(步骤)

Declarative Pipeline可以使用 Pipeline Steps reference中的所有可用步骤 ,并附加以下仅在Declarative Pipeline中支持的步骤。

script

script步骤需要一个script Pipeline,并在Declarative Pipeline中执行。对于大多数用例,script在Declarative Pipeline中的步骤不是必须的,但它可以提供一个有用的加强。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pipeline {
     agent any
     stages {
         stage( 'Example' ) {
             steps {
                 echo  'Hello World'
 
                 script {
                     def browsers = [ 'chrome' ,  'firefox' ]
                     for  ( int  i = 0; i < browsers.size(); ++i) {
                         echo  "Testing the ${browsers[i]} browser"
                     }
                 }
             }
         }
     }
}

  

四、Scripted Pipeline

  Groovy脚本不一定适合所有使用者,因此jenkins创建了Declarative pipeline,为编写Jenkins管道提供了一种更简单、更有主见的语法。但是不可否认,由于脚本化的pipeline是基于groovy的一种DSL语言,所以与Declarative pipeline相比为jenkins用户提供了更巨大的灵活性和可扩展性。

1.流程控制

  pipeline脚本同其它脚本语言一样,从上至下顺序执行,它的流程控制取决于Groovy表达式,如if/else条件语句,举例如下:

1
2
3
4
5
6
7
8
9
10
Jenkinsfile (Scripted Pipeline)
node {
     stage( 'Example' ) {
         if  (env.BRANCH_NAME ==  'master' ) {
             echo  'I only execute on the master branch'
         }  else  {
             echo  'I execute elsewhere'
         }
     }
}

  pipeline脚本流程控制的另一种方式是Groovy的异常处理机制。当任何一个步骤因各种原因而出现异常时,都必须在Groovy中使用try/catch/finally语句块进行处理,举例如下:

1
2
3
4
5
6
7
8
9
10
11
12
Jenkinsfile (Scripted Pipeline)
node {
     stage( 'Example' ) {
         try  {
             sh  'exit 1'
         }
         catch  (exc) {
             echo  'Something failed, I should sound the klaxons!'
             throw
         }
     }
}

  

2.Steps

  pipeline最核心和基本的部分就是“step”,从根本上来说,steps作为Declarative pipeline和Scripted pipeline语法的最基本的语句构建块来告诉jenkins应该执行什么操作。
Scripted pipeline没有专门将steps作为它的语法的一部分来介绍,但是在Pipeline Steps reference这篇文档中对pipeline及其插件涉及的steps做了很详细的介绍。如有需要可参考jenkins官网对该部分的介绍Pipeline Steps reference

3.Differences from plain Groovy

  由于pipeline的一些个性化需求,比如在重新启动jenkins后要求pipeline脚本仍然可以运行,那么pipeline脚本必须将相关数据做序列化,然而这一点 Groovy并不能完美的支持,例如collection.each { item -> /* perform operation */ }

4.Declarative pipeline和Scripted pipeline的比较

共同点:
  两者都是pipeline代码的持久实现,都能够使用pipeline内置的插件或者插件提供的steps,两者都可以利用共享库扩展。
区别:
  两者不同之处在于语法和灵活性。Declarative pipeline对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,使其成为用户更理想的选择。但是Scripted pipeline更加灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。

Jenkins-Pipeline语法篇- Pipeline指令 Jenkins Pipeline 语法分类 Jenkins Pipeline 支持两种语法,一种 Declarative Pipeline(声明式),一种 ScriptedPipeline(脚本式)。 声明式的 Pipeline 限制用户使用严格的预选定义的结构,是一种声明式的编程模型,对比脚本式的 Pipeline 学习起来更加简单; 脚本式的 Pipeline 限制比较少,结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。 所以使用声明式的方式编写 jenkinsfil 阅读详情

相关推荐

深入解析Incapsula reese84的生成机制与绕过策略

本文深入解析了Incapsula reese84的生成机制与绕过策略。reese84是一种基于客户端JavaScript挑战的Web安全防护,通过动态算法收集浏览器指纹并生成令牌Cookie。文章详细拆解了其两步验证流程,并提供了使用无头浏览器、逆向JS模拟请求以及Token维护等实战绕过方法,帮助开发者和安全研究人员应对自动化访问拦截。

weixin_29256771的博客 443

JenkinsPipeline一指禅

JenkinsPipeline一指禅 1. 定义一个简单的pipeline 相关细节看脚本注释 运行结果如下 2. pipeline中设置参数 3.加入条件判断 4. 设置post steps 设置不同的pipeline结果执行不同的post步骤,顺带描述一下pipeline中的if/else 5. checkbox参数 比如,有时候需要同一个pipeline中管理多个module的情况,并且根据不同的情况选择deploy不同的module,再比如不同的情况下需要deploy不同的site,这个时

阿尔泰野狼的博客 968

全双工AI语音交互:从原理到实践,构建实时对话系统

语音交互技术正从传统的半双工模式向全双工模式演进,以实现更自然、实时的对话体验。全双工交互的核心原理在于模拟人类电话通话,允许双方同时发送和接收音频流,这需要流式语音识别(Streaming ASR)和实时自然语言理解(Real-time NLU)技术的深度整合。其技术价值在于显著降低交互延迟,支持智能打断(Barge-in),从而提升人机对话的流畅度和自然度。在应用场景上,全双工技术是智能助手、实时翻译、车载语音及无障碍交互等领域的关键突破。本文以微软MAI Realtime等模型为例,探讨如何利用开源技

weixin_33693070的博客 404

Pipeline语法

Pipeline 是一种用于自动化软件开发过程的工具,通常用于持续集成/持续交付 (CI/CD) 环境中。它的作用是将开发、测试、构建、部署等步骤自动化,从而提高效率并减少人为错误。

Lzcsfg的博客 1364

U-net复现pytorch版本 以及制作自己的数据集并训练

GitHub链接: https://github.com/milesial/Pytorch-UNet 论文链接:

candice5566的博客 3万+

CANoe诊断测试避坑指南:DTC故障注入与ECU刷写失败的N个常见原因排查

本文深入解析CANoe诊断测试中的常见问题,重点探讨DTC故障注入与ECU刷写失败的排查策略。从会话管理、安全访问到数据完整性校验,提供实战经验与CAPL脚本示例,帮助工程师规避诊断测试中的典型陷阱,提升车载网络通信与ECU刷写的可靠性。

weixin_29278805的博客 462

Jenkins Pipeline语法

<p><img src="https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20220419081406065.png" alt="im

weixin_39246554的博客 4524

HFSS微带线仿真从零到一:材料参数与求解设置优化指南

在射频电路设计中,微带线仿真涉及电磁场求解与传输线理论,其精度高度依赖材料参数和求解设置。相对介电常数、损耗角正切和导体电导率等参数直接影响特性阻抗与插入损耗,而求解频率、网格划分和参数扫描则决定仿真效率与收敛性。合理设置这些参数可显著提升S参数准确性,避免设计迭代。应用场景包括天线馈线、滤波器和微波互连。本文基于HFSS微带线仿真实践,系统讲解材料选择与参数优化全链路,帮助工程师快速复现可靠模型。

weixin_29192211的博客 79

jenkins基础

声明性限制了用户具有更严格和预定义结构的可用性,使其成为更简单连续输送Pipeline的理想选择。 脚本化提供了极少的限制,因为Groovy本身只能对结构和语法进行限制,而不是任何Pipeline专用系统。 顾名思义,Declarative Pipeline鼓励声明式编程模型。尽管Scripted Pipeline遵循更命令性的编程模型。 1、 声明式 VS 脚本式 steps 声明式特点: 1.最外层必须由pipline{ //do something }来进...

weixin_36013896的博客 1298

什么是论文的创新点?公式化描述算是创新点吗?

写科研论文时,挑战之一就是如何让你的工作“脱颖而出”,也就是要有创新性。不管实验多么精确、推导多么复杂,若没有真正的创新,论文很可能会被拒。关于如何创新问题上,我最近在看刘雪峰老师的《科技论文写作指南》,看到了很多关于写作的新论述,在这里和大家进行分享。

加百力 的技术博客 1926

【编译原理】龙书第三章作业答案

【编译原理】龙书第三章作业答案 练习3.1.1:根据3.1.2节中的讨论,将下面的C++程序划分成正确的词素序列。哪些词素应该有相关联的词法值?应该具有什么值? 答案: 左列为词素,右列为值,划分如下: < float> 值为它本身 <id,limitedSquare> 值为*limitedSquare指针 <(> 标点符号无值 ...

作业报告杂物间 2万+

jenkins流水线之pipeline入门

目录pipeline学习脑图一、pipeline基本介绍1、pipeline是什么2、语法类型二、语法说明三、pipeline实际应用jenkins2.x开始流行pipeline(groovy语言编写)的写法,目的是通过以代码的方式来进行job的构建,减少人工操作导致的人为出错。它是用于描述整条流水线是如何进行,流水线的内容一般包括执行编译、打包、测试、部署及告警通知等步骤。pipeline有两种语法类型,分别是声明式pipeline和脚本式2.1 声明式pipeline 字段说明agent : any

manwufeilong的博客 5098

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

Jenkins Pipeline 语法

Jenkins 的 Pipeline 语法 主要有两种:Declarative Pipeline(声明式语法)Scripted Pipeline(脚本式语法)######装 Pipeline(workflow-aggregator)插件######官网:管道语法。

既是练习也是学习 1317

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【Jenkis】Jenkins Pipeline 语法

Jenkins2.x 的核心是使用 pipeline 来构建项目,也就是流水线,将 Jenkins1.0 版本中基于表单的配置信息比如 JDK/SVN 以及参数的配置都转变成了代码,即 pipeline as Code。而采用 pipeline 的方式,项目的所有流程和配置都写在 Jenkinsfile 文件中,移植时只要将此文件拷贝即可,无须繁琐的配置;而且 pipeline 可以很直观的看到每个阶段的构建情况,再结合上 Blue Ocean 可以进行强大的流水线监控,方便、直观、及时地获取到构建结果。

专注于技术分享的博主 1489

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Jenkins pipeline语法笔记

Jenkins pipeline (流水线)是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。它把持续提交流水线(Continuous Delivery Pipeline)的任务集成到Jenkins中。pipeline 是jenkins2.X 最核心的特性, 帮助jenkins 实现从CI到CD与DevOps的转变。

weixin_43258559的博客 1709

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Jenkins的使用及Pipeline语法讲解

Jenkins的使用及Pipeline语法讲解

weixin_46619605的博客 1969

jenkins pipeline post语法

具体的代码实现,可以放在别的包里面。一些条件后 的块的内支持 post:部分 always,changed,failure,success,unstable,和 aborted。在 post 代码块区域,支持多种条件指令,这些指令有 always,changed,failure,success,unstable,和 aborted。这个 failure 条件一般来说,百分百会写到 Pipeline 代码中,内容无非就是发邮件通知,或者发微信群,钉钉机器人,还有国外的 slack 聊天群组等。

LoveSummer 1461

jenkins pipeline语法详解

详细说明了jenkins pipeline的语法结构和常用命令

alittleyatou的博客 1453

jenkins-pipeline语法详解 最新最全 (声明式Pipeline和脚本式)

pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。

zero_open的博客 1万+

Jenkins-pipeline语法

Pipeline是将一个命令/程序/进程的输出发送到另一个命令/程序/进程,进行进一步处理 Pipeline的代码定义了整个构建过程声明式的pipeline语法格式 所有的声明都必须包含在pipeline{}中 块只能有节段,指令,步骤或者赋值语句组成 节段:agent,stages,post,steps 指令:environment,options,parameters,triggers,stage,input,tool,when 创建一个简单的pipeline项目 新建一个item,选择“Pipelin

ljsykf的博客 4325

jenkins —— pipeline基础语法与示例

Pipeline1.Pipeline 是Jenkins 2.X核心特性,帮助Jenkins实现从CI到CD与DevOps的转变2.Pipeline 简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。1.Jenkins Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施。2.持续交付管道(CD Pipeline)是将软件从版本控制阶段到交付给用户或客户的完。

m0_64706429的博客 983

Jenkins pipeline语法详解

一、引言   Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature。   简单的来说,就是把Jenkins1.0版本中,Project中的相关配置信息,如SVN/Git的配置,Parameter的配置等都变成Code,即Pipeline as Code。   随着pipeline交付流水线在团队中的推广,使用pipeline脚本的job也迅速增加。   优势:     通过写代码的形式配置Project,且Jenkins中

Be_Nice的博客 1383
上一篇: Fabric8使用说明
下一篇: jenkins2 pipeline高级
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值