TA的每日心情 | 开心 18 小时前 |
---|
签到天数: 294 天 [LV.8]以坛为家I
管理员
- 积分
- 10089
|
Java电子书:Jenkins 2权威指南 PDF 电子书 Java吧 java8.com
* o& V6 A7 Z; g, ~) R
1 c* V4 C8 f" Q* U- [; E# p8 _作者:Brent Laster(布伦特·莱斯特) 著 郝树伟,石雪峰,雷涛,李华强 译出版社:电子工业出版社出版时间:2019年04月 # {+ K0 Y w6 f0 \: V& W
1 v6 J* M# x" `, b- |编号:166-Java吧资源免费-X0058【Java吧 java8.com】
& x# T4 X5 R6 ]- X' c' s5 |/ Y5 W- b. U/ o
, a6 |4 W3 h/ c7 L% Z: D, F8 c$ }9 w2 j. f& x( y2 Z- {, R" ~- g
目录:
. L. m& y/ l0 {# m! E7 ?2 c8 |" @( Q" n
0 {+ @7 P! E) f/ |6 U3 |+ k2 h1 G第1章 Jenkins 2简介 1
- b( G2 _( p" ^1 W) ]/ J$ hJenkins 2是什么 2
2 I1 P( f$ [7 j6 M n$ CJenkinsfile 34 \8 v3 X3 f6 R) m3 d* P7 X8 ~0 Q
声明式流水线 5
0 R0 h* a# G4 \2 R$ X4 sBlue Ocean界面 6, ?& A3 o" a) E( `; f8 ~+ H
Jenkins 2的全新任务类型 7; ]1 p5 ?8 ^- I# h
做出转变的原因 10
) i& |( f# ?( j" j+ TDevOps理念的转变 10
+ _, [& h) ~: P/ g. E, Z: J- G- O装配流水线 11& u3 u0 l3 n3 R% d& |( f+ V8 E
可恢复性 11
. [8 H# E8 _9 ~& ? u可配置性 11: N" d1 A, }. s5 Y0 Q9 w% R
共享工作空间 11
! T' g4 O# d6 N1 E专业知识 121 \( U6 |9 G$ O* N; G
访问逻辑 12 U) n$ v) j9 R3 P% K& l& g, k
流水线源管理 12
4 U7 @# r' v9 }- L, o竞争 12# Q# S1 O' H! E; I n
迎接挑战 13
! K W6 F9 h5 S兼容性 139 ^ v5 E3 T5 k8 ^9 r
流水线兼容性 13
/ q8 d7 x V, I* G5 x+ `插件兼容性 15
8 k2 l9 D1 w" e* Y% A检查兼容性 20
* [7 o9 c3 [$ [9 `5 ^总结 21" h. R% r6 A0 u3 [
第2章 基础知识 23$ I+ n v" ?4 J9 b8 O
语法:脚本式流水线和声明式流水线 24
: j, n9 x: N. g+ {+ w- y3 _如何选择脚本式语法和声明式语法 259 H/ F+ p. I1 l$ C
系统(system):主节点(master)、节点(node)、代理节点(agent)和执行器(executor) 26
7 r) J% A0 z" h J$ w/ I4 N主节点 27
4 c# m, c; R# i3 n( P. X0 u' o; ?0 g节点 27( L5 @1 q, v3 F" y7 d5 x: m' L
代理节点 27
. q% `- U1 V3 G O8 X1 V执行器 28& {, s2 y0 e* X; J1 [" t' M1 Q+ L! |
创建节点 29$ H# x2 f; k. e+ T& e8 X
结构:使用Jenkins DSL 31
0 Z) y4 G2 t5 E+ {节点 32 N# j/ w9 l, o: m
阶段 344 R a( [# }* k" H* F( g
步骤 34
% d [& B& B7 r, a+ a z支持环境:开发一个流水线脚本 36; s2 H5 x0 h' ?: Q5 M: r
创建一个流水线项目 369 I, ]5 i- D( s9 e, Q0 A' C
编辑器 38
7 p5 Z. G" a& H2 c( ?3 Z使用代码片段生成器 398 H5 }4 Q! \2 ^0 A
运行一条流水线 434 k3 ^( M! t2 V* `4 c6 n* ~
回放 495 P8 G W( A* G6 P8 a+ A& p
总结 528 ~* w+ b K/ I9 f$ s4 r$ B0 W
第3章 流水线执行流程 53
9 a! x5 t& J2 [% b* M6 V触发任务 53
% v, P+ i, \7 X$ z) O# V! E在其他项目构建后构建 54
2 b2 ]3 Z6 k3 i0 r5 b2 l q+ Q周期性构建 54# K5 W1 V* {9 ~; t. v5 l
使用GitHub钩子触发器进行GitSCM轮询 57
, z6 Z- z- P3 [! T2 X4 h- l2 mSCM轮询 57: a9 P$ o) G: |" e. r
静默期 58- K& l* c7 N; ]* _5 @/ T
远程触发构建 58
5 d0 F) l9 w/ ?: T4 Y用户输入 58, G. d, l5 n' \
输入 594 G' T. A/ D, K7 Y+ g
参数 62* v6 {8 p# ^% U3 S9 o; {4 ?
多个输入参数的返回值 68
4 S$ |4 [( f \+ f* u& d/ @参数与声明式流水线 69; D& B3 F. m1 U7 Q1 C
流程控制选项 74$ c# s( e) L# ~" ^6 w: t! l2 n
超时(timeout) 74
. n. L8 A" ]$ E! T, z; |& N) g重试(retry) 76
" c+ N2 y3 N$ Q睡眠(sleep) 76
' _4 f% o) K s+ J V等待直到(waitUntil) 76
) e/ M+ X1 v+ V7 {0 `& h5 K+ Q' t处理并发 78
0 |$ x: w& m4 W2 F9 J" i9 G使用lock步骤对资源加锁 78& X! ]5 L$ C0 m
使用milestone来控制并发构建 808 {+ [( a! N9 v% N; S9 D
在多分支流水线中限制并发 829 D5 l. Q6 ]# L6 {- k/ M# v
并行地运行任务 822 L S" |/ i f
有条件的执行功能 92; _7 d/ D4 ?/ ^2 \5 v5 ^
构建后处理 .946 W, E b3 Z9 A& C# E. N0 g
脚本式流水线构建后处理 94
6 s$ s, N/ I2 { k" N3 k声明式流水线与构建后处理 96
# P" Y7 Y" Q' o6 C总结 975 \- ]; M* t. q3 _8 Z. P
第4章 通知与报告 99& Z( X% b# X' k( o% |4 o
通知 992 K+ j* d7 q" O H: x
电子邮件 100" Y8 K4 U v8 [9 B
协作服务 110
% ^: H( D, k, M报告 120
' k! B1 e' V3 H& b发布HTML报告 120
% A' H1 J$ Z h" X$ |) G+ M) U" M A总结 123
6 _3 p& \; l }5 y8 l: s第5章 访问与安全 125# L& t5 `2 m) p0 T4 m
安全加固Jenkins 125
' [ H% M9 y Y6 ` }! f; o( L启用安全性 126$ S5 ^( j: O, _( O
其他全局安全配置 1293 [9 v+ w+ g7 o* O, b* }8 W
Jenkins中的凭证 1336 A# a( d0 r. o
凭证范围 134" A+ L3 Y5 i; z C4 X
凭证域 135
% i" u' Z$ ]+ B! u凭证提供者 135
2 @- I, B% Q6 t凭证存储 136
?; L V5 ]/ J \% o; ^管理凭证 136
+ l8 J6 W/ b3 k# E f选择凭证提供者 136
% k" F3 h' y; I% \选择凭证类型 137
6 v9 o$ r2 T; s: v' ^) p8 H4 V通过提供者指定凭证类型 138
3 `& `+ t5 e2 T创建和管理凭证 139 t4 _' `* ]7 \5 o8 v
上下文链接 141; X7 T. s3 h3 ]' L7 `( ]
添加一个新域或者凭证 141
1 Y3 T$ l4 j5 N( v使用新域和凭证 144
% N" `4 m( S# t, x* C高级凭证:基于角色的访问权限 145! I4 W1 E4 a; E0 N
基本用途 146+ N, e0 g' Q! J+ y
管理角色 147" w9 b* J8 H3 `2 }
分配角色 1528 E4 O( R, T7 F4 F+ O
角色策略宏 155 q( ~6 T! A/ @0 K9 Q) B
在流水线中使用凭证 157
0 @$ Z9 ?; \) H$ E用户名和密码 157
6 z z7 J( p& j: W) N% }SSH密钥 158
* |* [. M9 x% e( R7 w令牌凭证 159
^0 }' Z2 B4 \; P6 l5 |) a4 Y控制脚本安全性 160
& i. W0 Z, Y) M( H1 {脚本检查 160: B; \7 o8 b1 C7 z0 c* S
脚本批准 161
+ b% T; w4 j" s! c" uGroovy沙箱 162
* p {; ^! T3 k. ~. ]Jenkins凭证与Vault配合使用 164
) c# u6 @3 Z, X1 v* P方法 1645 _( k- _& I" s
安装 165
, u( J6 W2 y( c创建一个策略 165
- j/ o2 {0 N z9 p7 j% r& ~身份验证 1663 {' l$ y7 ^* B, Z$ e [
在Jenkins中使用Vault 168
% u" Q5 b5 f+ m- Y! B# s) i6 D总结 171
0 g& a' u& W! C, x- S第6章 扩展你的流水线 173+ l& S0 @- H' [
可信库和不可信库 1736 k- c1 g1 g1 ?0 R' {
内部库与外部库 174
/ y8 A { d- l, l0 M! L* ~内部库 174
/ ?8 M! P( V# _- n7 x外部库 176) R4 M% i4 ?+ }2 A* G
从代码仓库获取库 1780 A' g/ k r2 k1 V2 _
Modern SCM 178
! i6 u1 f/ f# x7 q1 DLegacy SCM 178 u, ~3 m- J( e
在流水线脚本中使用库 179; m3 y; ^" E& g$ @, e
从源码版本控制中自动下载库 180" C' Z o; G' {# O5 f) G& X/ m
加载库到脚本中 180
9 z6 z# C6 T/ WJenkins项目中的库范围 1829 Z2 @, Q9 a% i; G4 ]5 H
库结构 183/ h) X& S k' t8 a e2 o' @( A: ^
样本库例程 183
6 N3 l1 B" n+ O7 Y共享库代码的结构 184
1 y e; I6 }$ o4 y# d使用第三方库 195
$ f8 z; B5 d4 ]% P9 B直接加载代码 196
" f% {7 |5 J" d0 N( k1 S/ ^从外部SCM加载代码 196
1 v! C# h+ {9 S1 L7 T- s" `) k回放外部代码和库 198- n: q0 S6 C" e
深入研究可信与不可信代码 200# c, c7 h- |/ c" Z! I' Q& }
总结 203
* F" g. k- M( l9 u第7章 声明式流水线 205
0 o* A8 R. {: z+ C4 }" ]动机 206
/ n. g: U: @" \% e( h% j不直观 2060 T7 G/ C, m" y6 E6 @$ y/ y
掌握Groovy 206
% ]4 Y- D2 ~/ c: B其他必需的装配 2062 k8 R8 K4 w1 v0 y" o( [, `# \
结构 207
, W: O* `$ ?3 ]+ i代码块 208# M$ g1 x& W1 s
部分 208
6 ]* `) }" ~1 t指令 2092 ]8 r7 [, [8 y' f
步骤 209! _& ]0 k9 K: _( F0 ~8 k5 G, G
条件 210
" t1 Q2 I. P; V. Y B; M构建代码块 210! k- N9 n [8 H7 }' O
pipeline 211
, O |+ ^# W, ]1 f9 c$ w* D' pagent 212) T- a, H% X, F. U: q9 R
environment 2154 D9 r* K) f* _; M( E8 X, b
tools 216
) f6 @3 h: J. {) h) xoptions 219
: }0 b$ s7 ~* p5 ntriggers 2220 C& L% A" K& D! ]& l
parameters 224
@8 e# y" i5 d+ ^* o% h: @6 vlibraries 227
" W0 C1 ?7 V: Q# N$ V& j8 qstages 2281 f4 j. o t: U3 e' M
post 231
" O% ~5 O4 W" y0 F/ {处理非声明式的代码 232
9 |( i7 k8 d/ k0 m. @检查你的插件 233
$ e+ B# S) _2 S# v$ M1 ?创建一个共享库 233+ q6 b( a) O6 M3 H( O
在pipeline代码块之外放置代码 233
! q9 ?9 }; u( @! n) w/ b9 m. Uscript语句 234
, I; b; |! z* J在一个阶段中使用parallel 234
7 J) D7 G, c: z0 M脚本检查与错误报告 235
0 r( v0 g4 P1 j) b/ k1 Q" E) J7 `0 M声明式流水线与Blue Ocean接口 238
# y! |, x5 u! K- `$ K总结 238
, h6 n- Z& G% P2 Q0 c6 i& K6 ~第8章 理解项目类型 241
3 e. D+ H' L W. V3 L5 y2 Y( L* r) Z9 K通用项目选项 241
2 q3 _ J; ?# Z, Q; u# s/ b8 M基础设置 241
o5 U3 A' A- |) X- U9 h源码管理 2473 V; j0 s8 T5 }& U ^3 ^+ l9 j
构建触发器 2494 N$ M; [, Z% O" G" Q
构建环境 256) l7 U) x: h2 Z$ e
构建 266
% L+ ^. R# \' ?$ G) [3 A, P! y. ~构建后操作 266
( Q# W5 n7 K! V6 o, i7 d0 @3 D/ e项目类型 266+ i8 B: d: W$ h+ x) |3 {
自由风格类型项目 267
7 q( u4 h# V! g) k* M7 k! qMaven项目类型 267
8 E' T7 N2 [4 W" V9 V! J流水线项目类型 270* v' J' F0 Z, o+ T: X! V* ~& S
外部任务项目类型 272
! W, i+ o& ^/ T; c多配置项目类型 275
! ]8 @: n; z) S K9 A, u% gIvy项目 280# y1 [7 D; ^: ^4 i) D. z
文件夹 282% o6 G& j7 S# v5 f2 L& |0 C: s
多分支流水线项目 287) G# P4 m* w& K% R" o; k" j
GitHub组织项目 292
# K% A$ E: L: d$ o1 w8 qBitbucket团队/项目 296& _. {9 v$ p2 ~' l
总结 299 ]7 @# f' W) S( A
第9章 Blue Ocean用户界面 301
1 q" E9 z% Y( c# o" Z# C部分:管理已有的流水线 302
7 v6 ?/ b* M" Z主界面 3027 j. ^" P$ D$ R, i, T
项目详情页面 305% o% u) m- I# W) g" J0 ~
运行页面 316
+ S- C8 u+ E. K7 [第二部分:使用Blue Ocean编辑器 3252 I& \8 c( Z; |5 f
不依赖现有Jenkinsfile创建一个全新的流水线 326# A" \* C* q A6 u
使用编辑器 330
; ^) Z, v; @' W( ^: z0 s编辑已有的流水线 340' Q* f& y* r' `; ?
导入和编辑已有的流水线 344
% a) f9 @0 ]! x/ S$ y5 a! ?/ U使用非GitHub仓库支持流水线 354, Y9 u7 ?/ ? i" ?3 Q+ s9 S
总结 356
8 _8 j7 N( w) n2 ?) |第10章 转换 357
' M# \* ^) V; ^通用的准备 358* o- L7 A9 y( S1 w F6 M
逻辑和准确性 358
1 b# X% g7 u" t项目类型 358
+ q, C& [$ E w1 l- {/ r系统 358
( j' v9 X% y7 u% W访问 358
( n- I a$ B0 j/ F2 p& x8 v4 J: w全局配置 359; I3 l2 q/ j( r; p3 [7 P. ^
插件 359
- K5 X4 `" A! y2 T( i- T4 E8 Q6 Y共享库 359. P$ z# z% q/ w9 I* }
将自由风格类型的流水线转换为脚本式流水线 360
5 q& `% h8 X% @源码 364
d& S3 S8 ]5 [! N6 s% R编译 369, w6 j& g; r, E$ C$ s
单元测试 373
3 C e; L# K& @& ?7 _! D# k& x集成测试 377
" U$ \3 d; I# u8 A! T7 t迁移流水线接下来的部分 380
/ L* S' X0 g* f: s) G* z从Jenkins流水线项目转换为Jenkinsfile 385
' s, L; k7 H) R g W方法 388
- Z6 q1 ? F# a2 D3 Y# T后的步骤 395
5 G/ u$ M6 c5 j% V6 Z# e5 [& Q+ Z4 z' ?从脚本式流水线转换为声明式流水线 3973 a% [- i; r# A4 a H7 ~/ B
样本流水线 397# N# V* U" O. L E8 Z
转换 399
+ O: `" P! _/ n8 r完成转换 4025 e3 W' i$ Z# y1 _. K, c( Y- `
可用于转换的通用指南 4035 A. D8 v3 m$ z0 Q( r
总结 405
& k8 q: `" \8 ]" u第11章 操作系统环境集成(shell、工作空间、环境和文件) 4073 E6 }; _7 E5 p1 p* ?. O a
使用shell的步骤 4073 V& Z# Q) a+ y3 ?! S3 O: W
sh步骤 408
3 }* B; v3 l1 A9 j* O5 d7 y) Hbat步骤 413 q. D8 I4 z9 {* G2 C
powershell步骤 414) R% R* t, r9 I2 Z9 c
使用环境变量 4151 ]1 _6 q8 U6 [ O3 w) B
withEnv步骤 416" Z# z9 k1 z1 e. D1 g
使用工作空间 418& M0 S" L# W# O' B8 P7 p
创建自定义工作空间 418
, @0 f* R1 ?+ U* N( F4 y: J0 f清理工作空间 420
$ @8 ]1 y' a( n# K7 n! Y9 b文件和目录步骤 422
! K1 L" r( c1 p0 k使用文件 4223 c. e5 Q# S8 |& M6 j
使用目录 423: h$ ^& @+ g8 z8 D1 \) @
使用文件和目录的更多操作 4243 j* x) J) b8 J) L
总结 425
& t2 f. h; i% x第12章 集成分析工具 4277 r* k' O% }2 h, s7 A5 c
SonarQube调查 427
; u4 E6 r& j* l: v/ x0 c* Z; Z$ e7 k使用个人规则 428
7 w, P! y8 X- @/ A/ H9 W% w, J2 h质量门和配置文件 432
. M- D. I/ w% |2 X扫描程序 434
% p( f: g8 _( b- |; V将SonarQube与Jenkins一起使用 4344 x a: W: m# u/ M, { r# [6 N
全局配置 434' ?7 o0 u# d$ A% ~2 _# k, M
在自由风格类型项目中使用SonarQube 436* v- Y8 c2 t0 s0 y! H
在流水线项目中使用SonarQube 436
' \3 w b- Q( f+ [+ a- N利用SonarQube分析的结果 437/ x$ E2 W9 D C8 r% A: M
在Jenkins中集成SonarQube的输出 441% I6 \# D$ b+ X3 T
代码覆盖率:与JaCoCo集成 4428 x! S# Q+ k! Z! M/ \& f F! d
关于JaCoCo 442" t0 \" o. Y( B% f: I
JaCoCo与流水线集成 443# V; L+ ~! R) p0 A& C# V' }
在Jenkins中集成JaCoCo的输出 445
; _3 A5 A9 s& @- S: E总结 4469 g0 Y+ W9 K1 l: G
第13章 集成制品管理 447
; g6 E, @& A1 A: P0 z5 Q1 S r4 e发布和获取制品 4478 K$ ?, J( B) T a/ u1 _0 z' w0 X% A$ q
安装和全局配置 448/ N9 R. I; t+ s( w
在脚本式流水线中使用Artifactory 449
1 S2 R4 h2 G' U$ q0 J7 Z执行其他任务 454; o- P8 L2 I' u) \+ k* f# b
下载指定文件到指定目录 454
; o# l+ d' o8 D8 s上传指定文件到指定路径 454
2 a6 r5 t, I7 P设置构建保留策略 455
, d$ _8 A" q0 E( |8 }9 }! v5 g% m构建提升 4559 G) s; G ^' i( S0 @
声明式流水线集成 455) J% ]' ]0 O9 X' D
Artifactory与Jenkins输出集成 4568 Q0 p( ?+ R$ g- {# A8 u
制品归档和指纹 4570 I5 V/ o( z3 h1 j8 j; J
总结 462
/ L i$ w" |, A7 e( v" n0 F, c第14章 集成容器 465" b. U$ t# a. y0 d- C; @
配置成一个云 465
! W1 G. [4 ]" Z' g6 ?全局配置 466" J: r" U' I3 G
使用Docker镜像作为代理节点 469$ t6 N( v2 D1 u) d! ^
在流水线中使用云镜像 473* G2 a& j" m- a# N5 H0 a
在声明式流水线中动态创建的代理节点 4775 ?6 b: O3 M( G' ?* H' a$ q
Docker流水线全局变量 4809 `- O: P, e* N2 |
全局变量 480
" a* I0 Y0 g) ? M8 TDocker应用全局变量方法 4813 V. e! L, {( |2 |) C
Docker镜像全局变量方法 487
- C( z5 I, X$ e; LDocker容器全局变量方法 491
1 U1 J5 p$ S& p" G: p通过shell运行Docker 492# T- T8 W O' O6 |5 _
总结 493 java8.com& a) T# I B4 U i, A+ n+ @# Q
第15章 其他接口 495
* A$ g: o9 ?% K& ?# Z; H5 l使用命令行接口 496$ E' q' _! P f0 P# }1 P4 |0 X1 p# T
直接使用SSH接口 4960 q p; i3 R$ a' A! \7 r
使用CLI客户端 499/ Z: u, c& j% q8 v' p0 O# }% w
使用Jenkins REST API 5014 L B! j! e8 H7 W
过滤结果 502! ] h) M0 x2 p8 y
启动构建 504
: E: e' Q2 n; d4 M使用脚本控制台 506
$ |$ H1 ^; o/ Q3 Q" _; k总结 508# E3 s# ~" d& A" E2 Z- e' {% T
第16章 故障处理 509
& G8 M- T. |$ i& O# I深入流水线步骤 509. Y1 T, Z- V' i* k; i: B" A
处理序列化错误 512
9 G& e% R* k, I连续传递风格 513
3 Q* B, e' L& m8 V0 W序列化流水线 513* x" Q3 X' Y& M" e
NotSerializableException 5135 O) U0 v5 P: _7 b! K/ ]
处理非序列化错误 514
; `% R) M$ B5 U( {识别引发错误的脚本行 517
( q$ C' w2 ]2 E处理流水线异常 518
4 \* [7 D3 g, y% k3 A7 T9 b8 Q在声明式流水线中使用非声明式代码 5188 R' e- G: k& j' }8 _, Y( j
未授权代码(脚本和方法授权) 522) |4 P2 a1 p' }' Q/ U- j9 Y
不支持的操作 523
( O5 p9 s( t+ J2 F1 G o( n系统日志 523
$ c) o: \1 }% V* n. o; Y- \时间戳 525/ ?! f3 I4 d: p9 ^
流水线耐用性设置 526
# T1 S( j% s) x! n& Q总结 527 W! D1 P; _; O
关于作者 529% h! X' Z Y& r1 `
封面介绍 529 w. @+ u& C4 g
关于译者 530
6 }7 Y- J! y" r8 e0 M3 o0 G6 S
2 j6 G3 R3 b( P4 S1 P
7 Q3 W: q0 ?3 E- J' p8 [9 Z* r% B 百度云盘下载地址(完全免费-绝无套路):
! w3 }1 Q$ _4 n, y% T5 S: l
! A, _$ B A: P9 L: i8 P6 n
; D8 D' _. u+ N4 v, v3 \3 c5 Q: D, j5 c7 g
# z {& w1 S6 \# G
7 n9 @* K1 u% v+ J7 F4 ]+ P% `0 { N5 I! p2 W6 N: h
; L" b1 I. q% `0 J- H/ g/ i0 v |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|