TA的每日心情 | 开心 4 天前 |
---|
签到天数: 40 天 [LV.5]常住居民I
管理员
- 积分
- 2824
|
Java电子书:Jenkins 2权威指南 PDF 电子书 Java吧 java8.com
7 H$ l& o& m* k G6 ]% c0 J N {- ~- n) ?
作者:Brent Laster(布伦特·莱斯特) 著 郝树伟,石雪峰,雷涛,李华强 译出版社:电子工业出版社出版时间:2019年04月
' m% S* I+ X2 C/ G% _/ C* O
; `' V; o3 ?) A3 `1 L$ l) r% T: S编号:166-Java吧资源免费-X0058【Java吧 java8.com】" @" Z* U: S' e" Z1 l
l7 t0 l: @5 u; X; z/ F# `
2 n7 S3 ? U! C. m' o
" R0 H! z- q) U B目录:
8 N( I6 @. m. o5 J- f( R6 v4 G( P. u3 e6 V/ P! l
! u5 m x* q& }% I; y; ?8 x
第1章 Jenkins 2简介 1
. x# V' P) m R6 a4 h: q8 o) F- kJenkins 2是什么 20 [' R: \9 i# u! Q0 q; l
Jenkinsfile 3
% b+ c$ h: F6 L0 T2 H7 P/ y' T4 @声明式流水线 5' X* |' I; M; ~4 ^6 v6 v1 t
Blue Ocean界面 6
% J W. a5 R& n; R2 m& o7 X, \Jenkins 2的全新任务类型 7& Q0 I; l- m/ A
做出转变的原因 10
& y9 r% ~. |5 }4 C+ K( dDevOps理念的转变 10' p' ]+ l3 x6 w( R
装配流水线 11
# S( o d Q5 u& F3 ]可恢复性 11- \% ~# }7 l9 h# o/ R
可配置性 116 W# X- u, ]+ w5 C
共享工作空间 11! @# A: N ]: z/ a- J3 w
专业知识 12( [ i5 X1 [3 |$ H5 l% V. X
访问逻辑 12
- I2 X& }( _5 r+ V6 \4 ^5 g5 k流水线源管理 12
5 u: I+ A. d! v& e. N6 W" [$ [竞争 12- r& Q: t7 Z/ A- q
迎接挑战 13
1 z* l9 N5 a( t X8 I2 z! L兼容性 13/ x! a- x3 g8 p. P- z6 I7 x
流水线兼容性 134 T7 _2 ~: L8 [* u0 h9 m$ ^
插件兼容性 15
8 _5 W/ g! R/ J5 o( g# b检查兼容性 202 J3 t7 \3 s {' C1 ]% ?' D- C m
总结 21 S, V8 {( x; ]3 Q
第2章 基础知识 23 b5 h$ e* h* G! Z+ l2 Y) _' S9 \. z
语法:脚本式流水线和声明式流水线 243 P: E# h* q& I& B
如何选择脚本式语法和声明式语法 25: X0 _( A8 o3 K) K
系统(system):主节点(master)、节点(node)、代理节点(agent)和执行器(executor) 26$ q- J+ k& Q' f1 P# D K
主节点 27# h4 ^+ }5 r/ q; z+ ~% ~9 ^( r
节点 270 P( M+ {# V+ `$ n8 t; {( }
代理节点 276 p/ `: t) z: I; O8 c3 @
执行器 281 d, K2 o. l0 p3 ~
创建节点 29' n6 y+ N2 M4 N5 }8 @: d
结构:使用Jenkins DSL 31
/ |1 g) D; b7 @节点 32! ?& b. T, I9 A# Y' G
阶段 34
4 K5 H' u5 Z8 t- ^+ n步骤 34
) R. w7 s: R( J* l& G5 C) x支持环境:开发一个流水线脚本 36
2 I' J* f$ O) _ T8 ]" Y; G) d创建一个流水线项目 36
" d& w& h {. w/ E# L! m编辑器 38
9 L& z( ~6 _3 W2 l使用代码片段生成器 39
/ O) z# x! h5 W( q5 O! w运行一条流水线 43
( r. E5 \/ _" K5 w0 g x) l; t回放 49
% x2 P9 w. ^5 j9 a总结 52. E5 G- r, I" N3 F- G8 l7 h
第3章 流水线执行流程 53
# ]5 F5 f( w9 `+ q触发任务 53
- X6 C: R/ I& H; W+ G在其他项目构建后构建 54
1 K3 R; [$ G' [" m7 J) J1 e周期性构建 54
8 T3 @0 J' d7 k0 t, \; |使用GitHub钩子触发器进行GitSCM轮询 572 r( C* s! `9 p$ t
SCM轮询 57 y' m, n+ p1 r* G& f) H
静默期 58. _( \: d# n6 A* u2 i0 L( S. \. ^
远程触发构建 58
! E; f8 l/ H9 B, v6 j0 s用户输入 58
+ V) g8 M4 J& r输入 59
y2 ^8 Z+ u( v3 c# N参数 62
6 {+ a% ~) P( Q: \; I5 C/ @多个输入参数的返回值 682 v+ g. A0 j& m
参数与声明式流水线 691 }9 d# O% d9 H q' j8 k' f2 X
流程控制选项 74
8 r8 j! f* {3 h4 J& ^# k5 n f超时(timeout) 74, N1 H% k0 \- }" n6 i7 C+ ^* P
重试(retry) 76: l# Q2 B# d+ d5 d
睡眠(sleep) 76: d( J4 A0 C" e ^9 k! [
等待直到(waitUntil) 766 j$ V! |2 U- i3 {0 a, g1 O3 l
处理并发 78
5 `3 `1 V7 G' d使用lock步骤对资源加锁 78
# d9 K; F2 R* A8 T+ `. A% E5 L; c使用milestone来控制并发构建 80. s8 {- q- N* J; v* K2 l
在多分支流水线中限制并发 82
$ F- R0 `" s, ` L并行地运行任务 829 }% j y% k9 c2 u
有条件的执行功能 92. [1 e9 Q# o$ y
构建后处理 .941 W) Z. S7 r; Y6 E
脚本式流水线构建后处理 94, N* F9 d& J6 J3 h
声明式流水线与构建后处理 960 L1 e H4 m- b) m/ P9 c
总结 97
% |% ~% b/ r; n# F0 J第4章 通知与报告 99
; X& r- }3 Y/ M: Y& u# i通知 99
; K+ C* S& D: f0 E% i! X# O; g* k: [电子邮件 100
* i9 V2 _3 ` c C( z协作服务 110! L! |4 a+ D. N L
报告 120+ h$ h2 V( [) y8 L
发布HTML报告 120! {& _" R" D! `: p7 L8 p
总结 123
( z2 J _0 S( F& `8 z. @第5章 访问与安全 125
5 D4 d7 G( b K( h4 s安全加固Jenkins 125' z' G. z8 o8 i: [# m. N Q0 H, v
启用安全性 126
$ [. M0 |) {$ k5 M0 S其他全局安全配置 129
) p+ [" G4 [) i; \Jenkins中的凭证 133
- k6 ?* J$ z4 g/ U# \# T/ K凭证范围 134
2 V( B" |) b! @- K) J$ U# j2 ^7 w凭证域 1354 M5 g$ ^& C: C# l% f
凭证提供者 135
8 W3 c) w, v/ Q; \$ u* T5 w7 e& _凭证存储 136+ X5 x4 P7 Z4 ]* J4 _* Z8 E Q! C [
管理凭证 136
. J3 S. G- x# |, C) k: Y4 t选择凭证提供者 136% o4 ?$ g, a5 |2 D% s p/ m F
选择凭证类型 137
?5 C0 {, V& W; E' {通过提供者指定凭证类型 1382 F |* F; d1 U- H
创建和管理凭证 139
' z8 Q+ P) l% Z& i2 ~; D7 q上下文链接 141& B- [$ i/ D" I6 f
添加一个新域或者凭证 141* m6 g; Y b) c' V! Z
使用新域和凭证 144/ O R5 e1 @7 N% e( N
高级凭证:基于角色的访问权限 145
1 ?2 i' E" Q# u5 C8 Y& H基本用途 146, ]1 u- h: W8 ?7 \ m6 G0 w& z
管理角色 147. f$ q1 s2 B/ h, |/ o4 `
分配角色 1521 G9 P& I/ R1 Q, r/ f; }0 `
角色策略宏 155( S2 \$ J5 v0 ^9 @( O
在流水线中使用凭证 157
& u/ P2 H; Y% Q9 t% I用户名和密码 157
; N& C9 J5 `; x! b' [SSH密钥 158
6 r' R4 t( O7 q2 F' n- s# K令牌凭证 1591 @( S0 c- ^5 T% [. F
控制脚本安全性 160' p, A/ a" p; q7 @: O: j
脚本检查 160
/ G* j1 s; F$ x( N; g脚本批准 161
- k6 [: `2 T. S9 I4 B2 h( B/ K' v9 b3 pGroovy沙箱 1623 D/ P% {5 C( a
Jenkins凭证与Vault配合使用 164
& v3 U" h ]- \; w- \" J: n方法 164$ I7 k; B3 l8 c8 n% ] c
安装 1656 V ]1 A4 `1 A7 u9 P6 p" @, j# P
创建一个策略 165
# l, R6 x& ^+ K身份验证 166, p! M( {; s7 Y b7 t4 _
在Jenkins中使用Vault 168
, Q; p/ U/ ?' Y6 M总结 171
. I) ?$ {' h$ y5 d第6章 扩展你的流水线 173
) I Z6 F9 x* C9 p; ^ G v( l; `7 A可信库和不可信库 173
! n2 m7 ~" I. M- |9 G内部库与外部库 174; O L# B+ B% a. o( k5 {
内部库 174
% s+ O8 _# a: ?6 j: g外部库 176; V: e/ N5 c$ ]
从代码仓库获取库 178. B- U2 Z+ P' A# M$ S' K" S
Modern SCM 178
2 u- h, m- X# g+ V. r# tLegacy SCM 178
: I9 C, c: I7 ?. A: \. S: B" p在流水线脚本中使用库 179( G8 ?$ ]- s# n- W( C; t
从源码版本控制中自动下载库 180# e+ n6 u' a$ D& a( N
加载库到脚本中 180# L5 @( I: r& Z
Jenkins项目中的库范围 182
5 C, i1 ], T! S+ D, {' a1 V库结构 183
" U! f; F e3 u3 h0 B) Z- @样本库例程 183
& X% K$ O9 H4 T+ D2 ?7 O* u共享库代码的结构 184
! B* E3 K& A3 z; x8 L9 ^" U+ v使用第三方库 195
; _4 e- }, c! T9 h9 P5 g H- N, l直接加载代码 196: r, }3 V$ {* T; w5 I& y$ j! \5 {0 Z
从外部SCM加载代码 1960 Q4 f4 Q4 p& @8 A% Z% a$ M
回放外部代码和库 198/ I* `* G8 ?+ V* d& ?/ P
深入研究可信与不可信代码 200
8 k; P0 t6 e: Q+ ^4 V5 p总结 203" u. e3 A* R$ p$ {% d
第7章 声明式流水线 205; c u2 n; n+ Q2 c9 v/ R0 ^
动机 206# O4 z/ C+ l" N4 j# o# [
不直观 206, Q3 a5 I$ S% [
掌握Groovy 206' E1 B" u* g3 a* @8 C
其他必需的装配 206
+ d; e. B) q0 p) i0 d5 [8 j- m结构 207
: }& g# e& W% T( W7 m: o代码块 208
3 {" X+ X0 W. X- |3 y6 w3 K部分 208
& q R: F H: T. H1 v7 ^指令 209& m d: d% l* Q% j4 f
步骤 209
3 C& Z" |3 K. M1 L条件 210+ T2 `& X' I1 H2 p% r/ C- r
构建代码块 210! M3 P8 Q# g$ O" q% b0 x0 N
pipeline 211; u$ _# E1 K# S6 i6 ~+ d3 C( P# g
agent 212, U( `; i* M: ~$ Y! D: W
environment 215
. L' ^8 s: h \0 G2 Itools 216* K* M2 P' g! h4 z
options 219
2 I* P) S& b5 C) {# ttriggers 222
! @: B8 H2 _8 _. b _parameters 224
0 |, E2 R( ]( o! @! d# Elibraries 227. E; L& o v2 L5 y8 _6 F0 s
stages 228
6 r, [9 V! c7 ppost 2311 Z3 v3 L" I. r1 g; E
处理非声明式的代码 232
5 h Q. U; S+ Q# y3 c, t" @* l检查你的插件 233
: m. M0 ~; T/ ]; `' v创建一个共享库 233" T$ s9 I' E. c
在pipeline代码块之外放置代码 233
Y4 W, Z5 K, x& [8 w& p: lscript语句 234$ X- E$ }* h5 e0 c# F
在一个阶段中使用parallel 234
) P2 L6 n3 n1 p# W" q2 p脚本检查与错误报告 235
9 N% P* [3 F3 ?* q4 Q2 r声明式流水线与Blue Ocean接口 238
" X2 t) W$ l! [; G总结 238
. H0 Q; Z9 ]) w1 L/ q第8章 理解项目类型 241
9 P/ v) M% W! k通用项目选项 241
% i* A7 {, B6 i3 [8 s# X' \基础设置 241* v$ u6 s/ P( b, x0 h6 g
源码管理 247
3 |( O) }5 Z+ g- l7 v4 M# y' `0 Z构建触发器 249( Z7 g) g. t9 ^
构建环境 256
+ _% \) ~4 s" ]; L: `8 p e/ B构建 266
- Y% q4 R; F* z; L7 Y构建后操作 266
5 @5 d q% H! X7 g/ P项目类型 266$ T3 A/ c* D" g5 r5 [$ h
自由风格类型项目 267
+ X$ t$ P3 U7 u" Z& K" gMaven项目类型 267 Q6 `$ [4 ?1 X- I; O+ C, B
流水线项目类型 270
9 }5 c4 M! s& ]' \" \6 |外部任务项目类型 2726 h) e! A0 v$ a
多配置项目类型 275- M4 `" D1 R# E! `# e
Ivy项目 2808 Q1 R! \. ^; l! j: @
文件夹 282" x4 i1 ^8 p* T/ a0 h @9 p, {; D
多分支流水线项目 287
( m" H7 f/ N% J0 z- t/ {4 W% xGitHub组织项目 292
* J# i' J- l% B$ q4 j( UBitbucket团队/项目 2963 ~/ z& v5 k' ?& Y( O/ ^8 m
总结 299
, \! J/ ?" o; o* r6 ?第9章 Blue Ocean用户界面 301
. Y3 R; o3 Q8 m* j部分:管理已有的流水线 302* W6 G* b6 ?* [, o, S
主界面 302% c& h2 e6 y. |1 ]
项目详情页面 305% L* S! r) ~1 C" b0 J
运行页面 316
6 j/ D" Q n8 B0 s# A3 b第二部分:使用Blue Ocean编辑器 3255 h, w$ i4 T0 a) F; m+ L: ]
不依赖现有Jenkinsfile创建一个全新的流水线 326" S8 {2 z# T8 Z' G
使用编辑器 330
$ `! J- k; g/ S$ t/ s6 [9 X6 S+ x7 m编辑已有的流水线 340
) O' r4 r. x7 R0 e8 q导入和编辑已有的流水线 344& M6 J2 N+ G. a
使用非GitHub仓库支持流水线 354) g6 c0 r! v" D$ `) ]
总结 356
[! u0 L4 G ]2 _: b第10章 转换 357! y7 e6 q& t: u
通用的准备 358( ~$ E/ ?4 M7 a& w9 }, ^/ W# G% m6 {
逻辑和准确性 3589 Z( E4 }, J) T8 ^& p! U8 y1 O1 U
项目类型 358
8 {; J V8 `' H$ C+ r8 O+ h系统 3586 O, Y& q: G" y6 W7 l, A
访问 358$ t1 z, D& D; W- p4 [
全局配置 359; ^3 n( W. c( X$ Z0 } s) l/ b
插件 359* ?% R+ ~& U3 f- Y3 \
共享库 359, h% U& Y4 p* f j
将自由风格类型的流水线转换为脚本式流水线 3605 @8 |8 ^2 j* K5 k* Z0 J8 J
源码 364, h2 c' u- d; g/ I& o7 E
编译 369
7 {8 g( U8 S, C; }' x* d! p( `单元测试 373
- i, T* _. a& M& }集成测试 3779 d0 k( @: w" Y: Y, O" A* v
迁移流水线接下来的部分 380
7 m7 L3 k- ^ O1 {/ x: K从Jenkins流水线项目转换为Jenkinsfile 385
% n# q) V2 T7 b$ X方法 3889 P; C! j& Z& X0 x9 J$ d
后的步骤 3952 U5 a3 L$ ^4 \* f, @$ O |
从脚本式流水线转换为声明式流水线 397
; k( }. Z3 h& O4 m+ `样本流水线 397
( X0 m! ]8 |+ ?+ @- U& w9 I转换 399
9 b+ b& f. Z; N- o, V+ F# \完成转换 402: |2 r( k3 m* s/ |2 o4 v
可用于转换的通用指南 403& n# G+ }% P, V) U. b6 y, W
总结 405
8 w( Q" D6 Z- V5 A2 U第11章 操作系统环境集成(shell、工作空间、环境和文件) 407
" |8 ?: W; n2 O& R. @使用shell的步骤 4078 E- k0 q; V- x! B
sh步骤 408
& i1 f5 ]% T9 E6 f' Z2 Mbat步骤 4132 C- k) `4 _. h% ?5 h
powershell步骤 414
/ [# p; U7 F$ O. b; e6 }, m使用环境变量 415
1 K1 p' e6 S5 G. I! ]6 @2 pwithEnv步骤 416* C* I8 R% j5 y0 C9 Y/ B8 m
使用工作空间 418
5 a6 a1 N2 H- j2 q7 x7 J' w9 Y8 j创建自定义工作空间 4182 G, ]5 S- I; Z2 A& @
清理工作空间 420) P" [5 y- P4 r' p% y9 H
文件和目录步骤 422, T# g! o" B! O' a. ~& l7 u
使用文件 4228 R* {4 `- f& b% I
使用目录 4236 G2 U) U9 f2 d
使用文件和目录的更多操作 4247 w' l! x1 R, F- B' W8 Z
总结 425
' W6 q+ @3 ~( D# V) L( X第12章 集成分析工具 427' G0 ]+ j0 X# Q& O8 G, m( [
SonarQube调查 4270 e* e# l7 K, a) S5 c% M; f
使用个人规则 4288 U/ u8 j% m# a: f% P
质量门和配置文件 432
: x- Y( @" W- m) L2 V; k0 Q扫描程序 434
7 `* v. Q9 H& x5 S) b将SonarQube与Jenkins一起使用 434
' m/ s! `% |' n+ G# d全局配置 434
/ h3 H% m7 B3 w* [3 j( R4 M在自由风格类型项目中使用SonarQube 4369 x0 {" U2 z& D. u9 ^
在流水线项目中使用SonarQube 436& c3 K; x3 q% c, [% w
利用SonarQube分析的结果 437+ w3 c+ n! L" e; I
在Jenkins中集成SonarQube的输出 441
, {- d* F9 K5 `7 o* c" \ W. K代码覆盖率:与JaCoCo集成 4429 g$ R6 U# s2 F4 N
关于JaCoCo 442* j' f. U6 j# p6 x$ Y
JaCoCo与流水线集成 443
/ ~7 @/ v4 j) u8 O) z在Jenkins中集成JaCoCo的输出 445
" s; f0 C: U" f( k B总结 446! ~. ` U0 j2 U/ E" ?, s
第13章 集成制品管理 447
1 L6 O N. |- B- _$ \发布和获取制品 447& b( F/ U6 K& b3 g, v, c
安装和全局配置 4485 M8 w5 y+ |1 `) E1 g! ?" n6 r- e# \& Z/ h
在脚本式流水线中使用Artifactory 4497 @+ |0 o4 M- ^$ D+ y" C5 p4 H
执行其他任务 454% k# }( {% K5 ]1 q
下载指定文件到指定目录 454) m' Q3 V% o! G* ^3 J
上传指定文件到指定路径 454
( ~" g% r6 r8 i设置构建保留策略 455
2 K6 I, k! F7 G! S; L8 ^构建提升 455
7 D+ _4 C( w' Y; T' t5 x" W声明式流水线集成 4559 ?% Z4 m: h1 {$ P
Artifactory与Jenkins输出集成 456. `# Q/ W1 _( o1 `
制品归档和指纹 457% ?7 i. B- b3 w
总结 462/ E# s W2 f$ I
第14章 集成容器 4657 B/ k7 Z' G4 m. ~9 y1 B+ q, m
配置成一个云 465
* I% T. i) V9 ]. Z全局配置 466
2 o* p! U; ]' Q% m8 Y0 O7 a8 @使用Docker镜像作为代理节点 4692 O' S: D; q, E5 z1 e: J
在流水线中使用云镜像 4738 E8 u. |5 e+ ]) s- [
在声明式流水线中动态创建的代理节点 477
* F1 S6 d6 e/ S( @Docker流水线全局变量 480
0 c' J/ \! M0 V l& C# P) }( j全局变量 480- z* m, R: g3 d$ L6 i
Docker应用全局变量方法 4817 M9 z% ]( t) o' h) I- O
Docker镜像全局变量方法 487" [, O9 [9 |; j/ I$ @ x
Docker容器全局变量方法 491+ `2 r( M a: h( @6 c! v+ o
通过shell运行Docker 492
0 t: T" G" b5 S总结 493 java8.com; d2 J7 N- j! l. {9 s+ O
第15章 其他接口 495 U3 n* b! J" M$ N
使用命令行接口 496) [5 ~8 y8 z. k! h/ V
直接使用SSH接口 496) F8 e5 x# X- a& i
使用CLI客户端 499! ? n6 a7 F0 I. l1 R
使用Jenkins REST API 501$ D# M3 S" N& w0 n) n |
过滤结果 502
# }3 P8 S2 i: `启动构建 5046 X6 a. \# B8 m; X/ J0 `9 E
使用脚本控制台 506
- U9 |( S4 u# Q9 u" A. P$ h总结 508. \( R% q" ?- ~+ j4 w- P6 |
第16章 故障处理 509
6 v+ c8 g. r# H3 P/ I# T深入流水线步骤 509* V; x+ p4 l6 k* z7 K; i! Q8 a
处理序列化错误 512
, t1 y( |( a9 k* F- R连续传递风格 513
5 t# A3 L+ @" W1 [8 r序列化流水线 513
' Y, P: i3 P- h! m' B$ r$ sNotSerializableException 513
, r8 j! o% D* ]" w- Z6 q2 g# Z0 O$ x处理非序列化错误 514- W/ k4 V* Z5 |$ ~, A" _; a, O9 \4 V
识别引发错误的脚本行 517
! Z3 T% }3 [+ ]处理流水线异常 518
4 ]9 u, t7 X% n, b8 U在声明式流水线中使用非声明式代码 518
( M3 @) s/ g K未授权代码(脚本和方法授权) 522, P+ K& r/ Z* A
不支持的操作 523; P7 x3 ~; H- _" f% e
系统日志 5237 s6 W- v3 w. }# {3 L6 e& b
时间戳 525
1 Q2 b$ d- Z; z3 z5 D$ J2 k流水线耐用性设置 5268 m9 N4 S1 B2 M! n
总结 527
$ m# ~% B) `* ], B, c关于作者 529
5 b7 H, X; H5 N4 `" m6 w封面介绍 5299 M5 Z; N2 C( ?9 T( W$ Q
关于译者 530
: T* a' J2 y/ t0 ~( S) g4 \% B) [9 v- I8 y/ I- E* u$ l
, |; \$ i& }1 C# C/ H' F; L 百度云盘下载地址(完全免费-绝无套路):; y4 R6 S( m% D: A+ j
7 T# O* G% x' G$ o/ B/ p* M" \8 k9 C( l# p7 t
) `/ y* ], X+ S, r; t) W# S8 `
4 L4 l& |" y& P
3 s6 `0 Q4 P- j2 `5 T! {
~+ }; S9 ^( u W6 q
! o( l% S6 F$ W" m |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|