主要组件说明:
- agent:
- 指定执行环境
- 支持Docker、Kubernetes等
- parameters:
- 定义构建参数
- 多种参数类型
- environment:
- 定义环境变量
- 支持凭证管理
- options:
- 配置构建选项
- 控制构建行为
- triggers:
- 定义触发条件
- 支持多种触发方式
- tools:
- 配置构建工具
- 自动安装和配置
- stages:
- 定义构建阶段
- 支持并行和矩阵
- post:
- 后置处理
- 根据构建结果执行
- script:
- 执行Groovy代码
- 更灵活的控制
- 共享库:
- 代码复用
- 标准化流程
pipeline {// 1. agent(执行环境)agent {// 指定运行环境label 'master' // 在master节点运行// 或docker { // 使用Dockerimage 'maven:3.8.1-jdk-8'args '-v /root/.m2:/root/.m2'}// 或kubernetes { // 使用Kubernetesyaml '''apiVersion: v1kind: Podspec:containers:- name: mavenimage: maven:3.8.1-jdk-8'''}}// 2. parameters(参数)parameters {// 字符串参数string(name: 'PARAM_STRING', defaultValue: 'default', description: '字符串参数')// 选择参数choice(name: 'PARAM_CHOICE', choices: ['dev', 'test', 'prod'], description: '环境选择')// 布尔参数booleanParam(name: 'PARAM_BOOLEAN', defaultValue: true, description: '是否执行')// 密码参数password(name: 'PARAM_PASSWORD', defaultValue: '', description: '密码参数')// 文件参数file(name: 'PARAM_FILE', description: '文件参数')// 文本参数text(name: 'PARAM_TEXT', defaultValue: '', description: '文本参数')}// 3. environment(环境变量)environment {// 定义环境变量JAVA_HOME = '/usr/java/default'MVN_HOME = '/usr/local/maven'// 使用凭证DOCKER_CREDENTIAL = credentials('docker-hub-credential')// 动态变量BUILD_TIME = "${new Date().format('yyyy-MM-dd HH:mm:ss')}"}// 4. options(构建选项)options {// 构建超时时间timeout(time: 1, unit: 'HOURS')// 禁止并行构建disableConcurrentBuilds()// 跳过默认检出skipDefaultCheckout()// 构建历史保留数buildDiscarder(logRotator(numToKeepStr: '10'))// 时间戳timestamps()}// 5. triggers(触发器)triggers {// 定时触发cron('0 0 * * *') // 每天0点// 轮询SCMpollSCM('H/15 * * * *') // 每15分钟// Webhook触发githubPush()}// 6. tools(工具)tools {// Mavenmaven 'Maven 3.8.1'// JDKjdk 'JDK 8'// Gradlegradle 'Gradle 7.0'}// 7. stages(阶段)stages {// 单个阶段stage('Checkout') {// 阶段特定的agentagent {docker {image 'alpine'}}// 阶段特定的环境变量environment {STAGE_VAR = 'value'}// 阶段条件when {branch 'master'environment name: 'DEPLOY_TO', value: 'prod'}// 阶段步骤steps {checkout scm}}// 并行阶段stage('Parallel Stage') {parallel {stage('Branch A') {steps {echo "A"}}stage('Branch B') {steps {echo "B"}}}}// 矩阵阶段stage('Matrix') {matrix {axes {axis {name 'PLATFORM'values 'linux', 'windows', 'mac'}axis {name 'BROWSER'values 'firefox', 'chrome', 'safari'}}stages {stage('Test') {steps {echo "Testing on ${PLATFORM} with ${BROWSER}"}}}}}}// 8. post(后置处理)post {// 总是执行always {echo '构建完成'// 清理工作空间cleanWs()}// 成功时执行success {echo '构建成功'// 发送邮件emailext body: '构建成功',subject: "Pipeline: ${currentBuild.fullDisplayName}",to: 'team@example.com'}// 失败时执行failure {echo '构建失败'// 发送失败通知slackSend channel: '#builds',color: 'danger',message: "构建失败: ${env.JOB_NAME} ${env.BUILD_NUMBER}"}// 不稳定时执行unstable {echo '构建不稳定'}// 改变状态时执行changed {echo '构建状态改变'}} }// 9. 声明式pipeline中的script块 script {// 可以执行任意Groovy代码def version = sh(script: 'git describe --tags', returnStdout: true).trim()// 条件判断if (env.BRANCH_NAME == 'master') {echo '这是master分支'}// 循环for (int i = 0; i < 3; i++) {echo "循环 ${i}"}// 异常处理try {sh 'some-command'} catch (Exception e) {echo "命令执行失败: ${e.message}"} }// 10. 共享库 @Library('my-shared-library') _ // 使用共享库中的函数 def myLib = new org.example.MyLib() myLib.doSomething()