Jenkins Pipeline 中的主要组件解释
主要组件说明:
- agent:
- 指定执行环境
- 支持Docker、Kubernetes等
- parameters:
- 定义构建参数
- 多种参数类型
- environment:
- 定义环境变量
- 支持凭证管理
- options:
- 配置构建选项
- 控制构建行为
- triggers:
- 定义触发条件
- 支持多种触发方式
- tools:
- 配置构建工具
- 自动安装和配置
- stages:
- 定义构建阶段
- 支持并行和矩阵
- post:
- 后置处理
- 根据构建结果执行
- script:
- 执行Groovy代码
- 更灵活的控制
- 共享库:
- 代码复用
- 标准化流程
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()

浙公网安备 33010602011771号