TA的每日心情 | 开心 10 小时前 |
---|
签到天数: 367 天 [LV.9]以坛为家II
管理员
- 积分
- 12220
|
Java电子书:Jenkins 2权威指南 PDF 电子书 Java吧 java8.com# V+ Y. r4 j+ C1 ?& G
& I$ B3 p9 D: ~" U作者:Brent Laster(布伦特·莱斯特) 著 郝树伟,石雪峰,雷涛,李华强 译出版社:电子工业出版社出版时间:2019年04月 4 D# S% O4 i: p4 H
( m, {3 f7 k7 N, n' i3 c3 K7 @9 z: v
编号:166-Java吧资源免费-X0058【Java吧 java8.com】
% `; E7 A/ m7 E( u
, A" [) T7 e! Z* G# Z& Y2 d+ e5 D b9 z' _- t
3 Z0 R: C; D( P! T+ U9 y7 y- {
目录:6 u9 O5 P$ { N, u4 h) s* u
7 ~. K* v _& K. B9 v9 ], s& d; U3 d. N: f
第1章 Jenkins 2简介 1
& O% F& x* f: {( e3 r3 [/ z0 w, vJenkins 2是什么 2) E+ v4 j( }1 ~ D
Jenkinsfile 3
5 ]8 Q; [/ W& R. i. b3 M% K+ o3 ^声明式流水线 5
( i2 s9 W* c R0 i# e1 e- \7 SBlue Ocean界面 6
5 a# m: w( a5 [7 zJenkins 2的全新任务类型 7& z" ~# r0 I; S2 D) d2 m6 O" X
做出转变的原因 10
: e% t* K' N, NDevOps理念的转变 100 i& c( q' g9 g
装配流水线 11
3 B- v. h$ ?' o# q5 n( R1 W$ i可恢复性 11# x5 D1 V' D- w8 L, D* g; c
可配置性 11) |6 e& D% V$ l& {
共享工作空间 110 P. N f0 t3 l/ r |
专业知识 12- u& R$ \, m/ U' ?, N
访问逻辑 129 V$ E ?5 r: M& F
流水线源管理 124 x) S% l8 F2 b9 o5 K
竞争 12' ?" A( V% Z5 x7 L3 y
迎接挑战 13
! u0 [( w/ r3 X& {/ A% ~. ]兼容性 13
9 {* N2 t1 H0 ^3 z: F0 z# Y" K+ P F流水线兼容性 13( k# U" N/ U2 U2 C3 j& \) L
插件兼容性 15$ m+ B( |3 l! z+ v
检查兼容性 20' g/ |; [/ y7 M. d
总结 21
! w5 t% j6 x( T第2章 基础知识 23
2 M9 S& B" Q* {( _语法:脚本式流水线和声明式流水线 24
4 T8 w/ u0 ~* V. i8 O" y3 ]如何选择脚本式语法和声明式语法 25
& I# c; E* d, p$ W系统(system):主节点(master)、节点(node)、代理节点(agent)和执行器(executor) 269 C5 j% p, S9 G" d4 G# o
主节点 27
8 V1 i) t' Y% D4 Y! G, u节点 27
3 Z% T& C9 k, A( V# m- i代理节点 27- @0 p& e+ e7 U+ ?% g* j; z, t
执行器 28 X* N1 C" C) d T+ i
创建节点 29
+ j" p4 P" [* l- A B结构:使用Jenkins DSL 31
5 ]! t$ @, K7 w. b2 n& q节点 32
( x3 V! U; c6 u, L+ F6 i. i* f1 a阶段 34
* v0 N$ g, |6 R" s q步骤 34
% Z4 ]1 Z5 M3 q支持环境:开发一个流水线脚本 36( K9 F) A) M4 p" u" G/ }- F3 |
创建一个流水线项目 36" H5 ]: G- {9 `7 {1 |$ s/ D* `
编辑器 38! r @% |8 q" P* B- [
使用代码片段生成器 39- Y" T8 _8 A3 O+ V% N R
运行一条流水线 43, S8 s7 ^; v9 Z9 O
回放 49
, }1 U( d$ @* K' S- R总结 52
* U7 A( ^, x5 O2 ` u8 i0 @* ?" s0 Z第3章 流水线执行流程 53
( R1 H) S3 h, _, J+ S( ]$ q: P触发任务 53
8 [' z8 f5 a/ E4 u在其他项目构建后构建 54
/ A7 e! K; ~7 n2 _3 f5 s周期性构建 54
, M6 J1 j+ T* U# j" E使用GitHub钩子触发器进行GitSCM轮询 57
+ a% x1 b/ e4 J e) L8 NSCM轮询 57! G- }5 j! Y+ _7 Q
静默期 58
8 B' S0 @3 ]( ]) r% ?2 c0 \远程触发构建 584 K8 K2 z" U3 I3 \
用户输入 58
) W7 P7 l2 b: _0 Q8 r- A" q输入 59
5 S; i+ `* V( z9 a3 q' e参数 62+ G" G8 r s8 b- `" q& o& g
多个输入参数的返回值 683 N F. v% L T/ F0 T
参数与声明式流水线 69
" r2 S. l; M+ N- W- |- { k7 D3 {+ e流程控制选项 74: i7 x: g3 P' _" s
超时(timeout) 74: h% H K+ F4 J* v! M
重试(retry) 766 w% R! w0 {6 a; D# a& {6 F9 u
睡眠(sleep) 762 E2 A7 q8 X M. E) p% U6 j) s& Z
等待直到(waitUntil) 76
4 [2 y7 Z( h. @% F0 f处理并发 78
, a H! Q/ V5 F! i& W6 J使用lock步骤对资源加锁 78
1 K% W( c- K/ O5 K- H使用milestone来控制并发构建 802 j/ H* ?' J0 ~) z
在多分支流水线中限制并发 82
( m1 X/ u2 A' k: ] @: P并行地运行任务 82
( g- |! ]* V) L. _8 U3 i有条件的执行功能 923 E h9 k9 U3 x& [7 G7 I
构建后处理 .949 F+ a4 ^( v% s, u) u' j( |' {
脚本式流水线构建后处理 94
: N. p# ^: o# Q; Q声明式流水线与构建后处理 96
& M1 L" I: p5 ]# G0 e总结 977 j. U! V' D' h" H/ H
第4章 通知与报告 99
{1 k2 ?# s; L* g2 E) ]0 s e2 F通知 99
7 _1 A! D; {) E# A) ~/ i r$ {) B电子邮件 100# @) ^8 f. D, X( G5 o( e
协作服务 110
6 a) s& l' V. c' R" g报告 120: B% u5 N E, ]
发布HTML报告 120
. Q- h6 K9 M$ e! W) J总结 123+ a0 N/ \2 c* \: h+ |
第5章 访问与安全 125( [7 U% ^/ m3 P, I
安全加固Jenkins 125
, L( ?4 v2 s! l" z* M6 L# @; z) G5 A启用安全性 126
7 W- i. i& \3 v/ K0 o2 x5 V其他全局安全配置 129 [& V6 s6 f9 K2 m' C# }: X" s
Jenkins中的凭证 133& I3 ~5 i! w* \7 @8 D
凭证范围 134
% b! ?$ x! `: o0 }, u8 M3 \凭证域 135, c9 G0 g/ Y0 V
凭证提供者 135
# q3 }6 P% |( ~; H/ ^: N7 v凭证存储 136
* w2 ^% J/ a% u3 ?& v) e! y7 K; l管理凭证 1369 Z5 }0 [+ Z+ ^, j' b
选择凭证提供者 136. q) Z X2 g$ ^" T- N @: \( n
选择凭证类型 137: O1 J) `7 N, L
通过提供者指定凭证类型 138
# {, T' j4 M! z+ t/ B; ^3 _创建和管理凭证 139
; D1 n% I$ r7 s, b- [0 R9 m上下文链接 141% V u0 F" k @" q' o
添加一个新域或者凭证 141! J+ i. U6 y1 t7 |
使用新域和凭证 144
" m, O+ H* g* Y0 p9 g9 L- W高级凭证:基于角色的访问权限 145
# a6 ^3 P+ s, ^* w! P8 A. e基本用途 146( `! I8 V" N9 J/ t0 j
管理角色 147$ S; [% R/ [% Y- g
分配角色 152
2 Z/ @$ N- C: S. K- p8 L/ |- n; M7 R0 h角色策略宏 155
. } b* w' u$ B$ C8 Z, X" t: q在流水线中使用凭证 1577 K% o8 `# Z I4 \/ e7 e
用户名和密码 157
" p9 r1 N6 A$ x7 }SSH密钥 1589 h8 l8 m3 o) @+ |% s
令牌凭证 159* ]# J) g$ ~+ Y- C3 Q7 t
控制脚本安全性 160
+ n; o0 Z# t# F0 d3 l( o5 S脚本检查 160& K" }; L$ V" f; t+ [
脚本批准 161
0 J$ d% R; l" U% P' C# T0 {! {Groovy沙箱 1627 a: s' z7 R$ O; S" U; t
Jenkins凭证与Vault配合使用 164
$ O3 z [' }3 p, X* @( G方法 164
[4 c k; v. K2 n安装 1657 t: M8 V) ~" y5 r% d9 d, M
创建一个策略 165
8 C* W2 z3 S0 Q$ S t6 V+ w6 Q身份验证 166& x: r! N. E7 D- e. u7 e
在Jenkins中使用Vault 168
9 d# j6 y$ @& u! [3 |总结 171
2 D2 i% y, u; S! R5 [# j第6章 扩展你的流水线 173, C* p* `' X/ m8 N2 u
可信库和不可信库 1733 a# I& N& V. F5 f! |
内部库与外部库 174
0 T" q9 ~8 P, {# X内部库 1745 A& s& y! z2 g2 P. [! ~
外部库 176' [+ r# H0 a+ e# r; b
从代码仓库获取库 178: U2 Q3 x) @* I/ U% c% V
Modern SCM 178" E! A: @9 x( ~+ W+ y& x
Legacy SCM 178* e# }/ R2 t) ^2 ]5 u
在流水线脚本中使用库 1795 A' g- I8 _' o/ }, ^
从源码版本控制中自动下载库 180
{* u3 p. m1 F5 _- u加载库到脚本中 180/ @/ P7 {, A5 d
Jenkins项目中的库范围 182
; D9 J: q7 q- t6 r, H5 h, D& }库结构 183
) Z# f8 b$ n& n样本库例程 1834 V4 Y, Y4 i" T8 Y" m/ n
共享库代码的结构 184
& g0 ?, V( {: A. N9 ]2 X& h使用第三方库 195
( o! D- @$ U2 Y6 e) x. y; ~直接加载代码 196, F% C; x. Q3 l- O# L8 I+ @, U9 C
从外部SCM加载代码 196+ Y/ i; c" h, z+ a
回放外部代码和库 1983 M0 I) _, S6 f
深入研究可信与不可信代码 200
q$ X& M4 ?. A" ]总结 203
- B( X/ V+ y! ?% ~- J* f第7章 声明式流水线 205
L; |! A3 Y# H4 q动机 206
( N/ z' g; ?% Y- O: `不直观 2068 U/ h( O9 X8 c- x6 L- r2 I s& J1 [
掌握Groovy 206
; A3 P$ E# w) X. f其他必需的装配 206
0 L9 E0 A0 J6 s% H1 O结构 207
" Y8 b0 H" w/ d代码块 208
$ {" W7 g% @. H; L部分 208' I9 T% ^+ q1 p8 j8 v* Z7 ~$ ?% |5 R
指令 209+ v7 d+ t- z) H$ [% @" [7 c
步骤 2095 w4 T! o2 T: a$ w
条件 210
7 u1 s, M$ N" @0 w+ m构建代码块 210
( j1 v; q% Y; s4 Y9 xpipeline 211
) X2 a5 F; f6 x. Q6 K% fagent 212 ]2 z' R$ ?- X& G1 Z8 X7 e( u
environment 215/ X) c1 w7 q. l# p
tools 2169 Q* I! M7 ^6 D( F
options 219( K2 V R9 V7 F
triggers 222+ j) R7 |$ U! o* E) c/ ?6 A, I/ b
parameters 224
* w, V& g, L* Y+ Ulibraries 2276 S. p" \% H: V* W: ]8 [3 K n% `
stages 228% z9 O, {: Q- s1 M$ j) D
post 231. T2 Z8 R5 j4 j7 N9 G& \
处理非声明式的代码 232
6 i( x, L. v" @& K! i$ K检查你的插件 233
- f3 {: I0 X3 ~" o创建一个共享库 2339 D# J& ? \ ]; t# b# C
在pipeline代码块之外放置代码 2333 l+ p4 J- h, m7 |* Z6 @" w
script语句 234
' J* k5 c2 y9 \! y% x8 [# i在一个阶段中使用parallel 234
9 l* i& F5 ~: S脚本检查与错误报告 235) j% K" @: l: S2 z: q: O
声明式流水线与Blue Ocean接口 238
, Y/ F8 e- }6 r: m总结 238
, D& J! ~6 V! i( c& B5 v第8章 理解项目类型 241+ J+ _& D8 i1 ?9 u5 D
通用项目选项 241
, J* X Y1 c) s6 k( p/ O基础设置 2412 N: ?8 g! k; ]6 [# D
源码管理 247) Q" i6 U5 v* S6 i5 F% ?
构建触发器 249* L$ a1 w% w" k. a
构建环境 256
) p2 a2 g* O, h: D6 H5 M5 ~构建 266
0 T+ `5 u% b& g构建后操作 266
% n. Y* o. S2 @7 R$ J项目类型 266+ R+ @( a& B8 J2 u
自由风格类型项目 2670 }9 U$ j& F# e
Maven项目类型 2673 Z+ X& l& ~" K2 i- ]" G, C4 B4 }
流水线项目类型 270
) ~/ U: w6 N; P& u外部任务项目类型 272
) O* M. t# ], Z8 J多配置项目类型 275$ J" `. |$ {5 U% |$ I7 o' Z
Ivy项目 280
C; U( o, p8 j& }5 N* x文件夹 282
Z- y# v" G) y4 k" M0 b多分支流水线项目 287
3 @/ }1 h+ b. q* z& C% EGitHub组织项目 2923 U" O! K( o0 D! A1 @1 _! X: _" ^
Bitbucket团队/项目 296, o" G1 E, {7 ?( ^& p
总结 2993 Z: c0 t( t5 l
第9章 Blue Ocean用户界面 3012 a: b' X) G% T# {+ Y% V" k
部分:管理已有的流水线 302% l; T, I0 e; o; h
主界面 302: w' b; J% W, a/ ~- `* W( X
项目详情页面 305
' ~6 Q: F: i* `% h/ Y9 ]3 `运行页面 316
# _! ~2 x5 D8 y3 j9 p7 ^% @) u第二部分:使用Blue Ocean编辑器 325; F/ i) R8 p# \) q5 h
不依赖现有Jenkinsfile创建一个全新的流水线 3266 D/ ~+ I' w1 V0 R3 G; b+ q
使用编辑器 330
5 s$ s# t5 u2 \3 @" a) n编辑已有的流水线 340+ F- Y7 y0 {- b4 C" O
导入和编辑已有的流水线 344
: X: G; S1 a" u2 a9 a t使用非GitHub仓库支持流水线 354, ~' P4 C; S7 T+ r: \
总结 356
+ D" V3 K. c) R' c1 p# S第10章 转换 357/ Q$ I, _5 f5 d8 I
通用的准备 358
u# r6 }, r9 ]: m逻辑和准确性 358
/ d3 n; p3 |+ y5 y2 V* B项目类型 358
0 q( b) S% m1 S1 |, ]' j! U( `6 t系统 358
) ]9 W$ }7 h3 G c访问 3583 \2 y6 P+ _ K" N3 k
全局配置 359& o$ Z$ a8 [2 r1 m0 A/ F
插件 359
7 ?+ d V) a6 w8 a共享库 359
& V; }, K4 o: {8 d# C将自由风格类型的流水线转换为脚本式流水线 360' Q( O! v; C. g7 ~& n, K
源码 364( k( }/ J8 w' U: e9 D7 i
编译 369
1 r s4 \1 @8 e; m单元测试 373: E& r/ L- O9 b
集成测试 3770 K( I( r R2 L: o! p4 y
迁移流水线接下来的部分 380
, l* {. W# g& [/ r+ s% J从Jenkins流水线项目转换为Jenkinsfile 385
. c6 q# X2 T4 l" ]8 l/ }0 I方法 388
% |9 W+ }) D' q. p7 N0 D后的步骤 395
5 G; q L& d1 ]& Q+ v& @从脚本式流水线转换为声明式流水线 397" J9 M. w5 E3 X9 I3 i
样本流水线 397
" A1 W: n1 q7 J& A3 `% ~& _. N5 z转换 399
, a! R: P9 n; i# c; ]完成转换 402
& \& t: y# ?2 W. }) _, h可用于转换的通用指南 403
( u4 s2 I3 d# V) y# r( y5 ^$ x总结 405
! b6 [; j! b' s. I# C第11章 操作系统环境集成(shell、工作空间、环境和文件) 407' |9 v, {2 [# h* _1 R
使用shell的步骤 407$ c4 v/ S0 I5 E, M. K4 Y
sh步骤 408
$ |" d4 y1 h0 h' L+ ibat步骤 413
" o' |' i& M( t' |/ J* }0 _8 Epowershell步骤 414/ R( `' X( s& R8 I0 }/ v! H% D$ n$ Y
使用环境变量 415( p+ Z0 I5 N) }) C
withEnv步骤 416. ]% `: R8 p; U: c5 g6 v3 v3 B
使用工作空间 4181 p' u& T: a3 b8 H
创建自定义工作空间 4188 A$ u* j: A8 x- N! ]# l% K/ N
清理工作空间 4205 h( H5 p) l+ Y0 M$ R
文件和目录步骤 422
0 p6 q8 p& U& x- C3 O! n1 u+ A& L使用文件 422
7 z1 F2 z0 A" l4 S* e0 M2 A使用目录 423
6 M3 ]8 K( J8 i4 ]! `使用文件和目录的更多操作 424
6 F! A: d( D& W总结 4256 L+ h- l4 u( g) x7 G: `
第12章 集成分析工具 427
+ ^2 O/ z3 @" lSonarQube调查 427
- m% ~; b) }+ U使用个人规则 428+ e* i& r' A0 H1 W& N7 L, b) x5 `
质量门和配置文件 432. p: r6 [- Z4 G
扫描程序 434
5 l1 X2 X- l8 }( a: {5 A将SonarQube与Jenkins一起使用 434( g% D6 Y; K( _6 l% e
全局配置 434
- d5 M6 E- K$ h c' |在自由风格类型项目中使用SonarQube 4360 U0 c% F( t P8 q( q& q
在流水线项目中使用SonarQube 436; Y7 D. l3 n* A
利用SonarQube分析的结果 437& d. n. F4 P& v$ ^
在Jenkins中集成SonarQube的输出 4417 p. U; u, V7 j
代码覆盖率:与JaCoCo集成 442
- o5 z3 w! v: z- x关于JaCoCo 4421 O3 T0 |+ ^% L0 g
JaCoCo与流水线集成 4438 z/ D% _: u8 n" Y# b: }
在Jenkins中集成JaCoCo的输出 445
: I& F4 h0 q& r: S/ K总结 446 U+ y/ ?/ W/ X- y+ y
第13章 集成制品管理 447
2 `0 `+ @' V5 w. i& k& ]发布和获取制品 447 e# U$ z0 J: m% u' G0 Q
安装和全局配置 448
0 D" k1 K8 o) t( h在脚本式流水线中使用Artifactory 449
: l/ b# u$ l Q4 K4 t7 A, `4 h* I执行其他任务 454
) k! X" J$ c4 O+ F3 ]下载指定文件到指定目录 454
- b+ P( j$ F: l2 J( l3 b/ x上传指定文件到指定路径 454
: H0 K' `+ ~4 `8 g) a) c, _) |设置构建保留策略 455
! w$ _7 ^, F0 c% W3 J构建提升 4559 j# @5 E- L) g* \
声明式流水线集成 455
. R7 p" _: y, k2 p) p; ]! LArtifactory与Jenkins输出集成 456' C6 ?3 L, j1 p5 C* U! n; R
制品归档和指纹 4574 D2 K9 e- ~; Q8 [2 K9 a8 T
总结 462
+ L* E8 G$ ?5 h+ X8 G/ h第14章 集成容器 465
. q6 X4 T5 _( r* `0 i- r配置成一个云 465
& L% O, v! D+ o2 r7 M全局配置 466
! y# g# |4 B. J- v4 \5 ~' C使用Docker镜像作为代理节点 469
! r3 v, k/ U6 W2 j u2 @在流水线中使用云镜像 4735 @( v# h& {8 d+ Y. F3 b9 u7 X
在声明式流水线中动态创建的代理节点 477$ ]* H9 Q: `4 U4 g! p( n
Docker流水线全局变量 480# R* i2 K& H- l! X1 d0 i, Q, U8 o
全局变量 480
- Y: O' ?) ^. h/ V; t) r5 |Docker应用全局变量方法 481; X2 p! s( H* @ y1 S0 r9 y) v' |
Docker镜像全局变量方法 487
, g( @0 v# N9 G9 {9 e+ q6 Z6 y) f* x- [Docker容器全局变量方法 491
& u% x& ?6 N7 ^" x& c/ @* x1 J通过shell运行Docker 492
( G- t* q4 w. r& K" k* {1 j总结 493 java8.com1 t2 i4 ]# b& O+ }' i
第15章 其他接口 495% W+ u- U1 I+ ]4 @( _5 Q0 _
使用命令行接口 4963 c0 ?- f, x! j' v$ o, c
直接使用SSH接口 4960 E5 P% v3 G$ X0 M* x; z& n/ i. g$ C
使用CLI客户端 499# W* Z/ W. [+ h& K* @- N4 ?
使用Jenkins REST API 501# Z, g6 i# F* S) f3 S! a! Q; q
过滤结果 502) ?0 o3 u( k, C* ]
启动构建 504
+ H* l* S$ [$ w$ k- o6 D% B# k使用脚本控制台 506; D1 G' S# [+ K% L" |2 ]+ c& p' g
总结 5085 y! h1 k% ?4 |& T0 _9 U# D
第16章 故障处理 509
3 u- I$ e2 m( }4 Y! {深入流水线步骤 5097 o* v/ V; U! s
处理序列化错误 5121 b& k7 ^0 O7 \) x
连续传递风格 513
6 K% r [. l) c* J6 R序列化流水线 513
$ O: v4 Y1 N) a+ M6 `NotSerializableException 5135 O, b( K- z( w. h
处理非序列化错误 514
* t8 j- t' R- ?* i& o; o识别引发错误的脚本行 517
% n; l- T3 m' B! ]8 z; [; u6 `处理流水线异常 518
" ?: v& V" O' m# m# j在声明式流水线中使用非声明式代码 518
4 j# A, B; j. R& m未授权代码(脚本和方法授权) 522
- {# ?8 Z$ P! I- |* g7 V不支持的操作 523
7 n3 s6 {. _( ^& | U3 B系统日志 523
& Y% }. O: x8 S0 ^时间戳 525
! S1 Y, ^4 e8 K) S% B9 A3 r, {流水线耐用性设置 5265 g7 \1 o% F+ Y9 U3 I" s* w7 W
总结 5278 |2 L$ A! O: K4 d; b$ e; a1 }
关于作者 529, ^' ?9 q- K5 C: f4 W
封面介绍 529
5 W" [. p7 E0 @0 [- _# S' J关于译者 530. d9 j+ ?, L x- Z2 b
, a( o& }& {6 l. ~" z9 h6 m' _6 x
8 l" w: G7 o. u& ~7 f6 D 百度云盘下载地址(完全免费-绝无套路):
, L$ G" a) y3 P: S& i# `- w1 I1 O, Q. p* l' o3 q V9 M
K, T: _9 _8 |$ ^0 I4 E7 g4 A0 ^1 c
% `. I7 z f7 J- ^9 }, G; r, S& u5 f5 Q) p; s) G. L
+ e; T: D: D# U* x, b! e
+ e1 M& h3 j3 M0 D: |5 _! n! @: r
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|