Jenkins的Pipline中有哪些区块,以及其它知识点整理

目录

■模板

■Jenkins的Pipline中有哪些区块

[1. pipeline(顶层区块)](#1. pipeline(顶层区块))

[2. agent(执行节点)](#2. agent(执行节点))

[3. stages(阶段集合)](#3. stages(阶段集合))

[4. stage(单个阶段)](#4. stage(单个阶段))

[5. steps(具体步骤)](#5. steps(具体步骤))

[6. post(后置处理)](#6. post(后置处理))

[7. environment(环境变量)](#7. environment(环境变量))

[8. parameters(参数化构建)](#8. parameters(参数化构建))

[9. options(Pipeline 配置选项)](#9. options(Pipeline 配置选项))

[10. triggers(触发条件)](#10. triggers(触发条件))

[11. tools(工具路径配置)](#11. tools(工具路径配置))

[12. input(用户交互)](#12. input(用户交互))

[13. when(条件执行)](#13. when(条件执行))

[14. parallel(并行执行)](#14. parallel(并行执行))

[■其它 === 1.cleanWs是jenkins的内置命令吗,如何使用](#■其它 === 1.cleanWs是jenkins的内置命令吗,如何使用)

[1. 安装 Workspace Cleanup Plugin](#1. 安装 Workspace Cleanup Plugin)

[2. cleanWs 的核心用法](#2. cleanWs 的核心用法)

基本语法

常用场景示例

[(1) 简单清理(清空所有文件)](#(1) 简单清理(清空所有文件))

[(2) 排除指定文件/目录](#(2) 排除指定文件/目录)

[(3) 仅在构建失败时清理](#(3) 仅在构建失败时清理)

[3. 在 Pipeline 中的使用](#3. 在 Pipeline 中的使用)

[声明式 Pipeline](#声明式 Pipeline)

[脚本式 Pipeline](#脚本式 Pipeline)

[4. cleanWs vs deleteDir()](#4. cleanWs vs deleteDir())

[5. 注意事项](#5. 注意事项)

总结

[■其它 === 2.如何查看jenkins中已经定义的节点](#■其它 === 2.如何查看jenkins中已经定义的节点)

[1. 通过 Web 界面查看](#1. 通过 Web 界面查看)

[(1) 进入节点管理页面](#(1) 进入节点管理页面)

[(2) 查看节点列表](#(2) 查看节点列表)

[(3) 查看节点详情](#(3) 查看节点详情)

[2. 通过命令行查看(需管理员权限)](#2. 通过命令行查看(需管理员权限))

[(1) 使用 Jenkins CLI](#(1) 使用 Jenkins CLI)

[(2) 使用 Groovy 脚本](#(2) 使用 Groovy 脚本)

[3. 通过 API 查看](#3. 通过 API 查看)

关键信息说明

[■其它 === 3.jenkins pipeline 中的post是什么](#■其它 === 3.jenkins pipeline 中的post是什么)

[post 的核心特性](#post 的核心特性)

[post 的条件关键字](#post 的条件关键字)

[post 的语法示例(声明式 Pipeline)](#post 的语法示例(声明式 Pipeline))

[post 的常见用途](#post 的常见用途)

注意事项

[脚本式 Pipeline 的替代方案](#脚本式 Pipeline 的替代方案)

总结


===

■模板

Groovy 复制代码
pipeline {
    agent any
    options { ... }
    parameters { ... }
    environment { ... }
    triggers { ... }
    tools { ... }
    stages {
        stage('Stage 1') {
            when { ... }
            agent { ... }
            environment { ... }
            steps { ... }
        }
        stage('Stage 2') {
            parallel { ... }
        }
    }
    post { ... }
}

===

■Jenkins的Pipline中有哪些区块

在 Jenkins 声明式 Pipeline 中,核心结构由多个**区块(Section)**组成,每个区块负责不同的功能。以下是完整的区块分类及其作用:

1. pipeline(顶层区块)

  • 作用 :定义整个 Pipeline 的入口,所有其他区块必须包含在 pipeline 内。

  • 示例:

    Groovy 复制代码
    pipeline {
        // 其他区块在此定义...
    }

2. agent(执行节点)

  • 作用:指定 Pipeline 在哪个 Jenkins 节点(或容器)上运行。

  • 常见选项:

    • any: 任意可用节点。

    • none: 不全局指定节点(需在每个 stage 中单独定义)。

    • label 'linux': 在标签为 linux 的节点上运行。

    • docker: 在 Docker 容器中运行(需指定镜像)。

  • 示例:

    Groovy 复制代码
    agent {
        docker {
            image 'maven:3.8.4' // 使用 Maven 容器
            args '-v /tmp:/tmp' // 挂载目录
        }
    }

3. stages(阶段集合)

  • 作用 :包裹所有具体的阶段(stage),是 Pipeline 的核心逻辑部分。

  • 示例:

    Groovy 复制代码
    stages {
        stage('Build') { ... }
        stage('Test') { ... }
        stage('Deploy') { ... }
    }

4. stage(单个阶段)

  • 作用:定义 Pipeline 中的一个逻辑步骤(如构建、测试、部署)。

  • 必须包含 :至少一个 steps 或 parallel 区块。

  • 示例:

    Groovy 复制代码
    stage('Build') {
        steps {
            sh 'mvn clean package'
        }
    }

5. steps(具体步骤)

  • 作用 :在 stage 中定义具体的操作(如执行 Shell 命令、调用插件)。

  • 常用命令:

    • sh: 执行 Linux Shell 命令。

    • bat: 执行 Windows Batch 命令。

    • script: 嵌入 Groovy 脚本(用于复杂逻辑)。

  • 示例:

    Groovy 复制代码
    steps {
        sh 'echo "Hello Jenkins!"'
        script {
            def version = '1.0.0'
            echo "Building version: ${version}"
        }
    }

6. post(后置处理)

  • 作用:根据 Pipeline 的执行结果(成功、失败等)触发后置操作。

  • 条件块:

    • always: 始终执行。

    • success: 仅成功时执行。

    • failure: 仅失败时执行。

    • aborted: 被中止时执行。

  • 示例:

    Groovy 复制代码
    post {
        always {
            cleanWs() // 清理工作区
        }
        failure {
            slackSend message: '构建失败!'
        }
    }

7. environment(环境变量)

  • 作用:定义全局或阶段级的环境变量(如密钥、路径)。

  • 示例:

    Groovy 复制代码
    environment {
        // 直接定义变量
        APP_VERSION = '1.0.0'
        // 引用 Jenkins 凭据
        AWS_ACCESS_KEY = credentials('aws-access-key')
    }

8. parameters(参数化构建)

  • 作用:定义用户输入的参数(如字符串、选项、文件)。

  • 常见类型:

    • string: 字符串参数。

    • choice: 下拉选项。

    • booleanParam: 布尔值。

    • file: 文件上传。

  • 示例:

    Groovy 复制代码
    parameters {
        string(name: 'DEPLOY_ENV', defaultValue: 'dev', description: '部署环境')
        choice(name: 'REGION', choices: ['us-east', 'eu-central'], description: 'AWS 区域')
    }

9. options(Pipeline 配置选项)

  • 作用:配置 Pipeline 的全局行为(如超时时间、重试策略)。

  • 常用选项:

    • timeout(time: 30, unit: 'MINUTES'): 设置超时时间。

    • retry(3): 失败时重试 3 次。

    • disableConcurrentBuilds(): 禁止并行执行。

  • 示例:

    Groovy 复制代码
    options {
        timeout(time: 1, unit: 'HOURS')
        disableConcurrentBuilds()
    }

10. triggers(触发条件)

  • 作用:定义 Pipeline 的触发方式(如定时触发、SCM 变更触发)。

  • 常见触发器:

    • cron('H */4 * * *'): 定时触发(每 4 小时)。

    • pollSCM('H */5 * * *'): 轮询 SCM 变更。

    • upstream(upstreamProjects: 'job1,job2'): 上游任务触发。

  • 示例:

    Groovy 复制代码
    triggers {
        cron('H 2 * * *') // 每天凌晨 2 点触发
    }

11. tools(工具路径配置)

  • 作用:指定构建工具(如 JDK、Maven)的路径(需提前在 Jenkins 全局配置中定义)。

  • 示例:

    Groovy 复制代码
    tools {
        maven 'Maven-3.8.4' // 使用全局配置的 Maven 工具
        jdk 'JDK-11'
    }

12. input(用户交互)

  • 作用:暂停 Pipeline 并等待用户输入(如确认部署)。

  • 示例:

    Groovy 复制代码
    stage('Deploy to Prod') {
        steps {
            input(message: '确认部署到生产环境?', ok: '确认')
        }
    }

13. when(条件执行)

  • 作用 :控制某个 stage 是否执行(基于条件判断)。

  • 常见条件:

    • branch 'master': 仅在 master 分支执行。

    • expression { return params.DEPLOY_ENV == 'prod' }: 根据参数值判断。

  • 示例:

    Groovy 复制代码
    stage('Deploy') {
        when {
            branch 'master'
            expression { params.DEPLOY_ENV == 'prod' }
        }
        steps { ... }
    }

14. parallel(并行执行)

  • 作用 :并行运行多个 stage(加速构建)。

  • 示例:

    Groovy 复制代码
    stage('Test') {
        parallel {
            stage('Unit Test') { steps { sh 'mvn test' } }
            stage('Integration Test') { steps { sh 'mvn verify' } }
        }
    }

■其它 === 1.cleanWs是jenkins的内置命令吗,如何使用

cleanWs 不是 Jenkins 的内置命令 ,它是由 Workspace Cleanup Plugin(工作区清理插件)提供的功能。该插件需要单独安装,但因其强大的灵活性(如按条件清理、排除文件等),在 Jenkins 实践中被广泛使用。

1. 安装 Workspace Cleanup Plugin

  • 步骤 :

    进入 Jenkins 控制台 → Manage Jenkins → Plugins → Available plugins → 搜索 Workspace Cleanup → 安装并重启 Jenkins。


2. cleanWs 的核心用法

基本语法
Groovy 复制代码
cleanWs(
    deleteDirs: Boolean,        // 是否删除子目录(默认 true)
    patterns: [[pattern: String, type: String]], // 排除或包含的文件模式
    cleanWhenSuccess: Boolean,  // 构建成功时清理(默认 true)
    cleanWhenAborted: Boolean,  // 构建中止时清理(默认 true)
    cleanWhenFailure: Boolean,  // 构建失败时清理(默认 true)
    cleanWhenUnstable: Boolean // 构建不稳定时清理(默认 true)
)

常用场景示例
(1) 简单清理(清空所有文件)
Groovy 复制代码
steps {
    cleanWs() // 清空工作区所有内容
}
(2) 排除指定文件/目录
Groovy 复制代码
steps {
    cleanWs(
        patterns: [
            [pattern: 'logs/**', type: 'EXCLUDE'], // 保留 logs 目录
            [pattern: '*.config', type: 'EXCLUDE'] // 保留所有 .config 文件
        ]
    )
}
(3) 仅在构建失败时清理
Groovy 复制代码
steps {
    cleanWs(
        cleanWhenSuccess: false,  // 成功时不清理
        cleanWhenFailure: true    // 仅失败时清理
    )
}

3. 在 Pipeline 中的使用

声明式 Pipeline

groovy

复制

下载

复制代码
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
    }
    post {
        always {
            cleanWs(
                patterns: [
                    [pattern: 'target/*.jar', type: 'EXCLUDE'] // 保留构建产物
                ]
            )
        }
    }
}
脚本式 Pipeline
Groovy 复制代码
node {
    try {
        stage('Build') {
            sh 'mvn clean package'
        }
    } finally {
        cleanWs() // 无论结果如何,清理工作区
    }
}
复制代码

4. cleanWs vs deleteDir()

特性 cleanWs deleteDir()
来源 Workspace Cleanup 插件 Jenkins 内置
灵活性 支持按条件清理、排除文件 只能删除整个目录
适用场景 需要精细控制清理内容的场景 快速清空目录
依赖 需安装插件 无需插件

5. 注意事项

  1. 路径问题 :
    cleanWs 默认清理当前工作目录(WORKSPACE),确保操作目录正确。

  2. 权限问题 :

    Jenkins 进程需要有工作目录的读写权限。

  3. 文件占用 :

    若文件被其他进程锁定(如正在运行的 JAR 文件),可能导致清理失败。

  4. 插件兼容性 :

    确保插件版本与 Jenkins 兼容(插件文档会注明支持的版本)。


总结

  • 需要灵活清理工作区时 :优先使用 cleanWs,通过 patterns 参数控制保留或删除的文件。

  • 简单快速清理时 :直接使用内置的 deleteDir()。

  • 关键场景 :建议在 post { always { ... } } 中清理工作区,避免残留文件占用磁盘空间。

■其它 === 2.如何查看jenkins中已经定义的节点

1. 通过 Web 界面查看

(1) 进入节点管理页面
  • 打开 Jenkins 主页 → 点击左侧菜单的 Manage Jenkins(管理 Jenkins)。

  • 在管理页面中找到 Nodes (节点)或 Manage Nodes and Clouds(管理节点和云),点击进入。

(2) 查看节点列表
  • 页面会列出所有已定义的节点,包括:

    • Built-In Node(主节点,即 Jenkins 控制器)。

    • 其他代理节点(如 linux-agent、windows-agent 等)。

(3) 查看节点详情
  • 点击节点名称(如 linux-agent)→ 进入节点详情页,可查看:

    • 节点状态(在线/离线)。

    • 标签(Labels)。

    • 工作目录路径(Remote root directory)。

    • 启动方式(Launch method)。

    • 系统信息(如操作系统、Java 版本)。

2. 通过命令行查看(需管理员权限)

(1) 使用 Jenkins CLI

Jenkins 提供了命令行工具(CLI),可通过以下命令列出所有节点:

Groovy 复制代码
java -jar jenkins-cli.jar -s http://your-jenkins-url list-nodes
(2) 使用 Groovy 脚本

在 Jenkins 的 Script Console(脚本控制台)中执行以下脚本:

Groovy 复制代码
Jenkins.instance.nodes.each { node ->
    println "节点名称: ${node.displayName}"
    println "标签: ${node.labelString}"
    println "工作目录: ${node.remoteFS}"
    println "状态: ${node.toComputer().online ? '在线' : '离线'}"
    println "------"
}

3. 通过 API 查看

调用 Jenkins REST API 获取节点列表(需权限):

Groovy 复制代码
curl -u username:api-token http://your-jenkins-url/computer/api/json

返回的 JSON 数据中会包含所有节点的详细信息。


关键信息说明

字段 说明
节点名称 节点的唯一标识符(如 linux-agent)。
标签 节点的分类标记(如 linux、docker),用于任务调度。
工作目录 节点的工作路径(如 /var/jenkins/workspace)。
执行器数量 节点可同时运行的任务数(默认为 1)。
状态 节点是否在线(Online/Offline)。

■其它 === 3.jenkins pipeline 中的post是什么

post 的核心特性

  1. 条件触发 :通过预定义的条件关键字 (如 always、success、failure),指定不同执行结果下需要运行的步骤。

  2. 执行顺序 :post 中的操作会在所有 stages 执行完毕后运行。

  3. 灵活性:可以同时定义多个条件块,每个块内的步骤独立执行。


post 的条件关键字

以下是常用的条件类型:

条件关键字 触发条件
always 无论 Pipeline 结果如何,始终执行(最常用,例如清理工作目录)
success 仅当 Pipeline 全部阶段成功完成时执行(例如发送成功通知)
failure 仅当 Pipeline 任何阶段失败时执行(例如发送失败报警或记录日志)
aborted 当 Pipeline 被手动中止时执行(例如通知构建被取消)
unstable 当 Pipeline 标记为 unstable 时执行(例如测试通过但覆盖率不足)
changed 当 Pipeline 状态与上一次不同时执行(例如从失败恢复为成功时通知)

post 的语法示例(声明式 Pipeline)

Groovy 复制代码
pipeline {
    agent any
    stages {
        // 主要构建阶段...
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
    }

    // 后置操作
    post {
        // 无论结果如何,始终清理工作目录
        always {
            deleteDir()
        }

        // 构建成功时发送通知
        success {
            slackSend channel: '#builds', message: '构建成功!'
        }

        // 构建失败时发送邮件
        failure {
            mail to: 'team@example.com', subject: '构建失败', body: '请检查日志!'
        }

        // 构建被中止时记录日志
        aborted {
            echo 'Pipeline 被用户中止'
        }
    }
}

post 的常见用途

  1. 清理工作目录

    Groovy 复制代码
    post {
        always {
            deleteDir()  // 清空工作区
        }
    }
  2. 发送通知

    Groovy 复制代码
    post {
        failure {
            slackSend channel: '#alerts', message: '构建失败: ${BUILD_URL}'
        }
    }
  3. 归档构建产物

    Groovy 复制代码
    post {
        success {
            archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
        }
    }
  4. 生成测试报告

    Groovy 复制代码
    post {
        always {
            junit 'target/surefire-reports/*.xml'  // 记录单元测试结果
        }
    }

注意事项

  1. 仅适用于声明式 Pipeline
    post 是声明式 Pipeline 的语法特性,脚本式 Pipeline 需通过 try-catch-finally 实现类似逻辑。

  2. 条件块的执行顺序

    Jenkins 会按 post 中定义的顺序执行条件块,但每个条件块是否执行仍取决于其触发条件。

  3. 灵活组合条件

    可以通过嵌套逻辑实现更复杂的条件判断(例如:仅在失败且不是中止时触发)。


脚本式 Pipeline 的替代方案

脚本式 Pipeline 中没有原生 post 块,但可通过 try-catch-finally 模拟类似行为:

Groovy 复制代码
node {
    try {
        stage('Build') {
            // 构建步骤...
        }
    } catch (err) {
        // 失败处理
        echo "构建失败: ${err}"
    } finally {
        // 始终执行的清理操作(类似 post { always })
        deleteDir()
    }
}

总结

post 是 Jenkins Pipeline 中管理后置操作的核心机制,能帮助你在不同构建结果下自动执行关键任务(如清理、通知、归档)。掌握它的用法可以让你的 Pipeline 更健壮、更易维护!

==

相关推荐
别动我齐刘海7 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
honsor7 小时前
机房IP化改造首选:以太网温湿度传感器,PoE供电+Modbus TCP一网搞定
linux·运维·服务器
星创易联7 小时前
PLC数据采集与远程运维平台:从边缘计算到集中监控
大数据·运维·边缘计算
寻道模式8 小时前
【运维心得】完整教程:绕过Win11限制让老机焕发新生
运维·操作系统·win11
zzu123zsw8 小时前
从 proxy_pass 末尾斜杠到 WebAssembly 预压缩:深挖 Nginx 生产环境四大高频踩坑点
运维·nginx·wasm·webassembly·devops·运维排错
张洛闻Eren8 小时前
Ansible【第一课】:Ansible介绍
运维·数据库·云原生·kubernetes·github·ansible
郝亚军9 小时前
RK3562 中有 mosquitto、nginx 了,还需要 http,ftp,tftp 等协议吗?
运维·nginx·http
重生之小比特9 小时前
【Linux系统】07 进程状态
linux·运维·服务器
敲代码的彭于晏10 小时前
2026 K8s 零基础入门:手把手教你一步步搭建 Kubernetes 集群
java·运维·全栈
ManageEngine卓豪10 小时前
智能运维如何降低 MTTR:告警聚类、因果分析与自动化修复的工程拆解
运维·智能运维·mttr