流水线语法
本节是建立在 流水线入门内容的基础上,而且,应当被当作一个参考。 对于在实际示例中如何使用流水线语法的更多信息, 请参阅本章在流水线插件的2.5版本中的 使用 Jenkinsfile部分, 流水线支持两种离散的语法,具体如下对于每种的优缺点, 参见语法比较。
正如 本章开始讨论的, 流水线最基础的部分是 “步骤”。基本上, 步骤告诉 Jenkins 要做什么,以及作为声明式和脚本化流水线语法的基本构建块。
对于可用步骤的概述, 请参考 流水线步骤引用,它包含了一个构建到流水线的步骤和 插件提供的步骤的全面的列表。
声明式流水线
声明式流水线是最近添加到 Jenkins 流水线的 [1],它在流水线子系统之上提供了一种更简单,更有主见的语法。
所有有效的声明式流水线必须包含在一个 pipeline
块中, 比如:
pipeline {
/* insert Declarative Pipeline here */
}
在声明式流水线中有效的基本语句和表达式遵循与 Groovy的语法同样的规则, 有以下例外:
- 流水线顶层必须是一个 block, 特别地:
pipeline { }
- 没有分号作为语句分隔符,,每条语句都必须在自己的行上。
- 块只能由 节段, 指令, 步骤, 或赋值语句组成。 *属性引用语句被视为无参方法调用。 例如, input被视为 input()
节段
代理
agent
部分指定了整个流水线或特定的部分, 将会在Jenkins环境中执行的位置,这取决于 agent
区域的位置。该部分必须在 pipeline
块的顶层被定义, 但是 stage 级别的使用是可选的。
Required | Yes |
---|---|
Parameters | Described below |
Allowed | In the top-level pipeline block and each stage block. |
参数
为了支持作者可能有的各种各样的用例流水线, agent
部分支持一些不同类型的参数。这些参数应用在pipeline
块的顶层, 或 stage
指令内部。
-
any
在任何可用的代理上执行流水线或阶段。例如:
agent any
-
none
当在
pipeline
块的顶部没有全局代理, 该参数将会被分配到整个流水线的运行中并且每个stage
部分都需要包含他自己的agent
部分。比如:agent none
-
label
在提供了标签的 Jenkins 环境中可用的代理上执行流水线或阶段。 例如:
agent { label 'my-defined-label' }
-
node
agent { node { label 'labelName' } }
和agent { label 'labelName' }
一样, 但是node
允许额外的选项 (比如customWorkspace
)。 -
docker
使用给定的容器执行流水线或阶段。该容器将在预置的 node上,或在匹配可选定义的
label
参数上,动态的供应来接受基于Docker的流水线。docker
也可以选择的接受args
参数,该参数可能包含直接传递到docker run
调用的参数, 以及alwaysPull
选项, 该选项强制docker pull
,即使镜像名称已经存在。 比如:agent { docker 'maven:3-alpine' }
或agent { docker { image 'maven:3-alpine' label 'my-defined-label' args '-v /tmp:/tmp' } }
-
dockerfile
执行流水线或阶段, 使用从源代码库包含的
Dockerfile
构建的容器。为了使用该选项,Jenkinsfile
必须从多个分支流水线中加载, 或者加载 “Pipeline from SCM.” 通常,这是源代码仓库的根目录下的Dockerfile
:agent { dockerfile true }
. 如果在另一个目录下构建Dockerfile
, 使用dir
选项:agent { dockerfile {dir 'someSubDir' } }
。如果Dockerfile
有另一个名称, 你可以使用filename
选项指定该文件名。你可以传递额外的参数到docker build ...
使用additionalBuildArgs
选项提交, 比如agent { dockerfile {additionalBuildArgs '--build-arg foo=bar' } }
。 例如, 一个带有build/Dockerfile.build
的仓库,期望一个构建参数version
:agent { // Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/ dockerfile { filename 'Dockerfile.build' dir 'build' label 'my-defined-label' additionalBuildArgs '--build-arg version=1.0.2' } }
常见选项
有一些应用于两个或更多 agent
的实现的选项。他们不被要求,除非特别规定。
-
label
一个字符串。该标签用于运行流水线或个别的
stage
。该选项对node
,docker
和dockerfile
可用,node
要求必须选择该选项。 -
customWorkspace
一个字符串。在自定义工作区运行应用了
agent
的流水线或个别的stage
, 而不是默认值。 它既可以是一个相对路径, 在这种情况下,自定义工作区会存在于节点工作区根目录下, 或者一个绝对路径。比如:agent { node { label 'my-defined-label' customWorkspace '/some/other/path' } }
pipeline语法学习
- pipeline语法分为脚本式语法和声明式语法