目录

声明性pipeline

Sections

agent

pipeline与stage中的不同

参数

常用选项

发布 post

stages

steps

Directives

environment

options

可用选项

stage options

parameters

可用参数

triggers

stage

tools

input

when

顺序执行的stage(Sequential Stages)

并行的stage(Parallel)

Steps

script

Scripted Pipeline

Flow Control

Steps

与Groovy的区别

语法比较


Jenkins Pipeline是一套插件,支持在Jenkins中实施和集成持续交付管道。Pipeline提供了一套可扩展的工具,用于通过管道域特定语言(DSL)语法将“简单到复杂”的交付管道使用“代码”建模 。Pipeline优势:

  1. 可维护:管道是在代码中实现的,并且通常会被签入源代码管理,从而使团队能够编辑,审阅和迭代他们的交付管道。
  2. 可能出现:在继续进行管道运行之前,管道可以选择停止并等待人员输入或批准。
  3. 复杂场景:管道支持复杂的实际CD需求,包括分叉/连接,循环和并行执行工作的能力。
  4. 可扩展性:Pipeline插件支持对其DSL的定制扩展 。

Pipeline代码文件,可以使用两个脚本模式去写代码:Declarative Pipeline 和 Scripted Pipeline. Declarative相对于Scripted有两个优点。第一个是提供更丰富的语法功能,第二个是写出来的脚本可读性和维护性更好。

参考文档: https://www.jenkins.io/doc/book/pipeline/syntax/

pipeline包括以下几个概念:

  • node:jenkins节点,包括master和agent。
  • stage:一段代码块,一般一个stage包含一个业务场景的自动化
  • step:步骤,

声明性pipeline

pipeline {/* insert Declarative Pipeline here */
}

所有有效的声明性Pipeline必须包含在一个pipeline块内,声明性Pipeline中有效的基本语句和表达式遵循与Groovy语法相同的规则 ,但有以下例外:

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

Sections

声明性Pipeline中的Sections通常包含一个或多个指令或步骤。

agent

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

agent {... ...
}

pipeline与stage中的不同

细微差别主要在options 指令的应用时机。pipeline中,options在进入agent之后应用;stage中,在进入agent之前应用,并且在所有when condition检查之前。

参数

  • any

在任何可用的代理上执行Pipeline或stage。例如:agent any

  • none

当在pipeline块的顶层应用时,将不会为整个Pipeline运行分配全局代理,并且每个stage部分将需要包含其自己的agent部分。例如:agent none

  • label

使用提供的标签在Jenkins环境中可用的代理上执行Pipeline或stage性执行。例如:agent { label 'my-defined-label' }

  • node

agent { node { label 'labelName' } }行为和 agent { label 'labelName' }相同,但node允许其他选项(如customWorkspace)。

  • docker

用给定的容器执行Pipeline,或stage,将被动态地提供一个预先配置成基于Docker-based Pipelines的节点,或和label参数匹配的任选节点。 docker还可以接受一个args参数,可以直接将参数传递给docker run命令。例如:agent { docker 'maven:3-alpine' }

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

    使用从Dockerfile源存储库中包含的容器构建容器来执行Pipeline或stage 。为了使用此选项,Jenkinsfile必须从Multibranch PipelinePipeline from SCM加载。通常Dockerfile在源码库的根路径:agent { dockerfile true }。如果Dockerfile在其他目录中建立,请使用以下dir选项:agent { dockerfile { dir 'someSubDir' } }。您可以使用additionalBuildArgs选项将其他参数传递给docker build ...命令,如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }

常用选项

下面是可以用于两个或多个agent的常用选项。在没有明确说明的情况下选项是可选的。

  • label

    一个字符串。在这些标签上运行Pipeline或每个stage。此选项可用于nodedockerdockerfile,并且 对于node是必需的。

  • customWorkspace

    一个字符串。运行Pipeline或每个stage, 在这个agent的自定义的工作空间内,而不是默认的。它可以是相对路径,在这种情况下,自定义工作区将位于节点上的工作空间根目录下,也可以是绝对路径。例如:

agent {node {label 'my-defined-label'customWorkspace '/some/other/path'}
}
  • reuseNode

    一个布尔值,默认为false。如果为true,则在同一工作空间中,而不是完全在新节点上运行Pipeline顶层指定的节点上的容器。此选项适用于dockerdockerfile,并且仅在agent的每个stage内才有效果。

例如:

Jenkinsfile (Declarative Pipeline)
pipeline {agent { docker 'maven:3-alpine' } stages {stage('Example Build') {steps {sh 'mvn -B clean verify'}}}
}

在给定名称和tag(maven:3-alpine)的新创建的容器中执行此Pipeline中定义的所有步骤。

发布 post

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

条件

  • always

    无论Pipeline运行的完成状态如何都会运行。

  • changed

    只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行。

  • failure

    仅当当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示。

  • success

    仅当当前Pipeline具有“成功”状态时才运行,通常在具有蓝色或绿色指示的Web UI中表示。

  • unstable

    只有当前Pipeline具有“不稳定”状态,通常由测试失败,代码违例等引起,才能运行。通常在具有黄色指示的Web UI中表示。

  • aborted

    只有当前Pipeline处于“中止”状态时,才会运行,通常是由于Pipeline被手动中止。通常在具有灰色指示的Web UI中表示。

  • cleanup

    无论管道或stage的状态如何,在跑完所有其他的post条件后运行此条件下 的post步骤。

例如:

Jenkinsfile (Declarative Pipeline)
pipeline {agent anystages {stage('Example') {steps {echo 'Hello World'}}}post { always { echo 'I will always say Hello again!'}}
}
  1. 通常,该post部分应放在Pipeline末端

  2. post条件块包含的步骤和steps中的步骤用法相同

stages

包含一个或多个stage指令的序列,该stages部分是Pipeline 描述的大部分“工作”所在的位置。建议stages至少为持续交付流程的每个独立部分包含至少一个stage指令,例如构建,测试和部署。pipeline内只有一次stages部分一般跟在agent, options等后面。

steps

steps部分定义了在给定stage指令中执行的一系列一个或多个步骤(Step),steps部分必须包含一个或多个步骤。允许出现在每个stage块内。

Directives

environment

environment指令指定一系列键值对,这些键值对将被定义为所有step或特定stage的step的环境变量,具体取决于environment指令位于Pipeline中的位置。

该指令支持一种特殊的助手方法credentials(),可以通过Jenkins环境中的标识符来访问预定义的凭据。对于类型为“Secret Text”的凭据,该 credentials()方法将确保环境变量中包含该Secret Text内容。对于“标准用户名和密码”类型的凭证,指定的环境变量将被设置为username:password并且将自动定义两个附加的环境变量:MYVARNAME_USRMYVARNAME_PSW。允许出现在pipeline块内或stage内

  • environment顶级pipeline块中使用的指令将适用于Pipeline中的所有步骤
  • 在一个stage中定义的environment指令只将给定的环境变量应用于该stage中的步骤
  • environment具有一个帮助方法credentials(),可用于在Jenkins环境中通过其标识符访问预定义的凭据
Jenkinsfile (Declarative Pipeline)
pipeline {agent anyenvironment { CC = 'clang'}stages {stage('Example') {environment { AN_ACCESS_KEY = credentials('my-prefined-secret-text') }steps {sh 'printenv'}}}
}

options

options指令允许在Pipeline内配置Pipeline专用选项。Pipeline提供了许多这些选项,例如buildDiscarder,但它们也可能由插件提供,例如 timestamps。允许出现在pipeline块内,只有一次

可用选项

  • buildDiscarder

    持久化工件和控制台输出,用于保存Pipeline最近几次运行的数据。例如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }

  • checkoutToSubdirectory

    在工作区的子目录中执行源代码检出。例如:options { checkoutToSubdirectory('foo') }

  • disableConcurrentBuilds

    不允许并行执行Pipeline。可用于防止同时访问共享资源等。例如:options { disableConcurrentBuilds() }

  • preserveStashes

    保留已完成构建的存储,用于stage重新启动。例如:options { preserveStashes() }保存最近完成的构建中的stash,或者options { preserveStashes(5) }保留最近五个完成的构建中的stash。

  • quietPeriod

    设置管道的静默期(以秒为单位),覆盖全局默认值。例如:options { quietPeriod(30) }

  • retry

    如果失败,请按指定的次数重试整个管道。例如:options { retry(3) }

  • skipDefaultCheckout

    agent指令中默认跳过源代码检出。例如:options { skipDefaultCheckout() }

  • skipStagesAfterUnstable

    一旦构建状态进入了“不稳定”状态,就跳过stage。例如:options { skipStagesAfterUnstable() }

  • timeout

    设置Pipeline运行的超时时间,之后Jenkins应该中止Pipeline。例如:options { timeout(time: 1, unit: 'HOURS') }

  • timestamps

    当执行时,预处理由Pipeline生成的所有控制台输出运行时间。例如:options { timestamps() }

例如:

Jenkinsfile (Declarative Pipeline)
pipeline {agent anyoptions {timeout(time: 1, unit: 'HOURS') }stages {stage('Example') {steps {echo 'Hello World'}}}
}

指定一个小时的全局执行超时,之后Jenkins将中止Pipeline运行。

stage options

stageoptions指令类似于Pipeline根目录中的options指令。但是,stageoptions只能包含与stage相关的步骤,如retrytimeouttimestamps,或声明性选项,如skipDefaultCheckout

stage内,options在进入agent或检查任何when条件之前调用指令中的步骤。

可用的stage选项

  • skipDefaultCheckout

    默认情况下,在agent指令中跳过检查源代码管理中的代码。例如:options { skipDefaultCheckout() }

  • timeout

    设置此stage的超时时间,之后Jenkins应该中止该stage。例如:options { timeout(time: 1, unit: 'HOURS') }

  • retry

    如果失败,请重试此stage指定次数。例如:options { retry(3) }

  • timestamps

    当执行时,预处理由Pipeline生成的所有控制台输出运行时间。例如:options { timestamps() }

pipeline {agent anystages {stage('Example') {options {timeout(time: 1, unit: 'HOURS') }steps {echo 'Hello World'}}}
}

为stage Example指定一小时的执行超时,之后Jenkins将中止Pipeline运行。

parameters

parameters指令提供用户在触发Pipeline时应提供的参数列表。这些用户指定的参数的值通过该params对象可用于Pipeline步骤。允许出现在pipeline块内,只有一次。

可用参数

  • string

    字符串类型的参数,例如: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }

  • 文本

    一个text参数,可以包含多行,例如: parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') }

  • booleanParam

    一个布尔参数,例如: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }

  • choice

    选择参数,例如: parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }

  • file

    一个文件参数,指定用户在计划构建时要提交的文件,例如: parameters { file(name: 'FILE', description: 'Some file to upload') }

  • password

    密码参数,例如: parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') }

例如:

Jenkinsfile (Declarative Pipeline)
pipeline {agent anyparameters {string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')file(name: "FILE", description: "Choose a file to upload")}stages {stage('Example') {steps {echo "Hello ${params.PERSON}"echo "Biography: ${params.BIOGRAPHY}"echo "Toggle: ${params.TOGGLE}"echo "Choice: ${params.CHOICE}"echo "Password: ${params.PASSWORD}"}}}
}

triggers

triggers指令定义了Pipeline应重新触发的自动化方式。对于与源代码集成的Pipeline,如GitHub或BitBucket,triggers可能不需要基于webhook的集成可能已经存在。目前只有两个可用的触发器是cron和pollSCM。允许出现在pipeline块内,只有一次。

  • cron

    接受一个cron风格的字符串来定义Pipeline应重新触发的常规间隔,例如: triggers { cron('H 4/* 0 0 1-5') }

  • pollSCM

    接受一个cron风格的字符串来定义Jenkins应该检查新的源更改的常规间隔。如果存在新的更改,则Pipeline将被重新触发。例如:triggers { pollSCM('H 4/* 0 0 1-5') }

该pollSCM触发器仅在Jenkins 2.22或更高版本可用

例如:

Jenkinsfile (Declarative Pipeline)
pipeline {agent anytriggers {cron('H 4/* 0 0 1-5')}stages {stage('Example') {steps {echo 'Hello World'}}}
}

Jenkins cron 语法

Jenkins cron语法遵循cron实用程序的语法 (略有不同)。具体来说,每行包含由TAB或空格分隔的5个字段:

分钟 小时 DOM DOW
一小时内的分钟数(0-59) 一天中的小时(0-23) 每月的某一天(1-31)</ td> 月(1-12) 星期几(0-7),其中0和7是星期日。

要为一个字段指定多个值,可以使用以下运算符。按优先顺序排列,

  • * 指定所有有效值
  • M-N 指定一系列值
  • M-N/X或者按照指定范围或整个有效范围的*/X间隔步长X
  • A,B,…,Z 枚举多个值

为了允许定期计划的任务在系统上产生均匀负载,应尽可能使用符号H(“哈希”)。例如,使用0 0 * * *十几个日常工作将导致午夜大量飙升。相比之下,使用H H * * *仍然会每天执行一次,但不能同时执行,更好地使用有限的资源。

所述H符号可以与范围内使用。例如,H H(0-7) * * * 表示从凌晨12:00(午夜)到早上7:59之间的某个时间段。您也可以使用H带有或不带范围的步长间隔。

H符号可以被认为是在一定范围内的随机值,但它实际上是作业名称的hash值,而不是随机函数的哈希值,所以对于给定的项目该值仍然是稳定的。

请注意,对于月份日期字段,由于月份长度可变,短期周期(例如/3H/3)将不会在大多数月份结束时始终如一地工作)。例如,/3 将在第1st, 4th, …31st 天运行, 然后在下个月的第一天运行。 哈希总是在1-28的范围内运行, 所以 H/3在一个月末将产生3到6天的空隙。(更长的周期也会有不一致的长度,但效果可能相对不太明显。)

#开头的行和空行将被当做注释忽略。

此外,还有如下方便的别名:@yearly@annually@monthly@weekly@daily@midnight,和@hourly。这些使用哈希系统进行自动平衡。例如,@hourlyH * * * *都意味着在一小时内的任何时间。 @midnight实际上意味着在凌晨12:00到凌晨2:59之间的某个时间。

每十五分钟(也许在:07,:22,:37,:52)
triggers{ cron('H/15 * * * *') }每小时上半场每十分钟一次(三次,也许在:04,:14,:24)
triggers{ H(0-29)/10 * * * *) }从上午9:45开始每小时45分钟一次,每个工作日下午3:45结束。
triggers{ 45 9-16/2 * * 1-5) }每个工作日上午9点到下午5点之间每两小时一次(可能在上午10:38,下午12点38分,下午2点38分,下午4点38分)
triggers{ H H(9-16)/2 * * 1-5) }除了12月之外,每个月的1日和15日每天一次
triggers{ H H 1,15 1-11 *) }

stage

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

tools

定义自动安装和放置工具的部分PATH。如果指定agent none,这将被忽略。允许出现在    在pipeline块内或stage内。

支持的工具

  • maven
  • jdk
  • gradle

例如:

Jenkinsfile (Declarative Pipeline)
pipeline {agent anytools {maven 'apache-maven-3.0.1' }stages {stage('Example') {steps {sh 'mvn --version'}}}
}

工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预置。

input

stageinput指令允许您使用input步骤提示输入 。在进入stageagent或评估其when状态之前,stage将处于暂停状态。如果input 获得批准,stage则将继续。作为input提供的任何参数将在stage的剩下部分的环境中可用 。

配置选项

  • message

    必填。这将在用户提交input时呈现给用户。

  • id

    这是一个可选的标识符input。默认为stage名称。

  • ok

    input表单上“ok”按钮的可选文本。

  • submitter

    允许提交此input选项的用户或外部组名列表,用逗号分隔。默认允许任何用户。

  • submitterParameter

    要使用submitter名称设置的环境变量的名称,可选(如果存在)。

  • parameters

    用于提示提供的可选参数列表。有关更多信息,请参阅参数

Jenkinsfile (Declarative Pipeline)
pipeline {agent anystages {stage('Example') {input {message "Should we continue?"ok "Yes, we should."submitter "alice,bob"parameters {string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')}}steps {echo "Hello, ${PERSON}, nice to meet you."}}}
}

when

when指令允许Pipeline根据给定的条件确定是否执行该stagewhen指令必须至少包含一个条件。如果when指令包含多个条件,则所有子条件必须都返回true,stage将会执行。这与子条件嵌套在一个allOf条件中相同(见下面的例子)。

更复杂的条件结构可使用嵌套条件建:notallOfanyOf。嵌套条件可以嵌套到任意深度。

内置条件

  • branch

    当正在构建的分支与给出的分支模式匹配时执行stage,例如:when { branch 'master' }。请注意,这仅适用于多分支Pipeline。

  • environment

    当指定的环境变量设置为给定值时执行stage,例如: when { environment name: 'DEPLOY_TO', value: 'production' }

  • expression

    当指定的Groovy表达式求值为true时执行stage,例如: when { expression { return params.DEBUG_BUILD } }

  • not

    当嵌套条件为false时执行stage。必须包含一个条件。例如:when { not { branch 'master' } }

  • allOf

    当所有嵌套条件都为真时,执行舞台。必须至少包含一个条件。例如:when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }

  • anyOf

    当至少一个嵌套条件为真时执行舞台。必须至少包含一个条件。例如:when { anyOf { branch 'master'; branch 'staging' } }

例如:


Jenkinsfile (Declarative Pipeline)
pipeline {agent anystages {stage('Example Build') {steps {echo 'Hello World'}}stage('Example Deploy') {when {branch 'production'environment name: 'DEPLOY_TO', value: 'production'}steps {echo 'Deploying'}}}
}

顺序执行的stage(Sequential Stages)

声明性Pipeline中的stage可以按顺序声明待运行的stage列表。需要注意的是一个stage有且只能有一个 stepsparallel或者stagesstages是顺序执行的。stage内的stage无法进一步含有parallelstages ,但他们允许使用stage的所有其他功能,包括 agenttoolswhen等等。

pipeline {agent nonestages {stage('Non-Sequential Stage') {agent {label 'for-non-sequential'}steps {echo "On Non-Sequential Stage"}}stage('Sequential') {agent {label 'for-sequential'}environment {FOR_SEQUENTIAL = "some-value"}stages {stage('In Sequential 1') {steps {echo "In Sequential 1"}}stage('In Sequential 2') {steps {echo "In Sequential 2"}}}}}
}

并行的stage(Parallel)

声明性Parallel中的stage可以在parallel块中声明多个嵌套stage,这些stage将并行执行。需要注意的是一个stage有且只能有一个stepsstagesparallel。嵌套的stages本身不能包含其他parallelstage,但在其他方面的行为与stage相同,包括顺序执行的stage列表stages。任何包含parallel的stage都不能包含agent或者tools,因为那些和steps没有关系。

此外,您可以通过添加failFast true到包含parallelstage中,使得其中一个失败时中止所有parallel内的stage

pipeline {agent anystages {stage('Non-Parallel Stage') {steps {echo 'This stage will be executed first.'}}stage('Parallel Stage') {when {branch 'master'}failFast trueparallel {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"}}stage('Branch C') {agent {label "for-branch-c"}stages {stage('Nested 1') {steps {echo "In stage Nested 1 within Branch C"}}stage('Nested 2') {steps {echo "In stage Nested 2 within Branch C"}}}}}}}
}

Steps

声明性Pipeline可以使用“ Pipeline步骤”引用中记录的所有可用步骤 ,其中包含一个完整的步骤列表,并附加以下列出的步骤,仅在声明性Pipeline中支持。

script

script步骤需要一个script Pipeline,并在声明性Pipeline中执行。对于大多数场景,声明Pipeline中的script步骤不是必须的,但它可以提供一个有用的“escape hatch”。量大的或者复杂的script块应该转移到共享库中。

例如:

Jenkinsfile (Declarative Pipeline)
pipeline {agent anystages {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

Scripted Pipeline,如声明式Pipeline,构建在底层Pipeline子系统之上。不像声明式Pipeline,Scripted Pipeline是一个基于Groovy构建的,通用、高效的DSL。由Groovy语言提供的大多数功能都提供给Scripted Pipeline的用户,这意味着它是一个非常富有表现力和灵活性的工具,可以通过这些工具来创建持续构建的Pipeline。

Flow Control

Scripted Pipeline从顶部顺序执行,与Jenkinsfile Groovy或其他语言中的大多数传统Scripted一样。因此,提供流量控制取决于Groovy表达式,例如 if/else条件,例如:

Jenkinsfile (Scripted Pipeline)
node {stage('Example') {if (env.BRANCH_NAME == 'master') {echo 'I only execute on the master branch'} else {echo 'I execute elsewhere'}}
}

可以管理Scripted Pipeline流控制的另一种方式是使用Groovy的异常处理支持。当步骤由于任何原因而导致异常时。处理错误行为必须使用Groovy 中的try/catch/finally块,例如:

Jenkinsfile (Scripted Pipeline)
node {stage('Example') {try {sh 'exit 1'}catch (exc) {echo 'Something failed, I should sound the klaxons!'throw}}
}

Steps

如“ 入门指南 ”所述,Pipeline最基本的部分是“步骤”。从根本上说,步骤告诉Jenkins 要做什么,并且作为Declarative和Scripted Pipeline语法的基本构建块。

Scripted Pipeline并没有介绍这是专门针对它的语法的任何步骤; Pipeline步骤参考 ,其中包含Pipeline和插件提供的完整步骤列表。

与Groovy的区别

为了提供持久性(运行中的Pipeline可以在重新启动Jenkins主站后保留),Scripted Pipeline必须将数据序列化到master节点。由于这个设计要求,一些Groovy语法如collection.each { item -> /* perform operation */ }没有完全支持。有关 更多信息,请参见 JENKINS-27421和 JENKINS-26481。

语法比较

当Jenkins Pipeline首次创建时,Groovy被选为执行引擎。Jenkins已经使用嵌入式Groovy引擎很长时间,为管理员和用户提供高级脚本功能。此外,Jenkins Pipeline的实现者发现Groovy是建立“Scripted Pipeline”DSL的坚实基础。

由于它是一个功能齐全的编程环境,Scripted Pipeline为Jenkins用户提供了极大的灵活性和可扩展性。Groovy学习曲线通常不适用于给定团队的所有成员,因此,创建声明性Pipeline是为了创作Jenkins Pipeline提供一个更简单和更有见解的语法。

两者基本上是底层相同的Pipeline 子系统。它们都是“Pipeline代码”的持久实现。他们都能够使用Pipeline内置的插件或插件提供的步骤。两者都可以利用共享库

不同之处在于语法和灵活性。声明性限制了用户具有更严格和预定义结构的可用性,使其成为更简单连续输送Pipeline的理想选择。脚本化提供了极少的限制,因为Groovy本身只能对结构和语法进行限制,而不是任何Pipeline专用系统,使其成为高级用户和具有更复杂要求的用户的理想选择。顾名思义,Declarative Pipeline鼓励声明式编程模型。 尽管Scripted Pipeline遵循更命令性的编程模型。

Jenkins Pipeline 语法相关推荐

  1. Linux开发者的CI/CD(3)jenkins pipeline语法学习

    备注:由于我不是专职的devops工程师,所以学习jenkins本着够用的原则即可.但作为一个高级软件工程师,学会写pipeline是必须的. pipeline翻译成流水线,在Unix/Linux系统 ...

  2. jenkins pipeline之语法篇

    目录 一.为什么使用pipeline 二.常用的指令 agent stages stage steps parameters script 三.不太常用的指令 environment input po ...

  3. Jenkins Pipeline构建流水线发布

    Jenkins Pipeline构建流水线发布 1. Jenkins Pipeline 核心概念 Jenkins Pipeline是一套插件,支持在Jenkins中实现持续集成.交付管道; Pipel ...

  4. Jenkins Pipeline插件十大最佳实践!

    Jenkins Pipeline 插件对于 Jenkins 用户来说可以让用户能够改变游戏规则.基于 Groovy 中的领域特定语言(DSL),Pipeline 插件使 Pipelines 可以有脚本 ...

  5. Jenkins Pipeline 构建复杂的Electron程序

    最近一年都在捣腾Electron,从0.X版本,到现在最新Stable的3.X版本.一路上踩的坑很多,Electron的版本号也飞快的.项目设立的初衷是一份代码,即可构建出Windows和Mac,并且 ...

  6. k8s jenkins pipeline 多分支发布_给 Jenkins 换一个新皮肤:BlueOcean

    BlueOcean是什么 Jenkins是一款Java开发的跨平台持续集成和持续发布的开源项目,它具有如下特征: 安装及迁移方便:安装直接部署war包,迁移只需替换JENKINS_HOME目录. 配置 ...

  7. Jenkins pipeline 入门到精通系列文章

    Jenkins2 入门到精通系列文章. Jenkins2 下载与启动 jenkins2 插件安装 jenkins2 hellopipeline jenkins2 pipeline介绍 jenkins2 ...

  8. jenkins pipeline之如何串联多个Job

    流水线创建好了:https://blog.csdn.net/wxt_hillwill/article/details/118725982 语法也学习完成:https://blog.csdn.net/w ...

  9. java pipeline 实现_Docker+Jenkins+Pipeline实现持续集成(二)java项目构建

    插件推荐 插件名 作用 Blue Ocean Jenkins2.7以后可安装,是Jenkins的一种新视图,能够通过图形化的界面创建和编辑Jenkinsfile,实现pipeline as code ...

最新文章

  1. Direct2D开发:Direct2D 和 GDI 互操作性概述
  2. Django 中间件
  3. php数组为什么其他语言,PHP语言特性和各版本的差异
  4. OAG – WhoIsWho 同名消歧竞赛发布 | 10万元奖金双赛道
  5. flash可以编辑html文本吗,flash中怎么插入并编辑文字字体样式?
  6. github操作命令
  7. 如何修改MFC的图标
  8. retinex 的水下图像增强算法_图像增强论文:腾讯优图CVPR2019
  9. Spring的beans标签下可以有其他标签
  10. c#结合emgucv进行人脸检测_Python实时人脸识别/替换
  11. node.js 事件循环
  12. 2020年9月中国旅游行业网络关注度分析报告
  13. 计算机键盘上的每一个按键读音,电脑键盘上各键的名称功能及作用.doc
  14. import jpype报错 解决办法
  15. 【操作系统】GPT和MBR分区的区别
  16. C盘爆满?简单几招教你释放、清理C盘几十G空间,最有效的C盘清理方法
  17. 华为 2015 机试 输出:数字后面的连续出现的(2个或多个)相同字符(数字或者字符),删去一个,非数字后面的不要删除,例如,对应输出为:33aabb55pin。...
  18. 姜小白的Python日记Day12 迭代器与内置函数
  19. 从四大造字法看文字所承载的文化_举例说明汉语汉字所承载的文化信息?
  20. 硕士毕业论文写多少字

热门文章

  1. mysqli模块的安装
  2. [原创] 域模式下的ASP.NET 发邮件代码
  3. 【JFreeChart】JFreeChart—输出折线图
  4. MySQL中SELECT语句简单使用
  5. 绥化a货翡翠,拉萨a货翡翠
  6. SFP模块光信号强度知识介绍
  7. How to install Toad on linux with Corssover
  8. 《算法设计手册》面试题解答 第四章:排序和搜索
  9. 帝国cms文章页调用当前文章URL如何操作?
  10. Using join buffer (Batched Key Access)