文章目录
- 语法
- Jenkins自带流水线语法生成器
- options
- `Discard old builds`
- 参数化构建
- 并行执行stage
- 触发下游job构建
- 声明式和脚本式均可使用
- `注释`
- `执行shell脚本`
- 单引号与双引号的区别
- `到指定目录下执行`
- `sshPublisher`
- 常用指令
语法
pipeline {
agent any
environment { //设置全局变量
username = 'test'
password = "123456"
}
parameters { //参数化构建
choice choices: ['true', 'false'], description: '测试', name: 'test'
string name: 'NEW_BRANCH', defaultValue: '', description:'', trim: true
}
stages {
stage('阶段一') {
steps {
deleteDir() //清空当前${WORKSPACE}下面的内容
sh '''
echo "执行Shell命令"
'''
}
}
stage('阶段二') {
steps {
sh '''
echo "执行Shell命令"
'''
}
}
stage('并行') {
parallel {
stage('Stage1') {
steps {
echo "Stage1"
}
}
stage('Stage2') {
steps {
echo "Stage2"
}
}
}
}
}
post { //构建后处理
always {
echo "总是执行"
}
failure {
echo "失败后执行"
}
success {
echo "成功后执行"
}
}
}
解释:
agent any #Jenkins自动分配一个代理节点去执行
agent {
label "执行机标签名" //指定执行机
}
Jenkins自带流水线语法生成器
以参数化构建为例,配置好之后,点击
"Generate Dectarative Directive"
即可在下方生成代码,直接复制到Groovy脚本即可
options
Discard old builds
Discard old builds
options {
buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '30') //保留历史构建数30个
}
参数化构建
parameters { //参数化构建
choice choices: ['true', 'false'], description: '测试', name: 'test' //选择参数
string name: 'NEW_BRANCH', defaultValue: '', description:'', trim: true //字符串参数
listGitBranches branchFilter: '.*/feature.*||.*/dev', credentialsId: 'devops',
defaultValue: '', name: 'BRANCH', quickFilterEnabled: true, remoteURL: 'https://192.168.1.2/devops.git', selectedValue: 'NONE',
sortMode: 'DESCENDING_SMART', tagFilter: '*', type: 'PT_BRANCH' //列出git分支
}
并行执行stage
window和linux的stage是并行执行的
stage("build, deploy and test on Windows and Linux") {
parallel {
stage("windows") {
stages {
stage("build") {
steps {
timestamps {
echo "build on windows."
}
}
}
stage("deploy") {
steps {
timestamps {
echo "deploy on windows."
}
}
}
}
}
stage("linux") {
stages {
stage("build") {
steps {
timestamps {
echo "build on linux."
}
}
}
stage("deploy") {
steps {
timestamps {
echo "deploy on linux."
}
}
}
}
}
}
}
触发下游job构建
上游Job需有VERSION参数
JOB_NAME是Jenkins内置变量,代表当前Job的名字
下游job需有JOB参数
build job: '下游job名字', parameters: [string(name: 'version', value: env.VERSION),string(name: 'JOB', value: env.JOB_NAME)], propagate: false, wait: false
声明式和脚本式均可使用
注释
注释
单行注释:用双左斜线(//)
多行注释
/** 多行注释:
* 第一行
* 第二行
*/
执行shell脚本
执行shell脚本
sh '''
shell命令
'''
或者
sh """
shell命令
"""
单引号与双引号的区别
单引号:(shell优先)
获取shell变量——${key}
不能获取groovy通过def定义的变量
可以获取参数化定义的值
shell自身定义的变量会覆盖jenkins参数化定义的变量
双引号:(def定义的优先)
获取groovy定义的变量——${key}
获取shell变量——\${key} #需要通过\进行转义
建议:声明式流水线用三单引号,脚本式流水线用三双引号
到指定目录下执行
到指定目录下执行
dir('docker') {
xxxxx
}
sshPublisher
sshPublisher
source /etc/profile
java -jar app.jar &
sshPublisher(publishers: [sshPublisherDesc(configName: 'java_161', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''
source /etc/profile
java -jar app.jar &
''',
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/opt/',
remoteDirectorySDF: false, removePrefix: 'backend/', sourceFiles: 'backend/app.jar')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
常用指令
deleteDir() #删除WORKSPACE