Pipeline概念
Pipeline是将一个命令/程序/进程的输出发送到另一个命令/程序/进程,进行进一步处理
Pipeline的代码定义了整个构建过程
基本的Pipeline语法格式
声明式的pipeline语法格式
所有的声明都必须包含在pipeline{}中
块只能有节段,指令,步骤或者赋值语句组成
节段:agent,stages,post,steps
指令:environment,options,parameters,triggers,stage,input,tool,when
pipeline{
agent any
stages {
stage("build"){
steps{
//TODO
}
}
stage("Test"){
steps{
// TODO
}
}
stage("deploy"){
steps{
//TODO
}
}
}
}
创建一个简单的pipeline项目
新建一个item,选择“Pipeline”-》选择“Pipeline script”
输入脚本
pipeline{
agent any
stages{
stage("build"){
steps{
echo "Build"
}
}
stage("Test"){
steps{
echo "Test"
}
}
stage("Deployment"){
steps{
echo "Deployment"
}
}
}
}
手动点击“build Now”,可以看到这个pipeline的每个阶段的视图
rerun pipeline
当pipeline执行完成后,需要执行某一个stage,可以进入到这次build,选择“从指定阶段重新运行”
agent
指定了整个pipeline或者特定的部分在jenkins中执行的位置比如在哪一个node上执行,agent可以是node,也可以是docker
必须在pipeline的顶层被定义,stage中可选
在pipeline块的顶层被定义,是全局的agent,当全局的agent为none时每个stage可以定义自己的agent
agent参数介绍
agent有以下参数
any-----在任何可用的代理上执行流水线或阶段,agent any
none-----pipeline的顶层没有设置全局的agent,那么每个stage需要设置自己的agent ,agent none
label-----在提供了标签的代理上执行pipeline或者阶段。 agent {label ‘my-defined-label’}
node—在提供的node上执行pipeline或者阶段,agent {node {label ‘my-defined-label’}}
docker----使用指定的容器执行pipeline或者阶段,容器在node或者label上,可以包含args参数,直接传递到docker run,已经alwayspull, 该选项强制docker pull
比如:在名字为“my-defined-label“上使用image “maven:3-alpine”来执行pipeline流水线或者阶段
agent {
docker{
image 'maven:3-alpine'
label 'my-defined-label'
agrs '-v /tmp:/tmp'
}
}
doc