TA的每日心情 | 开心 昨天 00:18 |
---|
签到天数: 396 天 [LV.9]以坛为家II
管理员
- 积分
- 12978
|
Java电子书:Jenkins 2权威指南 PDF 电子书 Java吧 java8.com( a; r8 J$ y8 R* X o- {" e: t4 P
- h& y) m* n8 b t4 V* ?( b3 T( _作者:Brent Laster(布伦特·莱斯特) 著 郝树伟,石雪峰,雷涛,李华强 译出版社:电子工业出版社出版时间:2019年04月
+ `" [3 x0 W7 q% d J4 [$ H
# Q: U; f: ~' D& Q编号:166-Java吧资源免费-X0058【Java吧 java8.com】
& C! h% T2 T7 [9 w8 i$ H$ s6 r3 c9 }/ t, s6 C
$ h: L! q$ \& K: L: J+ X. M, U% K6 `# Y- G- }% H
目录:& j5 }; }/ l: {3 s" G' Q) L) Y' D2 A
( s1 i' |5 a% C5 b4 \9 a% M# U3 n7 R; b7 m. t
第1章 Jenkins 2简介 1
9 l/ E; @3 T4 y+ F; M* fJenkins 2是什么 2$ A" r9 o3 U2 H0 ~4 J
Jenkinsfile 3
' c3 C* H- D& L. `" |( Y声明式流水线 5# R( Y( ^( P( N2 s
Blue Ocean界面 69 t' m: ]" Q. R/ }5 w; @
Jenkins 2的全新任务类型 7- \% s( F c c, `
做出转变的原因 10
% q; U& d4 R4 Q! L. }' Y, SDevOps理念的转变 10
3 ?& z+ N6 H% o0 L( t, O装配流水线 11
4 W, \8 {; L# `* q可恢复性 11
# s3 |3 E! u6 ?" R f2 Z可配置性 11
/ C1 h2 Y5 D1 c7 Q8 ~: g共享工作空间 114 w# Q0 F! U6 i9 v L# T
专业知识 12
1 `* u0 s- z2 j. t访问逻辑 12* E% P$ f5 ~% s$ R. \4 A4 G1 e' x0 x3 I
流水线源管理 12. x; i9 I" A; i" d& _" S, @
竞争 129 H; X9 B* n8 i- c, g
迎接挑战 13
/ o# Y; {3 T' M8 \兼容性 132 R. C/ s: t8 t' |9 j' a1 E
流水线兼容性 13
8 w( C$ V! r% R/ m4 b# z' d插件兼容性 151 b6 ^7 g, b7 ?( c V
检查兼容性 20
$ I3 V: U5 @/ y% H总结 21
3 f* ?0 x( D% D) Z* T- }第2章 基础知识 232 U# h- w3 |4 W! f! D% r
语法:脚本式流水线和声明式流水线 24+ w0 [3 f; e# Q/ M; [6 O4 }
如何选择脚本式语法和声明式语法 25) b( q' ?1 G5 @8 p% g8 N
系统(system):主节点(master)、节点(node)、代理节点(agent)和执行器(executor) 264 p4 \" V/ a% p" q! x
主节点 27% L6 A' D0 |5 f: r7 E0 g
节点 27
- V8 ^3 T0 U8 z" ]) |代理节点 27- ~9 G$ y0 M( k- E; {7 C
执行器 28: o" G9 O1 Q5 Q0 a: ]
创建节点 29: M$ J7 P* y1 M, G" ]- D
结构:使用Jenkins DSL 31# x$ n' b4 c6 M. n3 x- t* ^6 a. z
节点 32
/ e3 B4 I- u& U* u ?$ M阶段 34+ Q# _# T g/ q% g- t: `
步骤 34
3 m6 S$ S$ L7 Z8 d+ s2 v6 V4 c支持环境:开发一个流水线脚本 36+ K: y8 Z( {# a; i- a
创建一个流水线项目 36
" ^# T$ t+ |( j0 B$ t$ u. R编辑器 38
7 N: o# V$ D3 y- g/ i/ e. m使用代码片段生成器 39* |( ~. f3 ?4 @9 C/ L. k" T6 Q
运行一条流水线 43
3 _+ Y% X4 Q6 Q7 E. B回放 49, Y0 {* e* K1 a, o: M& l$ A
总结 523 Y. c# |% A. V4 N, v# ]
第3章 流水线执行流程 53
; G. G/ _7 `0 h0 z, p V触发任务 53
% {; q# [; G% z# }( ]在其他项目构建后构建 54
' F5 a+ q0 I2 U1 T周期性构建 54$ D+ ?( G- E. a. m6 `
使用GitHub钩子触发器进行GitSCM轮询 57
% `3 T$ B; E! T) k* aSCM轮询 57
$ ]. i1 m3 L/ [! e; w7 N静默期 581 R. t A7 T+ h8 T" V' ?% |. F
远程触发构建 58* I& E; q" b, [5 F" ~# l
用户输入 585 n. J3 G( T( p# t9 z
输入 59 N, `0 ?, B. g" k
参数 62
* d3 q( i" n! S多个输入参数的返回值 688 m- [6 J: o- V0 }; e
参数与声明式流水线 69; l) W/ Q+ I* y& v! X* l/ D
流程控制选项 744 ]2 {& q7 h% D! @9 T
超时(timeout) 742 R; w# g: v7 N1 f4 a
重试(retry) 76
8 `6 i; R1 d1 b9 u c睡眠(sleep) 76
1 u i( G/ N+ J5 h( b- z等待直到(waitUntil) 76
: |+ _. K* `' w; Y: U, W处理并发 78
6 l9 Y3 x; w; G& G使用lock步骤对资源加锁 78
* W! E3 K+ V9 j* x6 Z# Q1 S% W使用milestone来控制并发构建 80
+ X. ^, {* }, c$ s: R在多分支流水线中限制并发 82
5 U5 r3 L \" C/ l并行地运行任务 82
7 a- W1 Y! Y( _2 q1 V$ U! m2 B- U有条件的执行功能 924 B0 Y+ C9 z9 e( |0 `) _1 O
构建后处理 .94
+ U6 H# T1 ~. Y7 Q* {脚本式流水线构建后处理 94/ q; X1 C- P! @% z& ^7 d
声明式流水线与构建后处理 96
$ m6 E3 ~5 ~3 |& C( i v! w总结 97
0 S! @. T8 g/ f第4章 通知与报告 99- }. s: ^' L/ ]$ S& r) y
通知 992 {: _* r0 _! _9 C4 ~2 ]$ U( `3 C8 d
电子邮件 100
+ T) f7 ~! K! @! [: `. Q# T协作服务 110
0 b2 F; h3 A* u7 N) z. ~报告 1204 u. t% G+ H# ~' U8 L8 [
发布HTML报告 120
0 [) F- S! k; }' i% _/ R% z2 |总结 123
+ R% ^ X( u0 s2 d第5章 访问与安全 125
2 ~& R) Y8 z) H* m: k+ X安全加固Jenkins 125
0 }6 z5 `! c8 k: `: D3 G) B1 v启用安全性 126 _) `! g3 | k4 D- [, e9 f
其他全局安全配置 1292 n2 ]8 c2 l# M. _
Jenkins中的凭证 1335 m" J' N6 f/ \) Z* u3 U
凭证范围 1340 x$ S+ F# \1 w0 N
凭证域 135
8 ~- A8 O7 F+ G% r- {" R$ N9 r凭证提供者 1357 z1 s' u1 U& q0 f
凭证存储 136$ U; k" R$ w- I- @2 s
管理凭证 136
9 B+ I% B1 {5 t+ W选择凭证提供者 136
5 [- L- l% b5 P) ?- \) m) V选择凭证类型 137/ `4 @; g' N7 r3 r. H+ [+ g5 `
通过提供者指定凭证类型 138* I! D8 ?3 e; R3 `1 H- |3 O( Y4 f5 J
创建和管理凭证 139
1 e1 j) x+ o8 ?1 Y# ~4 a% U上下文链接 141+ A% v% Q0 f9 ~0 x- M1 Q
添加一个新域或者凭证 141
! @+ ~" S3 n9 M S使用新域和凭证 1441 ~5 Z$ r# O6 G# Z
高级凭证:基于角色的访问权限 145
% [9 n; H* d& Y, t4 R9 C" S# e基本用途 146: A. M9 o; r" n5 f! r1 ?
管理角色 147
/ N- ]# y$ E' x+ \( \+ R- S8 Q分配角色 152' [# [7 N2 z- e* q/ A
角色策略宏 155. f% d- \/ x5 _3 B8 P6 k3 S
在流水线中使用凭证 157( u- u+ z: j% \
用户名和密码 157, C6 t. i: y4 k5 K
SSH密钥 158
5 x. h9 P8 ?7 l令牌凭证 1592 m0 }+ B/ m9 s7 u1 ]
控制脚本安全性 160% l# m! o8 N8 v' i' l
脚本检查 160, E! K1 P. {$ J
脚本批准 161
2 `: _+ k7 J4 H5 W# ?, n5 I/ t" _Groovy沙箱 162- d, Z: X& F5 Q
Jenkins凭证与Vault配合使用 164% |0 F4 D k9 |$ \1 p# l5 _
方法 164
7 n- a4 w y: d% w( ]安装 165
5 g+ f# P' [% z, a) c- w! A创建一个策略 165% Q8 Z9 U' |- i8 U5 ]
身份验证 166$ k2 P2 n# s2 B" S
在Jenkins中使用Vault 168" V4 S, u0 F; e! l8 `, A9 h
总结 1714 t$ w ^1 b% u. f$ M: u
第6章 扩展你的流水线 173; X1 M! j1 u) [
可信库和不可信库 173' M- `6 e8 f' h- G, M
内部库与外部库 174
$ |" n! ]1 Y7 q& h. l内部库 174
+ B# G% Y- B0 v: o' o外部库 176 i+ S3 p& J7 ~6 e- A# h" w
从代码仓库获取库 178
L; { D5 d, Q. v1 N% oModern SCM 178
5 K! c$ j6 q, c2 BLegacy SCM 178
N/ O; o9 B7 E1 W在流水线脚本中使用库 179
' u+ j- ~: n% y) X* j从源码版本控制中自动下载库 1803 R# I7 e- j% P. x
加载库到脚本中 180" v+ S1 W0 p p% I$ x
Jenkins项目中的库范围 1825 r" d5 \4 Z" m1 v. M+ b; ]
库结构 183
. ~# f; ?7 |4 i' Z9 ^! Q \样本库例程 183
- r3 I4 `6 _6 K' U! ~; _共享库代码的结构 184
0 V5 J9 b0 u% w t5 X% L使用第三方库 1951 U2 G" N, f8 @
直接加载代码 1967 t/ F: B: U) j6 i
从外部SCM加载代码 196
: o* w5 G' w# ^( l回放外部代码和库 198! g( Y5 N" h y2 `- U. q# z9 z
深入研究可信与不可信代码 2003 ^& a5 V1 i4 n
总结 203. N7 J# z" b4 M% z
第7章 声明式流水线 205
) G* W0 [: R* l, f2 B0 H! o }动机 206. x# u8 E3 H% }6 T# U$ m4 m( t
不直观 206+ r/ T2 S0 {+ t7 ]* }# ~- R
掌握Groovy 206 B* x& T w; ~4 V& K+ {0 h+ ]
其他必需的装配 206
) h# {! I$ f" D+ W/ Q$ q结构 207
1 B, U1 ?! m% Z! X; l+ a代码块 208
( X, A3 B8 R( y* ^0 m! p p% c部分 208
% F$ ~* M5 ^% L2 Q指令 209
) b+ ?4 r, b2 `# s# e, w步骤 209
2 J, O/ H$ L8 b3 ~8 [条件 210
" C1 M5 }! Z- X: k3 R# J: u0 Q构建代码块 210. x" u3 z7 z/ m) F4 E! ^. R6 \
pipeline 2110 |( [6 T" E6 f& o6 k# @6 y% ?+ ^) w
agent 212# B9 T v7 P2 J- P5 `, P
environment 215
# s1 r u5 y$ s& D9 btools 2163 T% c) Q( S& B+ {8 B1 s) ]9 C' b
options 219
& k2 ^9 G4 v1 C6 Gtriggers 222. s/ J/ D/ l/ I' O
parameters 224
% E! s( p& q9 e( hlibraries 227
5 A$ c0 r$ d# |4 o0 t# A% o9 j% sstages 228
! V8 U ^- H! P% ^post 231
2 l5 s6 U# R* {- I6 L9 Q处理非声明式的代码 232
' q, k7 N& r5 J1 F4 j检查你的插件 233% P7 b9 ~; v- M* G% H+ X* R
创建一个共享库 233/ t) Y3 h% |% _" w4 X k
在pipeline代码块之外放置代码 233
. u6 p) e/ W5 m f5 o2 G: B* Hscript语句 234
5 P( x' @' f7 I8 H+ ^在一个阶段中使用parallel 234
& ?3 o4 @4 F# m/ W; [脚本检查与错误报告 235
2 N9 f, `) I/ Q' F3 ], A' m声明式流水线与Blue Ocean接口 2387 g) t' a" ^$ E+ a
总结 238
( ~0 @6 J6 O& Q* ^第8章 理解项目类型 241
0 t m, c5 G3 i# I- E; z通用项目选项 241& x' j* d4 N0 ^, L
基础设置 241; i$ n5 t& ]* c9 A$ c# w
源码管理 2474 B3 G, R4 X$ Q" @
构建触发器 249
- J) J& U$ [: @3 D构建环境 256
% O, s, N& s, a) z B构建 266& V. d3 m2 p# E& N0 H3 e
构建后操作 2663 W3 t" k5 J) Q$ ]
项目类型 266 Z4 @- p9 \4 t
自由风格类型项目 267
9 C ]' C' Z* X/ L# H; d$ [/ oMaven项目类型 267! z) B6 B' {$ d
流水线项目类型 270/ h9 v2 J5 a/ x7 D/ T6 A+ E
外部任务项目类型 2727 p; i! ^1 M5 M: w7 ?
多配置项目类型 275. A. I. e0 U" u" h. z4 V
Ivy项目 2807 Y) L0 I% ~& ~$ w
文件夹 282
: J3 ^2 C% m3 R( W0 U& U+ X) b多分支流水线项目 287/ Q, {# ^9 k9 I6 R1 o
GitHub组织项目 292) b# A' b! S8 h# j8 P
Bitbucket团队/项目 296) `& k6 M ~; f! K V
总结 299
( [ n/ _- g! g. |: k第9章 Blue Ocean用户界面 301
! n# H+ F, Q h) f$ h& j部分:管理已有的流水线 3025 @. |' c/ p! ^# E! V
主界面 302
# }- }/ l& _( P& x1 U项目详情页面 3058 ]3 q# U& l o; _$ z; s+ m
运行页面 316
. x1 R# S+ }* x: t0 c' H第二部分:使用Blue Ocean编辑器 325% I6 D$ a8 G& ]* O! s0 Q' o
不依赖现有Jenkinsfile创建一个全新的流水线 326
7 u& V L ?1 m4 `! x, {6 r3 _使用编辑器 330% r) y3 K# {/ D0 g) R: E
编辑已有的流水线 340 w- v/ t6 S' C) o$ \
导入和编辑已有的流水线 344+ A; G! x9 y; ]: e2 f" d" U' C. Y
使用非GitHub仓库支持流水线 354
7 H; m n% [8 U/ G总结 356
/ I5 p) u. i$ Y5 Q* `& t# `第10章 转换 357
$ R3 H3 Z& c [! \5 M9 C通用的准备 3585 o4 W8 X6 g" \4 |8 R9 ]" t
逻辑和准确性 358
; Y" a1 m8 z" B( c+ { G项目类型 358
- n7 S+ H3 ]7 g+ H2 |系统 3582 @1 d; |6 i- K6 x
访问 358% _; E1 p/ j8 E, y% p
全局配置 359
& c' ]+ K9 U4 A+ @) ^. X) }8 e& i插件 359% K; v5 q# K# E& S" r9 I
共享库 3591 k2 y/ X5 l w& t! p
将自由风格类型的流水线转换为脚本式流水线 360$ n8 B9 v6 }: A: _, d* I: a2 K
源码 364
* ]/ i0 s4 G5 ~5 q* m) A3 l& I编译 369
6 J+ z8 d( r, n! @; _5 h6 s单元测试 373, B! @; t' }/ X+ |8 @- ~
集成测试 377
; V/ h; F" V- L6 B% I) w迁移流水线接下来的部分 380/ k: s) Z1 E5 W! W9 b
从Jenkins流水线项目转换为Jenkinsfile 385
+ R2 h U6 I$ b( D9 I s5 C方法 388 i8 S. Y0 I: C3 Q
后的步骤 395% ~! ?! u9 T/ j8 }$ `6 k8 l& r2 u
从脚本式流水线转换为声明式流水线 397$ B! u" v" g) }7 }# g$ `
样本流水线 397& o5 ~: q; F& s/ g6 |. k% U0 d
转换 3992 u. x" x: ?6 u [" a* t) t
完成转换 402
: t+ i' {9 B( q! j& n可用于转换的通用指南 403
& `8 k4 T2 y% B- w+ G, I" {3 ?6 l总结 405" l5 c4 ~+ N7 t. h" i1 T
第11章 操作系统环境集成(shell、工作空间、环境和文件) 407
: v1 M9 Z+ f' C0 E2 O使用shell的步骤 407' r: ^3 n+ G7 @
sh步骤 4084 t0 F( v2 L* R1 o3 x
bat步骤 413
* S+ f# A% W, ? ]powershell步骤 414
! A+ L- m: ~4 b+ _使用环境变量 415, a& X) J. C6 B1 O
withEnv步骤 416
7 M! J! z2 \3 @' A" @ u7 F* G& v使用工作空间 418
6 t- Y9 p3 L$ N- f创建自定义工作空间 418
4 O" J2 Q& S; ]. O' z, L6 `清理工作空间 420
" w5 B! r* f; k6 F文件和目录步骤 4229 S# H! B/ b( O9 k: Y6 [
使用文件 4222 j8 ^6 l/ k9 `+ n
使用目录 423
, M" b1 k4 h6 e使用文件和目录的更多操作 424
' u& J. X1 W! y) e/ u+ q6 s总结 425. }' X5 ]1 M8 j! k( U. j
第12章 集成分析工具 427
$ h* Q, k4 A& n3 O1 p5 }SonarQube调查 427
# P# o2 G0 ?6 @使用个人规则 428
% J: O8 a! a9 b3 z @5 P质量门和配置文件 432( ]3 P8 `: K3 V: o2 Y
扫描程序 434. I: g4 }! J6 B! X, z
将SonarQube与Jenkins一起使用 434
4 D; @. _' w i# s' X" b5 H1 c全局配置 434
2 {6 L. _' m) Y r6 l0 ~, V在自由风格类型项目中使用SonarQube 436
! H$ v( j% V& L+ V' K: B2 _5 A在流水线项目中使用SonarQube 436
" g+ ~ A9 o6 b F3 A利用SonarQube分析的结果 4379 P2 a# L2 ?0 ]) `$ t6 x4 Z
在Jenkins中集成SonarQube的输出 441& U9 V' ^( w* k" h5 Y( v
代码覆盖率:与JaCoCo集成 442
* n: w1 U0 f4 `" c( X/ H" H关于JaCoCo 4429 r6 n. ^. H& H+ K* G
JaCoCo与流水线集成 443. {; R# ~8 S2 O) R7 ?: \& k
在Jenkins中集成JaCoCo的输出 445
+ {. F4 |0 S; t总结 446
: C B3 Y7 E: t& l: d& R% C! N! E第13章 集成制品管理 447
: ^! Y) N) Y# ^: z发布和获取制品 447
2 G9 K& J$ }& r# G- |安装和全局配置 448
+ @0 j& X6 Z" ^; K) D) K在脚本式流水线中使用Artifactory 4496 ?+ O1 N0 w! P! A
执行其他任务 4549 A2 | _3 M$ b% t6 @6 v
下载指定文件到指定目录 4541 y, R2 G @4 s4 c( Y5 g
上传指定文件到指定路径 454
7 m1 p8 l0 q" p4 ^: r1 C' A2 V设置构建保留策略 455
d2 t) ^, n4 J3 h) m0 B$ M构建提升 4557 n1 ~9 J z- `! O' U% Z& Q7 i
声明式流水线集成 455- a! \% q1 g l4 D) i3 L# [+ u
Artifactory与Jenkins输出集成 456
% w2 d" P/ r+ c3 j! o/ }5 m制品归档和指纹 457; q( t4 _3 v% X0 @; D% ^
总结 462) G# e( z& O9 A% ~* O
第14章 集成容器 4651 w; B1 f& X& X
配置成一个云 465: F. N; o, S7 ~0 O/ j
全局配置 466+ _, _9 z1 j- j8 E! j: X
使用Docker镜像作为代理节点 469
$ y6 M) u9 L7 C/ v& M/ k& z在流水线中使用云镜像 473( [7 X0 E: O" V# C
在声明式流水线中动态创建的代理节点 4775 |% L B8 }" Y
Docker流水线全局变量 480
6 c2 V4 A' v# S4 ^) D3 y全局变量 480" j( w. P8 }! N% u5 j
Docker应用全局变量方法 481
8 s7 F6 m6 z( X. y9 iDocker镜像全局变量方法 487
6 V6 H1 H0 u8 ~% nDocker容器全局变量方法 4913 D) g4 S& v- z2 h X( p
通过shell运行Docker 492! Z7 @' C, ?. h# i" {7 L
总结 493 java8.com9 D }1 a- H$ G
第15章 其他接口 495
5 B5 _* M" y9 ^0 I" G+ h使用命令行接口 496
% \2 u0 L1 i5 j' N5 ?4 f/ \" \# z直接使用SSH接口 496( Z, p! q* b$ g; P+ l0 T. w6 F @
使用CLI客户端 499. J* a. c# X) D
使用Jenkins REST API 501- q) ~5 \( M+ y( H- O" C
过滤结果 502
- [' k4 I! m* `' s3 L启动构建 5049 c* d3 Z5 ?6 y; Z
使用脚本控制台 5065 H/ p& V* R Q* q
总结 5082 R! x. L F8 a' W3 ?
第16章 故障处理 509
: e. ?0 z$ p* c. F深入流水线步骤 509# |, R0 n: {9 d- e! X3 ]7 f" t
处理序列化错误 5123 o1 b7 }" G+ \# ~* L1 r
连续传递风格 513
: p# x1 L7 q- |: _9 l序列化流水线 513( _1 |: S9 ~; M4 \: t$ V% W/ ?# H
NotSerializableException 513
" P4 O: Z# c; M9 b5 W处理非序列化错误 514
3 Q& C& v) e8 E. \! |/ i Z! m9 x识别引发错误的脚本行 517
4 u6 h! |8 o. P) `- _处理流水线异常 5186 A& \8 S, t7 { Y; K. z
在声明式流水线中使用非声明式代码 518
1 P) Q# a2 i8 O2 @& f, I- G未授权代码(脚本和方法授权) 5223 E4 q) r% K9 @$ F! D
不支持的操作 523
2 Y+ d- Q0 ^ b! a! i系统日志 523' c ~8 b8 {: \- Z9 l2 t
时间戳 5259 i. \6 |8 A8 y2 o& H! L
流水线耐用性设置 526( A4 j `' G4 f6 A
总结 527+ J. K/ Y- y5 i; m
关于作者 529* P" \2 u f/ G, m+ Q8 i% ]
封面介绍 529
4 J8 R2 j( ~& y9 k! `# |& s7 w0 @关于译者 530
6 N' L* [6 ]* a; g/ e
, l7 [3 c' U$ W: w
0 U8 e' u. o, ?7 j7 A/ V 百度云盘下载地址(完全免费-绝无套路):( K. m+ V1 v. Q
3 p. Y8 m ^ A' w: f
% _5 |1 Z. n% z% w9 g ~
/ N" {& {- B! @% P9 _- g3 @
4 z6 X8 \/ T4 M" q5 l2 c G) j- `# S0 b' {0 Y% z0 D4 p" M
$ w! |: U, B, T s0 k- p1 Z5 V) K# A
" \, B6 U% v9 c |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|