Skip to content

常用插件 ​

  • 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 字符串原样传给 shellGroovy 不替换变量,shell 执行命令,shell会解释 $var 变量(需确保shell环境变量存在)
sh "..."Groovy 变量替换后传给 shellGroovy 先替换变量,shell 接收纯文本执行。适合插入 Groovy 变量。
sh """..."""Groovy 多行字符串,支持变量替换便于写多行 shell 脚本、带复杂命令。
Shell 层单引号 '$var'Shell 不解析变量,原样输出控制 shell 不对变量或特殊字符扩展,保证变量安全。
Shell 层双引号 "$var"Shell 解析变量和转义字符shell 语言常见字符串。

推荐实践 ​

  • 需要在命令中嵌入 Groovy 变量时,优先用双引号或多行三引号包裹 sh,例如:

    groovy
    def branch = 'dev'
    sh "git checkout ${branch}"
  • 如果传入带有空格或特殊字符的参数,shell 里用单引号包起来防止被破坏,例如:

    groovy
    def msg = "Hello World!"
    sh "echo '${msg}'"
  • 如果不需要内嵌 Groovy 变量,使用单引号写 sh,避免不必要的变量替换

    groovy
    sh '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_COMMITGit commit SHA值(如果使用Git插件)
BRANCH_NAME当前分支名称(多分支流水线自动注入)
CHANGE_IDPull Request 编号(多分支流水线的 PR)
CHANGE_BRANCHPR的源分支
CHANGE_TARGETPR目标分支

显示构建用户的插件 ​

build user vars
wrap([$class:'BuildUser']) { echo "${BUILD_USER}" }