翟志军,程序员。
https://showme.codes博主。现就职于某传统家电制造公司,参与DevOps产品的开发。
网站首页 软件下载 游戏下载 翻译软件 电子书下载 电影下载 电视剧下载 教程攻略
书名 | Jenkins 2.x实践指南 |
分类 | 教育考试-考试-计算机类 |
作者 | 翟志军编 |
出版社 | 电子工业出版社 |
下载 | |
简介 | 作者简介 翟志军,程序员。 https://showme.codes博主。现就职于某传统家电制造公司,参与DevOps产品的开发。 目录 目录 1 关于软件工程生产力 1 1.1 从另一个角度看“提高软件工程生产力” . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 从劳动力要素考虑提高软件工程生产力 . . . . . . . . . . . . . . . . . . . . 2 1.1.2 从劳动对象要素考虑提高软件工程生产力 . . . . . . . . . . . . . . . . . . . 2 1.1.3 从生产工具要素考虑提高软件工程生产力 . . . . . . . . . . . . . . . . . . . 3 1.1.4 生产力三要素的意义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Jenkins 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Jenkins 与 DevOps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 pipeline 入门 6 2.1 pipeline 是什么 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Jenkinsfile 又是什么 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 pipeline 语法的选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4 创建个 pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.5 从版本控制库拉取 pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.6 使用 Maven 构建 Java 应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.7 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 pipeline 语法讲解 16 3.1 必要的 Groovy 知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 pipeline 的组成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.1 pipeline 最简结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.2 步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3 post 部分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.4 pipeline 支持的指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.5 配置 pipeline 本身 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.6 在声明式 pipeline 中使用脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.7 pipeline 内置基础步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.7.1 文件目录相关步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.7.2 制品相关步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7.3 命令相关步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.7.4 其他步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.7.5 小贴士 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.8 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4 环境变量与构建工具 37 4.1 环境变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.1 Jenkins 内置变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.2 自定义 pipeline 环境变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.1.3 自定义全局环境变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2 构建工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.1 构建工具的选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.2 tools 指令介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.3 JDK 环境搭建 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.4 Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.2.5 Go 语言环境搭建 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2.6 Python 环境搭建 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.3 利用环境变量支持更多的构建工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.4 利用 tools 作用域实现多版本编译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.5 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5 代码质量 50 5.1 静态代码分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.1.1 代码规范检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.1.2 使用 PMD 进行代码规范检查 . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.1.3 各静态代码分析器之间的区别 . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.2 单元测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.2.1 JUnit 单元测试报告 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.2.2 JaCoCo 实现代码覆盖率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.2.3 代码覆盖率越高,软件的质量就越高吗 . . . . . . . . . . . . . . . . . . . . 58 5.3 性能测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.3.1 准备性能测试环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.3.2 运行 JMeter 测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.4 SonarQube:持续代码质量检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.4.1 Maven 与 SonarQube 集成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.4.2 Jenkins 与 SonarQube 集成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.4.3 使用 SonarQube Scanner 实现代码扫描 . . . . . . . . . . . . . . . . . . . . . 67 5.4.4 SonarQube 集成 p3c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.4.5 将分析报告推送到 GitLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.5 Allure 测试报告:更美观的测试报告 . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.5.1 Allure 测试报告介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.5.2 集成 Allure、Maven、Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.6 当我们谈质量时,谈的是什么 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.7 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6 触发 pipeline 执行 77 6.1 什么是触发条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.2 时间触发 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.2.1 定时执行:cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.2.2 轮询代码仓库:pollSCM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 6.3 事件触发 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 6.3.1 由上游任务触发:upstream . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 6.3.2 GitLab 通知触发 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.3.3 在 pipeline 中实现 GitLab trigger . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.4 将构建状态信息推送到 GitLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 6.5 使用 Generic Webhook Trigger 插件实现触发 . . . . . . . . . . . . . . . . . . . . . . 87 6.5.1 从 Webhook 请求中提取参数值 . . . . . . . . . . . . . . . . . . . . . . . . . 89 6.5.2 触发具体某个 Jenkins 项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.5.3 根据请求参数值判断是否触发 Jenkins 项目执行 . . . . . . . . . . . . . . . . 91 6.5.4 控制打印内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.5.5 控制响应 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.6 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7 多分支构建 93 7.1 创建多分支 pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.2 根据分支部署到不同的环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 7.3 when 指令的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.4 GitLab trigger 对多分支 pipeline 的支持 . . . . . . . . . . . . . . . . . . . . . . . . . 99 7.5 Generic Webhook Trigger 插件在多分支 pipeline 场景下的应用 . . . . . . . . . . . . 99 7.6 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 8 参数化 pipeline 101 8.1 什么是参数化 pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 8.2 使用 parameters 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 8.2.1 parameters 指令支持的参数类型 . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.2.2 多参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 8.3 由另一个 pipeline 传参并触发 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 8.4 使用 Conditional BuildStep 插件处理复杂的判断逻辑 . . . . . . . . . . . . . . . . . 106 8.5 使用 input 步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 8.5.1 input 步骤的简单用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.5.2 input 步骤的复杂用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 8.6 小贴士 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 8.6.1 获取上游 pipeline 的信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 8.6.2 设置手动输入步骤超时后,pipeline 自动中止 . . . . . . . . . . . . . . . . . 111 8.7 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 9 凭证管理 112 9.1 为什么要管理凭证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 9.2 凭证是什么 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 9.3 创建凭证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 9.4 常用凭证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 9.4.1 Secret text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 9.4.2 Username with password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 9.4.3 Secret file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 9.4.4 SSH Username with private key . . . . . . . . . . . . . . . . . . . . . . . . . . 116 9.5 优雅地使用凭证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 9.6 使用 HashiCorp Vault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 9.6.1 HashiCorp Vault 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 9.6.2 集成 HashiCorp Vault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 9.7 在 Jenkins 日志中隐藏敏感信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 9.8 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 10 制品管理 123 10.1 制品是什么 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 10.2 制品管理仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 10.3 过渡到制品库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 10.4 管理 Java 栈制品 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 10.4.1 使用 Maven 发布制品到 Nexus 中 . . . . . . . . . . . . . . . . . . . . . . . . 125 10.4.2 使用 Nexus 插件发布制品 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 10.5 使用 Nexus 管理 Docker 镜像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 10.5.1 Nexus:创建 Docker 私有仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . 129 10.5.2 创建 Docker 私有仓库凭证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 10.5.3 构建并发布 Docker 镜像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 10.5.4 小贴士 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 10.6 管理原始制品 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 10.6.1 创建 raw 仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 10.6.2 上传制品,获取制品 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 10.7 从其他 pipeline 中拷贝制品 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 10.8 版本号管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 10.8.1 语义化版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 10.8.2 版本号的作用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 10.8.3 方便生成版本号的 Version Number 插件 . . . . . . . . . . . . . . . . . . . . 137 10.9 小贴士 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 10.9.1 Nexus 匿名用户权限问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 10.9.2 制品库的容量要大 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 10.10 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 11 可视化构建及视图 140 11.1 Green Balls 插件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 11.2 Build Monitor View 插件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 11.3 使用视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 11.3.1 使用项目的维度建立视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 11.3.2 设置默认视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 11.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 12 自动化部署 147 12.1 关于部署有什么好说的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 12.1.1 部署不等于发布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 12.1.2 什么是自动化部署 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 12.1.3 自动化运维工具解决的问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 12.2 Jenkins 集成 Ansible 实现自动化部署 . . . . . . . . . . . . . . . . . . . . . . . . . . 149 12.2.1 Ansible 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 12.2.2 Jenkins 与 Ansible 集成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 12.2.3 Ansible 插件详解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 12.3 手动部署比自动化部署更可靠吗 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 12.4 如何开始自动化部署 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 12.5 小贴士 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 12.6 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 13 通知 160 13.1 邮件通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 13.1.1 使用 Jenkins 内置邮件通知功能 . . . . . . . . . . . . . . . . . . . . . . . . . 160 13.1.2 使用 Email Extension 插件发送通知 . . . . . . . . . . . . . . . . . . . . . . . 162 13.2 钉钉通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 13.3 HTTP 请求通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 13.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 14 分布式构建与并行构建 169 14.1 Jenkins 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 14.2 增加 agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 14.2.1 对 agent 打标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 14.2.2 通过 JNLP 协议增加 agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 14.2.3 通过 JNLP 协议增加 Windows agent . . . . . . . . . . . . . . . . . . . . . . . 175 14.2.4 通过 Swarm 插件增加 agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 14.2.5 agent 部分详解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 14.2.6 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 14.3 将构建任务交给 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 14.3.1 在 Jenkins agent 上安装 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . 180 14.3.2 使用 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 14.3.3 配置 Docker 私有仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 14.4 并行构建 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 14.4.1 在不同的分支上应用并行构建 . . . . . . . . . . . . . . . . . . . . . . . . . . 183 14.4.2 并行步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 14.4.3 并行阶段与并行步骤之间的区别 . . . . . . . . . . . . . . . . . . . . . . . . 185 14.5 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 15 扩展 pipeline 186 15.1 为什么要扩展 pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 15.2 在 pipeline 中定义函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 15.3 使用共享库扩展 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 15.3.1 创建共享库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 15.3.2 使用共享库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 15.3.3 @Library 的更多用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 15.3.4 共享库结构详细介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 15.3.5 使用共享库实现 pipeline 模板 . . . . . . . . . . . . . . . . . . . . . . . . . . 192 15.4 通过 Jenkins 插件实现 pipeline 步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 15.4.1 生成 Jenkins 插件代码骨架 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 15.4.2 启动 Jenkins 测试:mvn hpi:run . . . . . . . . . . . . . . . . . . . . . . . . . 196 15.4.3 在 Jenkinsfile 中使用 greet 步骤 . . . . . . . . . . . . . . . . . . . . . . . . 196 15.4.4 全局配置插件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 15.5 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 16 Jenkins 运维 200 16.1 认证管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 16.1.1 使用 Jenkins 自带的用户数据库 . . . . . . . . . . . . . . . . . . . . . . . . . 200 16.1.2 使用 LDAP 认证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 16.2 授权管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 16.2.1 使用 Role-based Authorization Strategy 插件授权 . . . . . . . . . . . . . . . . 205 16.2.2 管理角色 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 16.2.3 权限大全 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 16.2.4 角色分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 16.2.5 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 16.3 Jenkins 监控 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 16.3.1 使用 Monitoring 插件监控 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 16.3.2 使用 Prometheus 监控 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 16.4 Jenkins 备份 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 16.4.1 JENKINS_HOME 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 16.4.2 使用 Periodic Backup 插件进行备份 . . . . . . . . . . . . . . . . . . . . . . . 214 16.5 汉化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 16.6 Jenkins 配置即代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 16.7 使用 init.groovy 配置 Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 16.8 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 17 自动化运维经验 220 17.1 小团队自动化运维实践经验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 17.1.1 先做监控和告警 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 17.1.2 一开始就应该做配置版本化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 17.1.3 Jenkins 化:将打包工作交给 Jenkins . . . . . . . . . . . . . . . . . . . . . . 223 17.1.4 将制品交给 Nexus 管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 17.1.5 让 Jenkins 帮助我们执行 Ansible . . . . . . . . . . . . . . . . . . . . . . . . . 225 17.1.6 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 17.2 ChatOps 实践 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 17.2.1 Rocket.Chat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 17.2.2 Hubot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 17.2.3 Hubot 与 Jenkins 集成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 17.2.4 Jenkins 推送消息到 Rocket.Chat . . . . . . . . . . . . . . . . . . . . . . . . . 231 17.3 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 18 如何设计 pipeline 232 18.1 设计 pipeline 的步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 18.2 以 X 网站为例,设计 pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 18.3 X 网站 pipeline 详解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 18.3.1 尽可能将所有的具体操作都隐藏到共享库中 . . . . . . . . . . . . . . . . . . 236 18.3.2 只生成一次制品 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 18.3.3 对不同环境采用同一种部署方式 . . . . . . . . . . . . . . . . . . . . . . . . 237 18.3.4 配置版本化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 18.3.5 系统集成测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 18.3.6 如何实现指定版本部署 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 18.3.7 主干开发,分支发布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 18.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 后记 240 内容推荐 本书首先介绍笔者对软件工程生产力的独到见解。其次通过一个Hello world带领初学者入门Jenkins pipeline。接着详细介绍Jenkins pipeline的语法,以及在Jenkins pipeline中如何实现持续集成、持续交付中各个阶段,包括构建、测试、制品管理、部署等;在发现现有pipeline的步 |
随便看 |
|
霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。