常用插件
- Git Parameter
- Publish Over SSH
流水线语法
// 所有命令都要放在pipeline里
pipeline {
// 指定任务在哪个节点处理
agent any
// 声明全局变量
environment {
key = 'value'
}
// 步骤
stages {
stage('拉取Git仓库代码') {
steps {
script {
cleanWs() // 清理工作空间
}
checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'https://github.com/cyjjohn/vitepress.git']])
echo '拉取Git仓库代码 - 成功'
}
}
stage('通过node构建项目') {
steps {
echo '通过node构建项目 - 成功'
}
}
stage('ssh推送') {
steps {
// 注意ssh连接后默认路径为~
sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'echo \'test success\' > a.txt', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'ssh推送 - 成功'
}
}
}
// 推送消息
post {
success {
emailext subject: "构建成功 #${env.BUILD_NUMBER}",
body: "构建成功!详情请查看:${env.BUILD_URL}",
to: "team@example.com"
}
failure {
emailext subject: "构建失败 #${env.BUILD_NUMBER}",
body: "构建失败!详情请查看:${env.BUILD_URL}",
to: "team@example.com"
}
}
}常用options
pipeline {
options {
timeout(time: 30, unit: 'MINUTES') // 最多运行30分钟
timestamps() // 显示时间戳
buildDiscarder(logRotator(daysToKeepStr: '7',numToKeepStr: '10')) // 只保留最近10个构建,和最近7天内的构建
disableConcurrentBuilds(abortPrevious:true) // 禁止并发执行,只保留新的
parallelsAlwaysFailFast() // 并行快速失败
skipDefaultCheckout() // 禁止默认自动 checkout,需要手动完成源码拉取
}
}pipleline中的单双引号
区别总结
| 使用方式 | 解析层 | 说明 |
|---|---|---|
sh '...' | Groovy 字符串原样传给 shell | Groovy 不替换变量,shell 执行命令,shell会解释 $var 变量(需确保shell环境变量存在) |
sh "..." | Groovy 变量替换后传给 shell | Groovy 先替换变量,shell 接收纯文本执行。适合插入 Groovy 变量。 |
sh """...""" | Groovy 多行字符串,支持变量替换 | 便于写多行 shell 脚本、带复杂命令。 |
Shell 层单引号 '$var' | Shell 不解析变量,原样输出 | 控制 shell 不对变量或特殊字符扩展,保证变量安全。 |
Shell 层双引号 "$var" | Shell 解析变量和转义字符 | shell 语言常见字符串。 |
推荐实践
需要在命令中嵌入 Groovy 变量时,优先用双引号或多行三引号包裹
sh,例如:groovydef branch = 'dev' sh "git checkout ${branch}"如果传入带有空格或特殊字符的参数,shell 里用单引号包起来防止被破坏,例如:
groovydef msg = "Hello World!" sh "echo '${msg}'"如果不需要内嵌 Groovy 变量,使用单引号写
sh,避免不必要的变量替换groovysh 'echo "Static message"'为了代码清晰和减少转义混乱,复杂脚本用
"""..."""定义多行脚本
环境变量
- 在pipeline中直接使用environment
- 在stage中使用,该阶段生效
- 在steps中使用withEnv(['a=111,b=222']){}
- 在script中动态修改,env.a=111,等价于修改全局环境变量,生效于当前 Pipeline 运行环境
内置变量
jenkins地址:端口/env-vars.html
常用变量
| 变量名 | 说明 |
|---|---|
BUILD_NUMBER | 当前构建编号 |
BUILD_ID | 当前构建ID |
JOB_NAME | 当前任务名称 |
WORKSPACE | 构建工作区路径 |
NODE_NAME | 运行节点名称 |
GIT_COMMIT | Git commit SHA值(如果使用Git插件) |
BRANCH_NAME | 当前分支名称(多分支流水线自动注入) |
CHANGE_ID | Pull Request 编号(多分支流水线的 PR) |
CHANGE_BRANCH | PR的源分支 |
CHANGE_TARGET | PR目标分支 |
显示构建用户的插件
build user vars
wrap([$class:'BuildUser']) { echo "${BUILD_USER}" }