pipeline
Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make'
}
}
stage('Test'){
steps {
sh 'make check'
junit 'reports/**/*.xml'
}
}
stage('Deploy') {
steps {
sh 'make publish'
}
}
}
}
agent 表示Jenkins应该为Pipeline的这一部分分配一个执行者和工作区。
stage 描述了这条Pipeline的一个阶段。
steps 描述了要在其中运行的步骤 stage
sh 执行给定的shell命令
junit是由JUnit插件提供的 用于聚合测试报告的Pipeline步骤
可以通过以下任一方式创建基本Pipeline:
- 直接在Jenkins网页界面中输入脚本。
- 通过创建一个Jenkinsfile可以检入项目的源代码管理库。
直接在Jenkins网页界面中输入脚本
复杂的Pipeline难以在Pipeline配置页面的文本区域内进行写入和维护。为了使这更容易,Pipeline也可以写在文本编辑器中,并检查源控件,
作为Jenkinsfile,Jenkins可以通过Pipeline脚本从SCM选项加载的控件。
为此,在定义Pipeline时,从SCM中选择Pipeline脚本。
选择SCM选项中的Pipeline脚本后,不要在Jenkins UI中输入任何Groovy代码; 您只需指定要从其中检索Pipeline的源代码中的路径。
更新指定的存储库时,只要Pipeline配置了SCM轮询触发器,就会触发一个新构建。
第一行Jenkinsfile应该是#!/usr/bin/env groovy Jenkinsfile。
在SCM中定义管道
Jenkinsfile (Scripted Pipeline)
node {
echo 'Hello World'
}
node 在Jenkins环境中分配一个执行器和工作空间。
echo 在控制台输出中写入简单的字符串
全局变量引用
除了代码片段生成器之外,Pipeline还提供了一个内置的“ 全局变量引用”。
像Snippet Generator一样,它也是由插件动态填充的。
与代码段生成器不同的是,全局变量引用仅包含Pipeline提供的变量的文档,这些变量可用于Pipeline。
在Pipeline中默认提供的变量是:
ENV
脚本化Pipeline可访问的环境变量,例如: env.PATH或env.BUILD_ID。
PARAMS
将为Pipeline定义的所有参数公开为只读 地图,例如:params.MY_PARAM_NAME。
currentBuild
可用于发现有关当前正在执行的Pipeline信息,与如属性currentBuild.result,
currentBuild.displayName等等请教内置的全局变量引用 了一个完整的,
而且是最新的,可用的属性列表currentBuild。
Pipeline 语法
agent
该agent部分指定整个Pipeline或特定阶段将在Jenkins环境中执行的位置,具体取决于该agent 部分的放置位置。
该部分必须在pipeline块内的顶层定义 ,但阶段级使用是可选的
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必须从多分支Pipeline或“Pipeline从SCM”加载。通常这是Dockerfile源库的根源:
agent { dockerfile true }。如果Dockerfile在另一个目录中建立,请使用以下dir选项:agent { dockerfile { dir 'someSubDir' } }。
您可以docker build ...使用该additionalBuildArgs选项将其他参数传递给命令,
如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }。
post
该post部分定义将在Pipeline运行或阶段结束时运行的操作。
一些条件后 的块的内支持post:部分 always,changed,failure,success,unstable,和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!'
}
}
}