Jenkins Pipeline 中的主要组件解释

主要组件说明:

  1. agent:
  • 指定执行环境
  • 支持Docker、Kubernetes等
  1. parameters:
  • 定义构建参数
  • 多种参数类型
  1. environment:
  • 定义环境变量
  • 支持凭证管理
  1. options:
  • 配置构建选项
  • 控制构建行为
  1. triggers:
  • 定义触发条件
  • 支持多种触发方式
  1. tools:
  • 配置构建工具
  • 自动安装和配置
  1. stages:
  • 定义构建阶段
  • 支持并行和矩阵
  1. post:
  • 后置处理
  • 根据构建结果执行
  1. script:
  • 执行Groovy代码
  • 更灵活的控制
  1. 共享库:
  • 代码复用
  • 标准化流程
    pipeline {
        // 1. agent(执行环境)
        agent {
            // 指定运行环境
            label 'master'  // 在master节点运行
            // 或
            docker {  // 使用Docker
                image 'maven:3.8.1-jdk-8'
                args '-v /root/.m2:/root/.m2'
            }
            // 或
            kubernetes {  // 使用Kubernetes
                yaml '''
                    apiVersion: v1
                    kind: Pod
                    spec:
                      containers:
                      - name: maven
                        image: 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点
            // 轮询SCM
            pollSCM('H/15 * * * *')  // 每15分钟
            // Webhook触发
            githubPush()
        }
    
        // 6. tools(工具)
        tools {
            // Maven
            maven 'Maven 3.8.1'
            // JDK
            jdk 'JDK 8'
            // Gradle
            gradle 'Gradle 7.0'
        }
    
        // 7. stages(阶段)
        stages {
            // 单个阶段
            stage('Checkout') {
                // 阶段特定的agent
                agent {
                    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()
    

      

posted @ 2025-07-29 16:29  东峰叵,com  阅读(31)  评论(0)    收藏  举报