Pipeline 使用语法详解

概述

在本章中,我们重点介绍Pipeline的语法,从Pipeline插件2.5版开始,Pipeline支持两种独立的语法结构:Declarative Pipeline和Scripted Pipeline,两者都支持建立连续传送的Pipeline。

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

为与BlueOcean编辑器兼容,通常建议使用Declarative Pipeline的方式进行编写,这种语法结构也会是Jenkins Pipeline未来发展的趋势。

Declarative Pipeline

从Pipeline2.5版本以后,Jenkins Pipeline新增了一种新的语法类型Declarative Pipeline(声明式Pipeline),它在Pipeline系统之上提供了一种更加简单和有意义的语法。

所有有效的Declarative Pipeline必须包含在一个pipeline块内,例如:
在这里插入图片描述
Declarative Pipeline遵循与Groovy相同的语法规则,但有以下几点例外:

  • Pipeline的顶层必须是块,具体来说就是:pipeline { }。

  • 不用分号作为语句分隔符,每个声明必须独立一行。

  • 块里只能包含Sections(章节)、Directives(指令)、 Steps(步骤)或赋值语句。

  • 属性引用以无参方法的方式调用。例如,输入被视为input()。

Sections(章节)

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

agent
agent指定整个Pipeline或特定stage在Jenkins环境中执行的位置。在pipeline代码块的顶层agent必须进行定义,但在stage级使用是可选的。

在这里插入图片描述
参数列表

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

any

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

当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要定义其自己的agent。

label
提供label标签名称,在Jenkins环境中可用的agent上执行Pipeline或stage。

例如:agent { label ‘my-defined-label’ }

node
agent { node { label ‘labelName’ } },等同于 agent { label ‘labelName’ },但node也允许其他选项(如customWorkspace)。

docker
定义此参数时,执行Pipeline或stage时会动态提供一个docker节点去运行基于Docker的Pipelines。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仓库中包含的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
string字符串。标记在哪里运行pipeline或stage

此选项适用于node,docker和dockerfile,并且在node中是必需的。
customWorkspace

string字符串。自定义运行的工作空间,它可以是相对路径,在这种情况下,自定义工作区将位于node节点工作空间的根目录下,也可以是绝对路径。例如:

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

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

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

①使用‘maven:3-alpine’的镜像创建容器,执行pipeline的所有步骤。

//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'
            }
        }
    }
}

①agent none在Pipeline顶层定义,表示将不会为整个Pipeline运行分配全局agent,每个stage需自己设置agent。

②使用‘maven:3-alpine’的镜像创建容器,执行此阶段中的步骤。

③使用‘openjdk:8-jre’的镜像创建容器,执行此阶段中的步骤。

post
定义Pipeline或stage运行结束后的操作。post支持以下类型的代码块:always,changed,fa

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值