Jenkins 2.5新加入的pipeline语法
声明式pipeline 基本语法和表达式遵循 groovy语法,但是有以下例外:
一个声明式Pipeline中包含的元素
示例:
pipeline{
// 指定pipeline在哪个slave节点上允许
agent { label 'jdk-maven' }
// 指定pipeline运行时的一些配置
option {
timeout(time: 1, unit: 'HOURS')
}
// 自定义的参数
parameters {
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
}
// 自定义的环境变量
environment {
Gitlab_Deploy_KEY = credentials('gitlab-jenkins-depolykey')
}
// 定义pipeline的阶段任务
stages {
stage ("阶段1任务:拉代码") {
steps {
// 拉代码的具体命令
}
}
stage ("阶段2任务:编译代码") {
steps {
// 编译代码的具体命令
}
}
stage ("阶段3任务:扫描代码") {
steps {
// 拉代码的具体命令
}
}
stage ("阶段4任务:打包代码") {
steps {
// 打包代码的具体命令
}
}
stage ("阶段5任务:构建推送Docker镜像") {
steps {
// 构建推送Docker镜像的具体命令
}
}
stage ("阶段6任务:部署镜像") {
steps {
// 部署镜像的具体命令
}
}
}
post {
success {
// 当pipeline构建状态为"success"时要执行的事情
}
always {
// 无论pipeline构建状态是什么都要执行的事情
}
}
}
指定整个Pipeline或特定阶段是在Jenkins Master节点还是Jenkins Slave节点上运行。可在顶级pipeline
块和每个stage
块中使用(在顶层pipeline{}
中是必须定义的 ,但在阶段Stage中是可选的)
参数(以下参数值在顶层pipeline{}
和stage{}
中都可使用):
顶层pipeline{}
中应用时,将不会为整个Pipeline运行分配全局代理,并且每个stage
部分将需要包含其自己的agent
部分公用参数:
定义在Pipeline运行或阶段结束时要运行的操作。具体取决于Pipeline的状态
支持pipeline运行状态:
post
条件后运行此条件下 的post
步骤。stage
指令pipeline{ }
中只能有一个stages{}
stage
指令中至少包含一个用于执行命令的steps
The issue here is caused by the way Jenkins interprets $var
inside sh
block:
environment{…},使用键值对来定义一些环境变量并赋值。它的作用范围,取决environment{…}所写的位置。写在顶层环境变量,可以让所有stage下的step共享这些变量;也可以单独定义在某一个stage下,只能供这个stage去调用变量,其他的stage不能共享这些变量。一般来说,我们基本上上定义全局环境变量,如果是局部环境变量,我们直接用def关键字声明就可以,没必要放environment{…}里面。
同时,environment{…}支持credentials()
方法来访问预先在Jenkins保存的凭据,并赋值给环境变量
credentials()
支持的凭据类型:
Secret Text
Secret File
Username and password:使用变量名_USR
and 变量名_PSW
来获取其中的用户名和Password
pipeline {
agent any
stages {
stage('Example Username/Password') {
environment {
SERVICE_CREDS = credentials('my-prefined-username-password')
}
steps {
sh 'echo "Service user is $SERVICE_CREDS_USR"'
sh 'echo "Service password is $SERVICE_CREDS_PSW"'
sh 'curl -u $SERVICE_CREDS https://myservice.example.com'
}
}
}
}
SSH with Private Key
pipeline {
agent any
stages {
stage('Example Username/Password') {
environment {
SSH_CREDS = credentials('my-prefined-ssh-creds')
}
steps {
sh 'echo "SSH private key is located at $SSH_CREDS"'
sh 'echo "SSH user is $SSH_CREDS_USR"'
sh 'echo "SSH passphrase is $SSH_CREDS_PSW"'
}
}
}
}
pipeline{ }
中只能有一个parameters{}
parameters {
参数类型(name: '参数名', defaultValue: '默认值', description: '描述')
}
${params.参数名}
pipeline {
agent any
parameters {
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
}
stages {
stage('Example') {
steps {
echo "Hello ${params.PERSON}"
echo "Biography: ${params.BIOGRAPHY}"
echo "Toggle: ${params.TOGGLE}"
echo "Choice: ${params.CHOICE}"
echo "Password: ${params.PASSWORD}"
}
}
}
}
pipeline{ }
中只能有一个options{}
pipeline{ }
中只能有一个triggers {}
触发器类型
Jenkins的Cron语法
stages{}
中pipeline{}
或stage{}
支持的工具:
√条件: