zoukankan      html  css  js  c++  java
  • JenkinsPipeline语法概要

    Pipeline是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。Pipeline通过Domain Specific Language(DSL)syntax定义Pipeline As Code并且实现持续交付的目的。

    1、基本概念

    pipeline的代码定义了整个构建过程,通常包括构建应用程序,测试然后交付应用程序的阶段,下面是pipeline语法中的基本概念:

    • Stage
      一个pipeline可以划分成若干个stage,每个stage代表一组操作,例如builddeploy。注意,stage是一个逻辑分组的概念,可以跨多个nodeagent
    • Node
      一个node就是一个jenkins节点,或者是master,或者是agent,是执行step的具体运行环境
    • Step
      step是最基本的操作单元,小到创建一个目录,大到构建一个docker镜像,由各类jenkins plugin提供,例如sh make

    2、脚本式和声明式流水线

    声明式PipelineJenkins Pipeline的一个相对较新的补充,它在Pipeline子系统之上提出了一种更为简化和有意义的语法,包括:

    • 提供比Scripted Pipeline语法更丰富的语法功能
    • 声明式Pipeline代码更容易编写和理解

    所有有效的声明性Pipeline必须包含在一个pipeline块内,例如:

    pipeline {
        /* insert Declarative Pipeline here */
    }
    

    3、声明式pipeline语法

    3.1、agent

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

    参数

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

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

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

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

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

    • docker
      执行Pipeline,或阶段执行,用给定的容器将被动态地供应一个节点预先配置成接受基于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或阶段性执行 。为了使用此选项,Jenkinsfile必须从多分支PipelinePipelineSCM加载。通常这是Dockerfile源库的根源:agent { dockerfile true }。如果Dockerfile在另一个目录中建立,请使用以下dir选项:agent { dockerfile { dir 'someSubDir' } }。您可以使用docker build …在该additionalBuildArgs选项将其他参数传递给命令,如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }

    常用选项

    这些是可以应用两个或多个agent实现的几个选项。除非明确说明,否则不需要

    • 标签
      一个字符串。运行Pipeline或个人的标签stage
      此选项对于nodedockerdockerfile,并且是必需的node

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

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

    此选项是有效的nodedockerdockerfile

    • reuseNode
      一个布尔值,默认为false。如果为true,则在同一工作空间中,而不是完全在新节点上运行Pipeline顶层指定的节点上的容器。
      此选项适用于dockerdockerfile,并且仅在agent个人使用时才有效果。
      例如:
    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent { docker 'maven:3-alpine' } 
        stages {
            stage('Example Build') {
                steps {
                    sh 'mvn -B clean verify'
                }
            }
        }
    }
    

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

    Jenkinsfile (Declarative Pipeline)
    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'
                }
            }
        }
    }
    

    3.2、post

    post部分定义将在Pipeline运行或阶段结束时运行的操作。一些条件后 的块的内支持post:部分 alwayschangedfailuresuccessunstable,和aborted。这些块允许在Pipeline运行或阶段结束时执行步骤,具体取决于Pipeline的状态。

    条件

    • always
      总是运行,无论Pipeline运行的完成状态如何

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

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

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

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

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

    例如:

    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
        stages {
            stage('Example') {
                steps {
                    echo 'Hello World'
                }
            }
        }
        post { 
            always { 
                echo 'I will always say Hello again!'
            }
        }
    }
    

    3.3、steps

    包含一个或多个阶段指令的序列,该stages部分是Pipeline描述的大部分“工作”的位置。建议stages至少包含至少一个阶段指令,用于连续交付过程的每个离散部分,如构建,测试和部署。

    例如:

    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
        stages {
            stage('Example') {
                steps { 
                    echo 'Hello World'
                }
            }
        }
    }
    

    3.4、environment

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

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

    例如:

    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
        environment { 
            CC = 'clang'
        }
        stages {
            stage('Example') {
                environment { 
                    AN_ACCESS_KEY = credentials('my-prefined-secret-text') 
                }
                steps {
                    sh 'printenv'
                }
            }
        }
    }
    

    3.5、options

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

    可用选项

    • buildDiscarder
      持久化工件和控制台输出,用于最近Pipeline运行的具体数量。例如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }

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

    • overrideIndexTriggers
      允许覆盖分支索引触发器的默认处理。 如果分支索引触发器在多分支或组织标签中禁用, options { overrideIndexTriggers(true) }将只允许它们用于促工作。否则, options { overrideIndexTriggers(false) }只会禁用改作业的分支索引触发器。

    • skipDefaultCheckout
      agent指令中默认跳过来自源代码控制的代码。例如:options { skipDefaultCheckout() }

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

    • checkoutToSubdirectory
      在工作空间的子目录中自动地执行源代码控制检出。例如: options { checkoutToSubdirectory('foo') }

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

    • retry
      失败后,重试整个Pipeline指定的次数。例如:options { retry(3) }

    • timestamps
      预处理由Pipeline生成的所有控制台输出运行时间与发射线的时间。例如:options { timestamps() }

    例如:

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

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

    3.6、parameters

    parameters指令提供用户在触发Pipeline时应提供的参数列表。这些用户指定的参数的值通过该params对象可用于Pipeline步骤。

    可用参数

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

    • text
      文本参数,可以包含多行,例如:parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One Two Three ', description: '') }

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

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

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

    例如:

    pipeline {
        agent any
        parameters {
            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')
        }
        stages {
            stage('Example') {
                steps {
                    echo "Hello ${params.PERSON}"
                    echo "Biography: ${params.BIOGRAPHY}"
                    echo "Toggle: ${params.TOGGLE}"
                    echo "Choice: ${params.CHOICE}"
                    echo "Password: ${params.PASSWORD}"
                }
            }
        }
    }
    

    3.7、triggers

    triggers指令定义了应重新触发的自动化方式。对于与GitHubBitBucket之类的源集成的管道,triggers由于基于Webhooks的集成可能已经存在,因此可能没有必要。目前可用的触发器 cronpollSCMupstream

    • cron
      接受cron样式的字符串来定义应重新触发管道的常规间隔,例如:triggers { cron('H */4 * * 1-5') }

    • pollSCM
      接受cron样式的字符串以定义Jenkins应检查新源更改的定期间隔。如果存在新的更改,则将重新触发管道。例如:triggers { pollSCM('H */4 * * 1-5') }

    • upstream
      接受以逗号分隔的作业字符串和阈值。当字符串中的任何作业以最小阈值结束时,将重新触发管道。例如: triggers { upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS) }

    例如:

    // Declarative //
    pipeline {
        agent any
        triggers {
            cron('H */4 * * 1-5')
        }
        stages {
            stage('Example') {
                steps {
                    echo 'Hello World'
                }
            }
        }
    }
    

    更多jenkins cron语法,可参考官方说明

    3.8、stage

    stage指令位于该stages节中,并且应包含 steps节,可选agent节或其他特定于阶段的指令。实际上,管道完成的所有实际工作都将包含在一个或多个stage指令中。

    例如:

    // Declarative //
    pipeline {
        agent any
        stages {
            stage('Example') {
                steps {
                    echo 'Hello World'
                }
            }
        }
    }
    

    3.9、tools

    定义自动安装并放在上的工具的部分PATH。如果agent none指定,则将其忽略。

    例如:

    pipeline {
        agent any
        tools {
            maven 'apache-maven-3.0.1' 
        }
        stages {
            stage('Example') {
                steps {
                    sh 'mvn --version'
                }
            }
        }
    }
    

    3.10、input

    input指令stage允许使用inputstep提示输入。在stage将暂停任何后options已被应用,并在进入前agent块为stage或评估when的条件stage。如果input批准,stage则将继续。作为input提交的一部分提供的任何参数将在其余的环境中可用stage

    可选项

    • message
      必需的,这将在用户提交时显示给用户input

    • id
      可选标识符input,默认为stage名称

    • ok
      input表单上“确定”按钮的可选文本

    • submitter
      可选的逗号分隔列表,这些列表允许用户提交此用户或外部组名input。默认为允许任何用户。

    • submitterParameter
      环境变量的可选名称,用该submitter名称设置(如果存在)

    • parameters
      提示提交者提供的可选参数列表。请参阅parameters以获取更多信息

    例如:

    pipeline {
        agent any
        stages {
            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."
                }
            }
        }
    }
    

    3.11、when

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

    内置条件

    • branch
      当正在构建的分支与给出的分支模式匹配时执行阶段,例如:when { branch 'master' }。仅适用于多分支Pipeline
    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
        stages {
            stage('Example Build') {
                steps {
                    echo 'Hello World'
                }
            }
            stage('Example Deploy') {
                when {
                    branch 'production'
                }
                steps {
                    echo 'Deploying'
                }
            }
        }
    }
    
    • environment
      当指定的环境变量设置为给定值时执行阶段,例如: when { environment name: 'DEPLOY_TO', value: 'production' }
    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
        stages {
            stage('Example Build') {
                steps {
                    echo 'Hello World'
                }
            }
            stage('Example Deploy') {
                when {
                    branch 'production'
                    environment name: 'DEPLOY_TO', value: 'production'
                }
                steps {
                    echo 'Deploying'
                }
            }
        }
    }
    
    • expression
      当指定的Groovy表达式求值为true时执行阶段,例如: when { expression { return params.DEBUG_BUILD } }
    pipeline {
        agent any
        stages {
            stage('Example Build') {
                steps {
                    echo 'Hello World'
                }
            }
            stage('Example Deploy') {
                when {
                    expression { BRANCH_NAME ==~ /(production|staging)/ }
                    anyOf {
                        environment name: 'DEPLOY_TO', value: 'production'
                        environment name: 'DEPLOY_TO', value: 'staging'
                    }
                }
                steps {
                    echo 'Deploying'
                }
            }
        }
    }
    
    • not
      当嵌套条件为false时执行阶段。必须包含一个条件。例如:when { not { branch 'master' } }

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

    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'
                }
            }
        }
    }
    
    • anyOf
      当至少一个嵌套条件为真时执行。必须至少包含一个条件。例如:when { anyOf { branch 'master'; branch 'staging' } }
    pipeline {
        agent any
        stages {
            stage('Example Build') {
                steps {
                    echo 'Hello World'
                }
            }
            stage('Example Deploy') {
                when {
                    expression { BRANCH_NAME ==~ /(production|staging)/ }
                    anyOf {
                        environment name: 'DEPLOY_TO', value: 'production'
                        environment name: 'DEPLOY_TO', value: 'staging'
                    }
                }
                steps {
                    echo 'Deploying'
                }
            }
        }
    }
    

    3.12、parallel

    声明性管道中的阶段可能有一个parallel部分,其中包含要并行运行的嵌套阶段的列表。需要注意的是一个阶段都必须有且只有一个stepsstagesparallel,或matrix。这是不可能的嵌套parallelmatrix块内stage,如果该指令stage指令嵌套在一个parallelmatrix阻塞本身。然而,stage一个内指令parallelmatrix块可以使用的所有其它的功能stage,包括agenttoolswhen等。

    pipeline {
        agent any
        stages {
            stage('Non-Parallel Stage') {
                steps {
                    echo 'This stage will be executed first.'
                }
            }
            stage('Parallel Stage') {
                when {
                    branch 'master'
                }
                failFast true
                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"
                        }
                    }
                    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"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    

    此外,你可以parallel阶段时,它们中的任何一个发生故障,所有被中止,加入failFast truestage含有parallel。添加的另一个选项failfast是在管道定义中添加一个选项:parallelsAlwaysFailFast()

    pipeline {
        agent any
        options {
            parallelsAlwaysFailFast()
        }
        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"
                        }
                    }
                    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"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    

    4、其他

    4.1、在声明式pipeline中使用脚本

    声明式pipeline是不能直接在steps块中写Groovy代码。
    Jenkins pipeline专门提供了一个script步骤,你能在script步骤中像写代码一样写pipeline逻辑。

    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    script {
                        result = sh (script: "git log -1|grep 'Release'", returnStatus: true) 
                        echo "result: ${result}"
                    }
                }
            }
        }
    }
    

    script块中的其实就是Groovy代码。大多数时候,我们是不需要使用script步骤的。如果在script步骤中写了大量的逻辑,则说明你应该把这些逻辑拆分到不同的阶段,或者放到共享库中。共享库是一种扩展Jenkins pipeline的技术。

    4.2、pipeline内置基础步骤

    4.2.1、文件目录相关步骤

    • deleteDir
      删除当前目录,它是一个无参步骤,删除的是当前工作目录。通常它与dir步骤一起使用,用于删除指定目录下的内容。

    • dir
      切换到目录。默认pipeline工作在工作空间目录下,dir步骤可以让我们切换到其它目录。例如:dir("/var/logs") { deleteDir() }

    • fileExists
      判断文件是否存在。fileExists('/tmp/a.jar')判断/tmp/a.jar文件是否存在。如果参数是相对路径,则判断在相对当前工作目录下,该文件是否存在。结果返回布尔类型。

    • isUnix
      判断是否为类Unix系统。如果当前pipeline运行在一个类Unix系统上,则返回true

    • pwd
      确认当前目录。pwdLinuxpwd命令一样,返回当前所在目录。它有一个布尔类型的可选参数:tmp,如果参数值为true,则返回与当前工作空间关联的临时目录。

    • writeFile
      将内容写入指定文件中。

    writeFile支持的参数有:
    file:文件路径,可以是绝对路径,也可以是相对路径。
    text:要写入的文件内容。
    encoding(可选):目标文件的编码。如果留空,则使用操作系统默认的编码。如果写的是Base64的数据,则可以使用Base64编码。

    • readFile:读取指定文件的内容,以文本返回。

    readFile支持的参数有:
    file:路径,可以是绝对路径,也可以是相对路径。
    encoding(可选):读取文件时使用的编码。

    script {
        // "amVua2lucyBib29r" 是"jenkins book"进行Base64编码后的值
        writeFile(file: "base64File", text: "amVua2lucyBib29r", encoding: "Base64")
        def content = readFile(file: "base64File", encoding: "UTF-8")
        echo "${content}"
        // 打印结果: jenkins book
    }
    

    4.2.2、制品相关步骤

    • stash
      保存临时文件。
      stash步骤可以将一些文件保存起来,以便被同一次构建的其他步骤或阶段使用。如果整个pipeline的所有阶段在同一台机器上执行,则stash步骤是多余的。所以,通常需要stash的文件都是要跨Jenkins node使用的。

    stash步骤会将文件存储在tar文件中,对于大文件的stash操作将会消耗Jenkins master的计算资源。Jenkins官方文档推荐,当文件大小为5∼100MB时,应该考虑使用其他替代方案。

    stash步骤的参数列表如下:

    • name:字符串类型,保存文件的集合的唯一标识。

    • allowEmpty:布尔类型,允许stash内容为空。

    • excludes:字符串类型,将哪些文件排除。如果排除多个文件,则使用逗号分隔。留空代表不排除任何文件。

    • includes:字符串类型,stash哪些文件,留空代表当前文件夹下的所有文件。

    • useDefaultExcludes:布尔类型,如果为true,则代表使用Ant风格路径默认排除文件列表。
      除了name参数,其他参数都是可选的。excludesincludes使用的是Ant风格路径表达式。

    • unstash
      取出之前stash的文件。
      unstash步骤只有一个name参数,即stash时的唯一标识。通常stashunstash步骤同时使用。以下是完整示例。

    pipeline {
        agent none
        stages {
            stage('stash') {
                agent { label "master" }
                steps {
                    script {
                        writeFile file: "a.txt", text: "$BUILD_NUMBER"
                        stash(name: "abc", include: "a.txt")
                    }
                }
            }
            stage("unstash") {
                agent { label "node2" }
                steps {
                    script {
                        unstash("abc")
                        def content = readFile("a.txt")
                        echo "${content}"
                    }
                }
            }
        }
    }
    

    stash步骤在master节点上执行,而unstash步骤在node2节点上执行

    4.2.3、命令相关步骤

    与命令相关的步骤其实是PipelineNodes and Processes插件提供的步骤。由于它是Pipeline插件的一个组件,所以基本不需要单独安装。

    sh
    执行shell命令。
    sh步骤支持的参数有:

    • script:将要执行的shell脚本,通常在类UNIX系统上可以是多行脚本。
    • encoding:脚本执行后输出日志的编码,默认值为脚本运行所在系统的编码。
    • returnStatus:布尔类型,默认脚本返回的是状态码,如果是一个非零的状态码,则会引发pipeline执行失败。如果returnStatus参数为true,则不论状态码是什么,pipeline的执行都不会受影响。
    • returnStdout:布尔类型,如果为true,则任务的标准输出将作为步骤的返回值,而不是打印到构建日志中(如果有错误,则依然会打印到日志中)。除了script参数,其他参数都是可选的。

    returnStatusreturnStdout参数一般不会同时使用,因为返回值只能有一个。如果同时使用,则只有returnStatus参数生效。

    bat、powershell
    bat步骤执行的是Windows的批处理命令。powershell步骤执行的是PowerShell脚本,支持3+版本。这两个步骤支持的参数与sh步骤的一样。

    4.2.4、其他步骤

    • error
      主动报错,中止当前pipeline
      error步骤的执行类似于抛出一个异常。它只有一个必需参数:message。通常省略参数:error("there's an error")

    • tool
      使用预定义的工具。
      如果在Global Tool Configuration(全局工具配置)中配置了工具,那么可以通过tool步骤得到工具路径。
      tool步骤支持的参数有:

      • name:工具名称。
      • type(可选):工具类型,指该工具安装类的全路径类名。
        每个插件的type值都不一样,而且绝大多数插件的文档根本不写type值。除了到该插件的源码中查找,还有一种方法可以让我们快速找到type值,就是前往Jenkins pipeline代码片段生成器中生成该tool步骤的代码即可。
    • timeout
      代码块超时时间。
      timeout步骤闭包内运行的代码设置超时时间限制。如果超时,将抛出一个org.jenkinsci.plugins.workflow.steps.FlowInterruptedException异常。timeout步骤支持如下参数:

      • time:整型,超时时间。
      • unit(可选):时间单位,支持的值有NANOSECONDSMICROSECONDSMILLISECONDSSECONDSMINUTES(默认)、HOURSDAYS
      • activity(可选):布尔类型,如果值为true,则只有当日志没有活动后,才真正算作超时。
      • waitUntil
        等待条件满足。
        不断重复waitUntil块内的代码,直到条件为truewaitUntil不负责处理块内代码的异常,遇到异常时直接向外抛出。waitUntil步骤最好与timeout步骤共同使用,避免死循环。示例如下:
    
    timeout(50) {
        waitUntil {
            script {
                def r = sh script: 'curl http://example', returnStatus: true
                retturn (r == 0)
            }
        }
    }
    
    • retry
      重复执行块
      执行N次闭包内的脚本。如果其中某次执行抛出异常,则只中止本次执行,并不会中止整个retry的执行。同时,在执行retry的过程中,用户是无法中止pipeline的。
    steps {
        retry(20) {
            script {
                sh script: 'curl http://example', returnStatus: true
            }
        }
    }
    
    • sleep
      pipeline休眠一段时间。
      sleep步骤可用于简单地暂停pipeline,其支持的参数有:

    • time:整型,休眠时间。

    • unit(可选):时间单位,支持的值有NANOSECONDSMICROSECONDSMILLISECONDSSECONDS(默认)、MINUTESHOURSDAYS

    参考来源:https://www.jenkins.io/doc/book/pipeline/syntax/

  • 相关阅读:
    POJ3159 Candies —— 差分约束 spfa
    POJ1511 Invitation Cards —— 最短路spfa
    POJ1860 Currency Exchange —— spfa求正环
    POJ3259 Wormholes —— spfa求负环
    POJ3660 Cow Contest —— Floyd 传递闭包
    POJ3268 Silver Cow Party —— 最短路
    POJ1797 Heavy Transportation —— 最短路变形
    POJ2253 Frogger —— 最短路变形
    POJ1759 Garland —— 二分
    POJ3685 Matrix —— 二分
  • 原文地址:https://www.cnblogs.com/ssgeek/p/12856067.html
Copyright © 2011-2022 走看看