插件大师Jenkiens软件测试-各种技能集合

Jenkins Pipeline语法(上)

2018-10-21  本文已影响273人  程序员文集

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

声明性Pipeline

声明性Pipeline是Jenkins Pipeline 的一个相对较新的补充, 它在Pipeline子系统之上提出了一种更为简化和有意义的语法。

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

pipeline {
    /* insert Declarative Pipeline here */
}

声明性Pipeline中有效的基本语句和表达式遵循与Groovy语法相同的规则 ,但有以下例外:

您可以使用 声明性指令生成器 来帮助您配置声明性Pipeline中的指令和部分。

Sections

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

代理 agent

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

是否必填
参数 如下面所描述的
允许出现在 在顶级pipeline块和每个stage块中。
参数

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

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

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

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

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

用给定的容器执行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'
    }
}
常用选项

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

agent {
    node {
        label 'my-defined-label'
        customWorkspace '/some/other/path'
    }
}
例如:
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'
            }
        }
    }
}
  1. agent none在Pipeline顶层定义确保执行者不会被不必要地分配。使用agent none也强制每个stage部分包含自己的agent部分

  2. 使用此镜像在新创建的容器中执行此stage中的步骤

  3. 在新创建的容器中使用与前一个stage的不同镜像执行此stage中的步骤

发布 post

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

是否必填
参数 没有
允许出现在 在顶级pipeline块和每个stage块中。
条件
例如:
Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { 
        always { 
            echo 'I will always say Hello again!'
        }
    }
}
  1. 通常,该post部分应放在Pipeline末端

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

stage stages

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

是否必填
参数 没有
允许出现在 pipeline内只有一次。
例如
pipeline {
    agent any
    stages { 
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

stages部分一般跟在agentoptions等后面。

步骤 steps

steps部分定义了在给定stage指令中执行的一系列一个或多个步骤。

是否必填
参数 没有
允许出现在 每个stage块内
例如
Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    stages {
        stage('Example') {
            steps { 
                echo 'Hello World'
            }
        }
    }
}

steps部分必须包含一个或多个步骤

上一篇 下一篇

猜你喜欢

热点阅读