TA的每日心情 | 开心 昨天 11:56 |
---|
签到天数: 384 天 [LV.9]以坛为家II
管理员
- 积分
- 12681
|
Java电子书:Jenkins 2权威指南 PDF 电子书 Java吧 java8.com
2 G$ T3 t4 G0 e2 x+ i/ s U- u
0 W7 i/ |1 i7 \2 c2 z作者:Brent Laster(布伦特·莱斯特) 著 郝树伟,石雪峰,雷涛,李华强 译出版社:电子工业出版社出版时间:2019年04月
( o z% [1 m+ N. Y# r+ N
* o' B" I% g5 h+ K编号:166-Java吧资源免费-X0058【Java吧 java8.com】4 ~) o+ S' T: W# l$ _+ P4 J
' X$ h. r! L- _4 z: P7 Q6 _" O' y2 ?7 a2 U f5 X4 F+ x
# g/ v$ F; F9 {7 T目录:
, x3 E7 h& @! f
8 S' {1 H2 N+ n, ^+ f6 \8 Q3 j4 a* P- |0 N0 p5 |7 j! ^6 d3 w3 ?: ^
第1章 Jenkins 2简介 1
: r) l+ _: q+ h$ E4 g; pJenkins 2是什么 2. ~) E) ~3 T n+ P+ S/ D
Jenkinsfile 31 A4 S- b5 w5 @8 o; h) {; ]; F
声明式流水线 5$ F8 p4 }4 V! b2 T; K3 p
Blue Ocean界面 6) _. U( I$ d w, S
Jenkins 2的全新任务类型 75 F+ J. t4 l$ u$ R8 f/ q5 B1 H
做出转变的原因 10
: B4 I5 k: E: ^/ x* JDevOps理念的转变 10) M, r8 @0 j6 S W/ F, G E8 _
装配流水线 11
1 w+ {7 N0 Q% i. K1 d; ~5 V: S% H可恢复性 113 w* `; w6 f: F1 z/ C
可配置性 118 X# `$ A6 m' i: ~7 R
共享工作空间 11
4 J/ L+ X9 x; D0 U1 ]& N$ H2 H专业知识 12 g8 T( ^4 M# C; L
访问逻辑 12
# y: r% v& W) L6 h流水线源管理 126 f% {8 j# d$ u/ X/ T- Z9 d) e
竞争 12
1 O5 y; G4 S9 G5 U迎接挑战 13
4 W" V/ J2 @! j( X. D$ K2 q7 S+ h兼容性 13! @8 c! H% U" Q# Z
流水线兼容性 13
2 y% N' F6 I8 ]5 @- h' P0 a+ s0 P插件兼容性 15& \& \, I$ c; g/ U1 o5 Y; ?! K8 p
检查兼容性 20
: s$ E1 @- j/ a8 j总结 21$ D z( F6 F0 i9 l% l7 m* h/ A
第2章 基础知识 23
: P5 e9 S. N, [% y语法:脚本式流水线和声明式流水线 24& A- ]) L# a5 h/ S& o) I9 R
如何选择脚本式语法和声明式语法 25& k4 l4 u( g- v, Q4 t# C
系统(system):主节点(master)、节点(node)、代理节点(agent)和执行器(executor) 26& j4 U! ]% Y) y7 i, }! a X
主节点 272 O# [2 C4 n9 _$ C; X
节点 27 h8 Z( t8 H9 T9 U. b
代理节点 271 A o. g7 x6 T" c0 P
执行器 28% D7 Y5 \: Q/ T& b
创建节点 29/ z' z* j& r- B' K5 ~, H2 Q( x
结构:使用Jenkins DSL 31
]' ^4 p+ C/ `2 a. n8 c0 u) K节点 32+ t: a8 U' s; i- ^" `! O1 |! a' C
阶段 34
/ {1 P) J( C! W4 w步骤 34- q9 J' O' k7 a
支持环境:开发一个流水线脚本 365 G) x) }/ `( S
创建一个流水线项目 36) ]/ |8 {, Q( G! u$ Z; e3 N$ t
编辑器 38
0 m2 i0 S+ T7 n. R, }. R8 F. }使用代码片段生成器 39
+ [* x9 u8 g6 W0 e1 O3 ^7 o3 Z运行一条流水线 43
( \0 w1 I) f/ Z回放 49
5 D7 k9 K& ~" J/ j0 j% |* O# L, ?总结 52
5 h8 k; b8 Y2 N/ w- j! P第3章 流水线执行流程 534 J& R0 } ]1 }
触发任务 53
3 |; ]2 I, ^- t; K在其他项目构建后构建 54
6 I/ z K4 [3 D4 r6 }) B% c周期性构建 544 ]1 @& a" t |, \( K+ p
使用GitHub钩子触发器进行GitSCM轮询 578 T% O$ `8 h& N
SCM轮询 57
' L) k0 N2 t; E/ C' s, W) G静默期 58
- ?; ^/ v/ e( `远程触发构建 58
9 L/ z. t1 F" c* }# b用户输入 58
$ Q) Q+ N$ f; f0 _. a& s输入 59* C7 D4 G1 ^# X
参数 62
/ O7 V8 j7 ]' L6 e' e# @多个输入参数的返回值 68
) M( y: S/ J! L$ `9 L8 A参数与声明式流水线 69
; \5 L+ [6 O) `/ a2 ?0 L流程控制选项 74! E% [4 s+ l: x
超时(timeout) 74
# w5 V4 L) ~. F/ A! \/ W重试(retry) 76
2 ?2 ]. d" A& d睡眠(sleep) 76- k& ~( Z; C' e
等待直到(waitUntil) 76" X: K1 O4 N! U& q5 R
处理并发 78
4 z2 | [. {$ U. ~) r3 p使用lock步骤对资源加锁 78
. `& W. e1 k7 R. s使用milestone来控制并发构建 80- z7 Y9 G" X6 i5 S) W( v
在多分支流水线中限制并发 82$ \$ }. A S+ d y- ]
并行地运行任务 82; ?5 i( O- f/ u$ F0 `
有条件的执行功能 92
/ U3 C9 ~5 m7 d5 i7 ?构建后处理 .94
* S8 E3 ~9 n+ Y% W脚本式流水线构建后处理 94, s! X6 }4 q2 S- J
声明式流水线与构建后处理 96
& K( W1 p* f4 S( H" Z% L总结 97
4 J' M: V# F. z6 r第4章 通知与报告 99- ]7 r5 V& n! o6 A# N
通知 99' S t' ?1 z. k; O* ?) r
电子邮件 100
5 B$ j6 B: k# G协作服务 110. g& P0 u) q( @( [. R4 U# G
报告 120, A+ X, e v) K6 D J8 k
发布HTML报告 120
( e6 e# Y0 `: u/ O0 p$ @总结 123
9 _" e3 l# y$ J5 W/ d$ j& N第5章 访问与安全 1253 U) M7 o1 w5 A. ?3 `$ O8 U
安全加固Jenkins 1259 l5 x. L& s4 @" c
启用安全性 126
5 S$ p% ^! s! @% f+ S H其他全局安全配置 129" H& L/ L7 ~( t& T7 X D1 [( _6 o0 O
Jenkins中的凭证 133
& h y* o# a j凭证范围 134
: z% V, r0 |& _ |) \. O' q+ p8 R凭证域 135" O/ G U+ N; u: d
凭证提供者 135
8 M% X" @4 g4 H! l凭证存储 136+ s+ k% q; \% e# t3 `: R' N# R- d
管理凭证 136
' ]0 y+ E( s n7 q) o选择凭证提供者 136
9 \# |& p3 o5 c6 x8 i; ?选择凭证类型 137: {6 M5 x8 I8 M1 Z1 M& E9 T
通过提供者指定凭证类型 1380 H+ ^5 }; n c
创建和管理凭证 1394 S: n* [3 |5 ] ^4 v
上下文链接 141
" g1 n% Y$ d2 P0 P添加一个新域或者凭证 141& G8 @2 p6 F1 v) Q! O2 g3 A
使用新域和凭证 144
+ K2 h% v+ @8 e1 Y+ M5 k0 ^高级凭证:基于角色的访问权限 145
' W$ p- Z _$ j) t基本用途 146
# P4 S. S- ~' F- `1 N3 b- [3 z管理角色 147" j4 l9 @8 p0 q2 A
分配角色 152
9 R+ ~6 C2 {( X% i0 h$ c角色策略宏 155
1 A$ Y( a) v% h, l. }0 `在流水线中使用凭证 1578 V( t' \1 [1 \3 P2 Z; r
用户名和密码 157
6 p% K+ j# H/ `6 E9 a; U9 ~" }SSH密钥 1584 }* y+ t3 ?# S
令牌凭证 159+ W" S/ a& ^6 D# r4 x0 n
控制脚本安全性 160 r0 r& W# L" k. Z I. c' C
脚本检查 160$ H7 J. }5 t, ~, X
脚本批准 161" i: s& v# Q. d" U3 i/ {, @
Groovy沙箱 162' w b. ^6 k6 t0 R4 f6 a
Jenkins凭证与Vault配合使用 164. f, w; x/ Q" C* R4 y
方法 164& l0 w5 y) P h( v! z8 s
安装 165
4 T7 k2 Y1 e+ P, q4 V8 i( o$ n创建一个策略 165% f) g! ?' M* i9 \& {
身份验证 166
8 g2 R1 z' v+ R! Z+ H5 m; u在Jenkins中使用Vault 168
/ L% D% f; i3 M" B: w总结 171; [7 `! u7 J3 |4 U- J( n+ [
第6章 扩展你的流水线 173
5 W" [: n2 |) i/ n' X可信库和不可信库 173
0 D4 E) K0 x/ s( z' t0 W内部库与外部库 1745 P0 [! a: p1 v& f. \6 ~3 _/ P
内部库 174
) ^' N9 w3 e$ l8 m外部库 176% H' `' E6 Q: J* b
从代码仓库获取库 178
% E' t$ S$ U4 J I- k/ m1 VModern SCM 178" o0 Q! E$ f' j
Legacy SCM 1787 z( H# O& W; ?: O7 z
在流水线脚本中使用库 179
5 t# h! L5 h7 F) J; g从源码版本控制中自动下载库 180
2 Q/ k3 }8 g3 V/ s加载库到脚本中 180
& s& o( i6 W: R6 Q! x$ u6 D/ B+ \Jenkins项目中的库范围 182
, K& k! W8 o8 [7 ]2 d库结构 183
4 z5 a+ H/ E) J. L1 M; e; ~样本库例程 183' [/ ?. v: V; A1 w6 j
共享库代码的结构 184
) m6 z. w4 S& D. J' r. M使用第三方库 195
' G! {8 k1 J" q0 ?. i/ W/ X, m& v! ^直接加载代码 196
. p9 j$ D; D& K3 e5 _0 E3 i" p x& t, c从外部SCM加载代码 196
5 o0 O/ A9 M- ?回放外部代码和库 198
9 t4 Q0 |" j7 t* F* G9 y深入研究可信与不可信代码 200
' w: \0 ^ h! z$ s总结 203, m% T: e$ ?* `: {9 Z( f @
第7章 声明式流水线 205
$ k# C# T+ }- l动机 206& m+ x/ y6 t" t0 r
不直观 206
* B D3 K, o: a F, T# K2 Q掌握Groovy 206
4 V, l: O& M, n7 \) p2 S9 t4 r其他必需的装配 206
/ G p' A1 R/ k1 s结构 207
1 q. [+ ~6 [ b T L" O& o代码块 208
8 G& s; q3 `& D# p7 H3 V2 E部分 208/ R3 ^$ G) P0 |/ i% L
指令 209
, c7 v! X& r6 E步骤 209; _6 T G* M8 w3 S* [5 a ?
条件 210' _. ]0 j4 v* I4 B
构建代码块 210
. G H9 l& v* R5 E8 f& u; Spipeline 211. f' E4 r! d) Q. k! O+ ~0 G. M
agent 212
5 o7 q# a" f8 j- K8 B) h) Denvironment 2151 K5 u( v6 J4 W8 \0 U$ k
tools 216
0 f& ?; i( o" P l3 P: `) Toptions 219* i! R5 ?; i9 o5 `- b% f1 A$ s
triggers 222
9 Q: o& ~- q/ B, p: R3 Iparameters 224# T" ^0 D: @: j, ?
libraries 227
4 d) s' v: m: K/ ~4 K; R# Mstages 228
/ j% D6 G7 c& V9 [post 2315 R/ l) x9 @' A5 _
处理非声明式的代码 232
9 {+ ]* n; B5 q' Y检查你的插件 233
' M- y. n$ z: T6 o3 j创建一个共享库 233/ p2 ~3 g( ~+ m! p! n" U. L3 @
在pipeline代码块之外放置代码 233 }, @( D A% z3 [0 R- y( n! \
script语句 234' r0 a$ u Z @8 A
在一个阶段中使用parallel 234# c5 C) Z4 a m& R! J
脚本检查与错误报告 235 _5 q6 F1 P! W6 J3 `% w
声明式流水线与Blue Ocean接口 238( m& b6 r( R: T1 q' t
总结 238( _/ ^/ d7 c3 K
第8章 理解项目类型 241( n0 |' A+ A# e0 F# [
通用项目选项 2413 q. @; |( y& z0 b! o
基础设置 241 [0 t% Y g- u9 C0 H
源码管理 2479 Z9 Z1 _/ u0 \3 M9 F; b$ n
构建触发器 2490 K" J; u* S! k% {8 `* ^" L
构建环境 256
$ x) A: N8 o1 Z, j! T构建 2664 \# ?8 `, L7 f/ z+ M$ E
构建后操作 266
4 W: q/ L! B* L7 T项目类型 266+ x3 x4 P& L% B. C
自由风格类型项目 267* n- _: ?. N9 `9 r
Maven项目类型 267
5 T& f$ w) t5 P3 D5 m流水线项目类型 270" G" V% y# A M6 M& |
外部任务项目类型 272' x# J9 t% |3 H. G& H. M
多配置项目类型 275
: W9 H! W% w0 A& [Ivy项目 280
% ~, K% r4 C1 s1 D文件夹 282# S" `. X& {# Z8 r J2 j
多分支流水线项目 287
0 S/ o) H$ c# n) GGitHub组织项目 292
3 D# o6 ?' A# Q* x# X' H7 TBitbucket团队/项目 296 B1 q. G7 Y' H7 u1 y2 k7 D1 e" \& c5 o
总结 299) I5 D6 v, {! [7 U4 q
第9章 Blue Ocean用户界面 301+ H8 E4 W0 o& |
部分:管理已有的流水线 3023 I# P% e2 _% }8 Q6 L
主界面 302 v0 x: B0 {+ \% z2 H
项目详情页面 305
/ a1 u5 f7 p$ b" c8 w运行页面 3166 n! F5 j# y* T0 P& I4 v
第二部分:使用Blue Ocean编辑器 325- ?) v) K* Y4 I' U( H2 { A% T: a& \/ k
不依赖现有Jenkinsfile创建一个全新的流水线 326
. z e* b1 i: ]! a+ _* \0 U使用编辑器 330
& [% W" F. {+ S, e! w编辑已有的流水线 340& h! w) e* D3 h
导入和编辑已有的流水线 3442 N0 u2 S2 @. H- }2 j
使用非GitHub仓库支持流水线 3549 I8 ~! w& C4 Z& G
总结 356
L" n7 _# d1 y0 A第10章 转换 357
( a& [' N8 v0 X0 J( H$ z通用的准备 358$ ~8 V$ O5 j! r; L) N, M' N0 t) t
逻辑和准确性 358
8 e$ t7 z Z. l6 N# ?项目类型 358 a3 `) S' b0 C8 @8 V
系统 358" Q" g2 \1 ^4 o4 V( K
访问 3586 x. M, D8 M8 p5 [' Y
全局配置 3593 f. i7 x R0 @$ Z
插件 359
. ^- q& A& V" K$ u$ a共享库 359
) w' p+ ]% U- m; W将自由风格类型的流水线转换为脚本式流水线 360
/ D2 t5 ~3 B) G* E* C! u源码 364& J. F$ H& ]# O |/ @6 W- Y( J9 @
编译 369
/ L7 x6 K6 M1 O3 @) L单元测试 373! Z: o s5 y( _! K" ]$ v. ^
集成测试 377
% Y+ @" b0 Z1 K2 v3 ^/ Y. e迁移流水线接下来的部分 380
" p) O( Y* d# Q3 i从Jenkins流水线项目转换为Jenkinsfile 385
9 k% ]# F4 c9 E6 g6 b0 m. b" G方法 388/ ^ y4 R$ X5 [- I% U
后的步骤 395$ w( H# J) O7 k, ?. G
从脚本式流水线转换为声明式流水线 397
. o7 E$ e7 P4 F- ^/ i- J! z, v样本流水线 397! N# f. u8 Z2 \5 N L; e
转换 399! z% z/ f4 w- N. R9 b( K% y- ?) \' m I
完成转换 402
" |0 n" c. y9 Q B0 l$ D; {- w! Y可用于转换的通用指南 403- G2 V* l$ K5 e8 ]. M& k7 r' a9 R& p
总结 4055 p5 U( ]: q7 z5 T% @8 }4 c0 z# ]2 e
第11章 操作系统环境集成(shell、工作空间、环境和文件) 407" r' \# k7 {, v
使用shell的步骤 407. Y1 [( w; [6 T. s# S a t* y# t6 J
sh步骤 408
; ~+ [) g" y* X( g6 @/ J+ i/ Ibat步骤 413, V+ `: {2 c0 ~2 o5 D
powershell步骤 414
# A4 I n+ h; v( b- s' B1 O( s5 b F使用环境变量 415
; F$ [% n% v8 v9 xwithEnv步骤 416
0 N0 t$ F- g* o8 W8 V. f1 H& G% {1 R使用工作空间 418" c+ m( ^) {: X9 {
创建自定义工作空间 4185 k% q0 p# `7 [: b2 G4 g( W7 J, L X
清理工作空间 420
/ q4 M) K' l5 h& R) `1 b文件和目录步骤 422
5 R$ o* Y1 A& }& A5 a- N7 J使用文件 4226 e% ]; ^& M- a4 A$ ^8 U: ~
使用目录 4234 W' M( Q$ L \6 P* i
使用文件和目录的更多操作 4249 Q) A) }) k( I2 H' ~4 u2 D9 _
总结 4254 R6 J* B* W+ X) q
第12章 集成分析工具 427
( i0 P8 K. N' [7 C4 G* H. CSonarQube调查 427
, _+ m0 ]5 A& ?0 x) @使用个人规则 4285 R# D8 N1 u1 v9 z1 k1 Y8 n5 U
质量门和配置文件 4321 V+ C7 o8 O+ G, w
扫描程序 434: ~( q# H0 s2 h& z
将SonarQube与Jenkins一起使用 434
& Z0 o2 w+ X5 W" m全局配置 4341 S0 z6 b2 s2 [5 c
在自由风格类型项目中使用SonarQube 436
0 D2 G- Y: L- k( J在流水线项目中使用SonarQube 436
/ F6 P8 o8 G: M" @& N; {利用SonarQube分析的结果 4370 m' g$ {' P6 p. S
在Jenkins中集成SonarQube的输出 441
' j ]- }3 A9 r7 v! y代码覆盖率:与JaCoCo集成 442& R# {# _- ^0 b( m+ H
关于JaCoCo 4424 V: U, m9 t$ {" ?- f" @
JaCoCo与流水线集成 443) |+ D1 `- M1 ?$ V
在Jenkins中集成JaCoCo的输出 445& q5 _. d. N1 G- b
总结 4465 e! ^# v# K. I p" m) F% K) e( e
第13章 集成制品管理 447% C/ Y! h' T$ i3 Q, j# U
发布和获取制品 447
$ H* k1 Y% P( Z- c8 \1 J4 ~9 @( K& o安装和全局配置 448
, E) _1 u7 e- @9 b$ R' X在脚本式流水线中使用Artifactory 449! t: E" f. Q0 A* m- v5 C, D
执行其他任务 454& A3 I) T |; f/ J$ G$ U1 t0 W
下载指定文件到指定目录 454
( k, `/ a2 R3 Q上传指定文件到指定路径 454
+ b2 C H" F1 K. K设置构建保留策略 455! E0 T; H5 y" ~# h; x0 T
构建提升 4552 S; j, r* T# v; V4 K* |$ J2 s8 f2 s
声明式流水线集成 455
0 R2 N7 [. n# Y- p. EArtifactory与Jenkins输出集成 456& y4 [0 S; ]& }% l- \
制品归档和指纹 457
& L" S, j) Q5 `! R8 @6 _$ C2 r总结 462
$ r* _4 P2 \+ K, M8 h2 t第14章 集成容器 4653 t' r& ?. r* x* T
配置成一个云 465
/ U& U" ?. w4 c8 e- n$ Y全局配置 466
# m; a9 i. Z0 W4 c- f! q) Z( d! w使用Docker镜像作为代理节点 469
" i2 p2 R1 P: J; K: n! F在流水线中使用云镜像 473
6 }. q% N7 B/ p在声明式流水线中动态创建的代理节点 477$ j* M0 m! q1 a! I' x
Docker流水线全局变量 480" Y5 X6 ]; z2 d' F C
全局变量 480
& _0 [1 f+ W. }, u: U4 jDocker应用全局变量方法 481
& e9 j/ d/ I4 B% x( ]- T% qDocker镜像全局变量方法 487; N, V! o$ D9 N8 B* W9 P; @
Docker容器全局变量方法 491
, G# e8 |/ P' M- ?- r通过shell运行Docker 492
( G3 c- |+ _' S& Z5 V. V8 G总结 493 java8.com
* |; }8 P1 g9 P' @6 a) S" J第15章 其他接口 495
9 O% H& X! J, ~% z% k8 s. e3 H使用命令行接口 4963 Z) W1 k X1 z2 I) w& u" n
直接使用SSH接口 4967 W5 M' g1 Z4 t; }2 n
使用CLI客户端 499# b: k& Y. o' B! W5 n; j
使用Jenkins REST API 501" E. s% |; Y4 \; a9 X
过滤结果 5028 t3 _2 d m6 n% J
启动构建 5049 q" c+ _& z6 F, w
使用脚本控制台 506
& S! P' Y( f I2 J总结 508' a; v+ _7 [3 i
第16章 故障处理 509; c& A1 ?4 Y" v
深入流水线步骤 509- v: {' P1 _; F3 [" [
处理序列化错误 512- i( i$ n9 |# V% Z% F$ v! o( p
连续传递风格 5134 @5 m+ |$ N3 m; i$ l
序列化流水线 513$ p; [' q0 [2 t) J) ~6 `
NotSerializableException 513. h# M& G% P0 @3 y- w6 M
处理非序列化错误 514
" o4 z( J4 F! W5 A& X+ U识别引发错误的脚本行 517' L( I7 x8 i/ n) Y
处理流水线异常 518
|0 F% {/ v4 k& M- j* \在声明式流水线中使用非声明式代码 5188 _+ @; ?7 z1 `/ C5 H
未授权代码(脚本和方法授权) 522
3 Z% G6 V( O# w5 m, {2 y不支持的操作 523
' F' u9 L6 H5 D5 Y$ F4 x% {系统日志 523: ?+ n4 A" E) J5 b
时间戳 525
& w, q4 c2 n. o/ q' L: ?( |- z1 g流水线耐用性设置 526
8 D' ]1 P1 x" ~8 V" d. i7 |总结 527
8 M% [- ~6 m/ a3 {8 [关于作者 529
. `$ j9 D+ r2 G3 P, Q封面介绍 529
% \# H7 l3 ?+ ^1 e关于译者 530
y! E0 ~ V: A
. a3 T: M0 m5 b
' G$ @9 E3 P- L% N1 h7 f6 @ 百度云盘下载地址(完全免费-绝无套路):' P9 x6 W' e1 g( K% Z& q
) M' M; _ ]3 J$ o* i+ K5 Y( T2 h" J7 M
& t& ~* N3 X6 }* ]$ O$ M2 X, G+ d$ [
) l! L! \% O1 i, ~1 K l, \4 g( s; ^
- E! Q# X, Q+ r |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|