-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathjenkins.txt
1059 lines (803 loc) · 22.2 KB
/
jenkins.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1 关于软件工程生产力1
1.1 从另一个角度看“提高软件工程生产力” 1
1.1.1 从劳动力要素考虑提高软件工程生产力 2
1.1.2 从劳动对象要素考虑提高软件工程生产力 2
1.1.3 从生产工具要素考虑提高软件工程生产力 3
1.1.4 生产力三要素的意义3
1.2 Jenkins 介绍 4
1.3 Jenkins 与DevOps 4
1.4 本章小结 5
2 pipeline 入门6
2.1 pipeline 是什么 6
2.2 Jenkinsfile 又是什么 7
2.3 pipeline 语法的选择 7
2.4 创建第一个pipeline 9
2.5 从版本控制库拉取pipeline 11
2.6 使用Maven 构建Java 应用 12
2.7 本章小结 15
3 pipeline 语法讲解16
3.1 必要的Groovy 知识 16
3.2 pipeline 的组成 18
3.2.1 pipeline 最简结构 18
3.2.2 步骤 19
3.3 post 部分 20
3.4 pipeline 支持的指令 21
3.5 配置pipeline 本身 22
3.6 在声明式pipeline 中使用脚本 24
3.7 pipeline 内置基础步骤 25
3.7.1 文件目录相关步骤 25
3.7.2 制品相关步骤 27
3.7.3 命令相关步骤 28
3.7.4 其他步骤 29
3.7.5 小贴士 31
3.8 本章小结 36
4 环境变量与构建工具37
4.1 环境变量 37
4.1.1 Jenkins 内置变量 37
4.1.2 自定义pipeline 环境变量 38
4.1.3 自定义全局环境变量 39
4.2 构建工具 40
4.2.1 构建工具的选择 40
4.2.2 tools 指令介绍 41
4.2.3 JDK 环境搭建 41
4.2.4 Maven 42
4.2.5 Go 语言环境搭建 45
4.2.6 Python 环境搭建 46
4.3 利用环境变量支持更多的构建工具 47
4.4 利用tools 作用域实现多版本编译 48
4.5 本章小结 49
5 代码质量50
5.1 静态代码分析 50
5.1.1 代码规范检查 50
5.1.2 使用PMD 进行代码规范检查 51
5.1.3 各静态代码分析器之间的区别 53
5.2 单元测试 53
5.2.1 JUnit 单元测试报告 53
5.2.2 JaCoCo 实现代码覆盖率 55
5.2.3 代码覆盖率越高,软件的质量就越高吗 58
5.3 性能测试 59
5.3.1 准备性能测试环境 59
5.3.2 运行JMeter 测试 59
5.4 SonarQube:持续代码质量检查 61
5.4.1 Maven 与SonarQube 集成 62
5.4.2 Jenkins 与SonarQube 集成 64
5.4.3 使用SonarQube Scanner 实现代码扫描 67
5.4.4 SonarQube 集成p3c 68
5.4.5 将分析报告推送到GitLab 70
5.5 Allure 测试报告:更美观的测试报告 72
5.5.1 Allure 测试报告介绍 72
5.5.2 集成Allure、Maven、Jenkins 73
5.6 当我们谈质量时,谈的是什么 76
5.7 本章小结 76
6 触发pipeline 执行77
6.1 什么是触发条件 77
6.2 时间触发 77
6.2.1 定时执行:cron 77
6.2.2 轮询代码仓库:pollSCM 79
6.3 事件触发 79
6.3.1 由上游任务触发:upstream 79
6.3.2 GitLab 通知触发 80
6.3.3 在pipeline 中实现GitLab trigger 84
6.4 将构建状态信息推送到GitLab 85
6.5 使用Generic Webhook Trigger 插件实现触发 87
6.5.1 从Webhook 请求中提取参数值 89
6.5.2 触发具体某个Jenkins 项目 90
6.5.3 根据请求参数值判断是否触发Jenkins 项目执行 91
6.5.4 控制打印内容 91
6.5.5 控制响应 92
6.6 本章小结 92
7 多分支构建93
7.1 创建多分支pipeline 93
7.2 根据分支部署到不同的环境 96
7.3 when 指令的用法 97
7.4 GitLab trigger 对多分支pipeline 的支持 99
7.5 Generic Webhook Trigger 插件在多分支pipeline 场景下的应用 99
7.6 本章小结 100
8 参数化pipeline 101
8.1 什么是参数化pipeline 101
8.2 使用parameters 指令 101
8.2.1 parameters 指令支持的参数类型 102
8.2.2 多参数 104
8.3 由另一个pipeline 传参并触发 104
8.4 使用Conditional BuildStep 插件处理复杂的判断逻辑 106
8.5 使用input 步骤 107
8.5.1 input 步骤的简单用法 108
8.5.2 input 步骤的复杂用法 109
8.6 小贴士 111
8.6.1 获取上游pipeline 的信息 111
8.6.2 设置手动输入步骤超时后,pipeline 自动中止 111
8.7 本章小结 111
9 凭证管理112
9.1 为什么要管理凭证 112
9.2 凭证是什么 112
9.3 创建凭证 113
9.4 常用凭证 114
9.4.1 Secret text 114
9.4.2 Username with password 115
9.4.3 Secret file 115
9.4.4 SSH Username with private key 116
9.5 优雅地使用凭证 117
9.6 使用HashiCorp Vault 118
9.6.1 HashiCorp Vault 介绍 118
9.6.2 集成HashiCorp Vault 118
9.7 在Jenkins 日志中隐藏敏感信息 120
9.8 本章小结 122
10 制品管理123
10.1 制品是什么 123
10.2 制品管理仓库 123
10.3 过渡到制品库 124
10.4 管理Java 栈制品 125
10.4.1 使用Maven 发布制品到Nexus 中 125
10.4.2 使用Nexus 插件发布制品 127
10.5 使用Nexus 管理Docker 镜像 128
10.5.1 Nexus:创建Docker 私有仓库 129
10.5.2 创建Docker 私有仓库凭证 130
10.5.3 构建并发布Docker 镜像 130
10.5.4 小贴士 131
10.6 管理原始制品 131
10.6.1 创建raw 仓库 131
10.6.2 上传制品,获取制品 132
10.7 从其他pipeline 中拷贝制品 134
10.8 版本号管理 135
10.8.1 语义化版本 135
10.8.2 版本号的作用 136
10.8.3 方便生成版本号的Version Number 插件 137
10.9 小贴士 138
10.9.1 Nexus 匿名用户权限问题 138
10.9.2 制品库的容量要大 139
10.10 本章小结 139
11 可视化构建及视图140
11.1 Green Balls 插件 140
11.2 Build Monitor View 插件 141
11.3 使用视图 143
11.3.1 使用项目的维度建立视图 143
11.3.2 设置默认视图 145
11.4 本章小结 146
12 自动化部署147
12.1 关于部署有什么好说的 147
12.1.1 部署不等于发布 147
12.1.2 什么是自动化部署 148
12.1.3 自动化运维工具解决的问题 148
12.2 Jenkins 集成Ansible 实现自动化部署 149
12.2.1 Ansible 介绍 149
12.2.2 Jenkins 与Ansible 集成 150
12.2.3 Ansible 插件详解 153
12.3 手动部署比自动化部署更可靠吗 156
12.4 如何开始自动化部署 157
12.5 小贴士 158
12.6 本章小结 159
13 通知160
13.1 邮件通知 160
13.1.1 使用Jenkins 内置邮件通知功能 160
13.1.2 使用Email Extension 插件发送通知 162
13.2 钉钉通知 164
13.3 HTTP 请求通知 166
13.4 本章小结 168
14 分布式构建与并行构建 169
14.1 Jenkins 架构 169
14.2 增加agent 170
14.2.1 对agent 打标签 170
14.2.2 通过JNLP 协议增加agent 171
14.2.3 通过JNLP 协议增加Windows agent 175
14.2.4 通过Swarm 插件增加agent 175
14.2.5 agent 部分详解 176
14.2.6 小结 180
14.3 将构建任务交给Docker 180
14.3.1 在Jenkins agent 上安装Docker 180
14.3.2 使用Docker 180
14.3.3 配置Docker 私有仓库 181
14.4 并行构建 182
14.4.1 在不同的分支上应用并行构建 183
14.4.2 并行步骤 184
14.4.3 并行阶段与并行步骤之间的区别 185
14.5 本章小结 185
15 扩展pipeline 186
15.1 为什么要扩展pipeline 186
15.2 在pipeline 中定义函数 186
15.3 使用共享库扩展 187
15.3.1 创建共享库 187
15.3.2 使用共享库 189
15.3.3 @Library 的更多用法 189
15.3.4 共享库结构详细介绍 190
15.3.5 使用共享库实现pipeline 模板 192
15.4 通过Jenkins 插件实现pipeline 步骤 193
15.4.1 生成Jenkins 插件代码骨架 193
15.4.2 启动Jenkins 测试:mvn hpi:run 196
15.4.3 在Jenkinsfile 中使用greet 步骤 196
15.4.4 全局配置插件 197
15.5 本章小结 199
16 Jenkins 运维200
16.1 认证管理 200
16.1.1 使用Jenkins 自带的用户数据库 200
16.1.2 使用LDAP 认证 202
16.2 授权管理 204
16.2.1 使用Role-based Authorization Strategy 插件授权 205
16.2.2 管理角色 206
16.2.3 权限大全 207
16.2.4 角色分配 208
16.2.5 小结 210
16.3 Jenkins 监控 210
16.3.1 使用Monitoring 插件监控 210
16.3.2 使用Prometheus 监控 211
16.4 Jenkins 备份 213
16.4.1 JENKINS_HOME 介绍 213
16.4.2 使用Periodic Backup 插件进行备份 214
16.5 汉化 216
16.6 Jenkins 配置即代码 216
16.7 使用init.groovy 配置Jenkins 217
16.8 本章小结 219
17 自动化运维经验 220
17.1 小团队自动化运维实践经验 220
17.1.1 先做监控和告警 220
17.1.2 一开始就应该做配置版本化 223
17.1.3 Jenkins 化:将打包工作交给Jenkins 223
17.1.4 将制品交给Nexus 管理 224
17.1.5 让Jenkins 帮助我们执行Ansible 225
17.1.6 小结 225
17.2 ChatOps 实践 226
17.2.1 Rocket.Chat 226
17.2.2 Hubot 227
17.2.3 Hubot 与Jenkins 集成 229
17.2.4 Jenkins 推送消息到Rocket.Chat 231
17.3 本章小结 231
18 如何设计pipeline 232
18.1 设计pipeline 的步骤 232
18.2 以X 网站为例,设计pipeline 233
18.3 X 网站pipeline 详解 236
18.3.1 尽可能将所有的具体操作都隐藏到共享库中 236
18.3.2 只生成一次制品 236
18.3.3 对不同环境采用同一种部署方式 237
18.3.4 配置版本化 238
18.3.5 系统集成测试 238
18.3.6 如何实现指定版本部署 238
18.3.7 主干开发,分支发布 239
18.4 本章小结239
从Hudson 到Jenkins――一个简短的故事 3
应该使用Jenkins 还是Hudson 4
引进持续集成到你的公司 5
阶段1――无构建服务器 5
阶段2――夜间构建 6
阶段3――夜间构建加自动化测试 6
阶段4――加入度量指标 6
阶段5――更认真地对待测试 6
阶段6――自动化验收测试和自动化部署 7
阶段7――持续部署 7
接下来做什么呢 7
第2 章 迈入Jenkins 的第一步 9
简介 9
准备环境 9
安装Java 10
安装Git 11
创建GitHub 账号 11
配置SSH 密钥 11
创建代码库分支 12
启动Jenkins 13
配置工具 17
配置你的Maven 设置 18
配置JDK 19
通知 20
设置Git 20
你的第一个Jenkins 构建作业 21
你的第一个构建作业 26
更多的报告――显示Javadoc 33
添加代码覆盖率和其他度量 34
小结 40
第3 章 安装Jenkins 41
简介 41
下载和安装Jenkins 41
为Jenkins 准备好构建服务器 44
Jenkins 主目录 45
在Debian 或者Ubuntu 系统上安装Jenkins 47
在Red Hat、Fedora 或者CentOS 上安装Jenkins 48
在SUSE 或者OpenSUSE 上安装Jenkins 49
以单机应用形式运行Jenkins 49
基于Apache 服务器运行Jenkins 53
在应用服务器上运行Jenkins 54
内存方面的考虑 54
安装Jenkins 为一个Windows 服务 55
Jenkins 主目录里有什么 59
备份Jenkins 数据 62
升级Jenkins 安装 63
小结 64
第4 章 配置Jenkins 服务器 65
简介 65
配置面板――Manage Jenkins 界面 65
配置系统环境 68
配置全局属性 69
配置JDK 70
配置构建工具 72
Maven 73
Ant 74
Shell 脚本 75
配置版本控制工具 75
配置Subversion 75
配置CVS 75
配置邮件服务器 76
配置代理 77
小结 78
第5 章 设置构建作业 79
简介 79
Jenkins 构建作业 79
创建自由式构建作业 80
通用选项 81
高级项目选项 82
配置源代码管理 83
用Subversion 工作 84
使用Git 86
Build Triggers 96
构建作业完成后触发下一个 97
计划构建作业 97
轮询SCM 98
远程触发构建 99
手工构建作业 101
构建步骤 101
Maven 构建步骤 102
Ant 构建步骤 103
执行Shell 或Windows 批处理命令 104
在构建中使用Jenkins 环境变量 105
运行Groovy 脚本 108
用其他语言构建项目 110
构建后的操作 110
报告测试结果 110
归档构建产物 110
通知 114
构建其他的项目 114
运行新的构建作业 115
使用Maven 构建作业 115
每当SNAPSHOT(快照)依赖被建立时都要进行构建 116
配置Maven 构建 116
构建后期操作 118
部署到企业仓库管理器 118
部署到商业企业仓库管理器 122
管理模块 122
Maven 构建作业中额外的构建步骤 122
用其他语言使用Jenkins 124
用Grails 构建项目 124
用Gradle 构建项目 126
用Visual Studio MSBuild 构建项目 129
用NAnt 构建项目 130
使用Ruby 和Ruby on Rails 构建项目 130
小结 132
第6 章 自动化测试 133
简介 133
自动化单元和集成测试 134
在Jenkins 中配置测试报告 135
显示测试结果 137
忽略测试 140
代码覆盖率 142
使用Cobertura 测量代码覆盖率 143
使用Clover 测量代码覆盖率 152
自动化验收测试 154
JMeter 自动化性能测试 157
请求帮助!我的测试运行得太慢了 165
添加更多的硬件 166
运行更少的集成/ 功能测试 166
并行运行测试 167
小结 167
第7 章 Jenkins 安全 169
简介 169
激活Jenkins 安全 169
Jenkins 安全实例 170
安全域――定义Jenkins 用户 171
使用Jenkins 内置用户数据库 171
使用LDAP 仓库 174
使用微软活动目录 176
使用UNIX 用户和用户组 177
Servlet 容器授权 177
使用Atlassian Crowd 178
与其他系统集成 179
授权――谁可以做什么 181
安全矩阵 181
基于项目的安全 185
基于角色的安全 188
审计――跟踪用户行为 190
小结 193
第8 章 通知 195
简介 195
电子邮件通知 195
更高级的电子邮件通知 197
声明构建 200
RSS 订阅 202
构建分发器 202
即时消息 204
用Jabber 进行IM 通知 204
使用IRC 的IM 通知 209
IRC 通知 209
桌面通知器 212
通过Notifo 通知 213
移动通知 216
短信通知 216
制造噪声 219
极端反馈设备 221
小结 222
第9 章 代码质量 225
简介 225
构建过程中的代码质量 226
受欢迎的Java 和Groovy 代码质量分析工具 227
Checkstyle 227
PMD/CPD 230
FindBugs 235
CodeNarc 237
使用Violations 插件报告代码质量问题 238
与自由风格下的构建作业一起工作 239
使用Maven 构建作业 242
使用Checkstyle、PMD 和FindBugs 报告 244
报告代码复杂度 247
报告未完成的任务 248
集成Sonar 249
小结 253
第10 章 高级构建 255
简介 255
参数化构建作业 255
创建一个参数化构建作业 256
为构建适配参数化构建脚本 257
高级参数类型 259
使用Subversion 标签构建 260
使用Git 标签构建 261
远程启动参数化构建作业 262
参数化构建作业历史 263
参数化触发263
多重结构的构建作业 266
搭建多重结构构建 266
配置从节点轴 267
配置JDK 轴 268
自定义轴 268
执行多重结构构建 268
自动生成Maven 构建作业 271
配置作业 271
使用继承复用作业配置 273
插件支持 275
自由式作业 278
构建协作 278
在Jenkins 中并行构建 279
依赖关系图 279
连接 280
Locks and Latches 插件 281
构建管道及优化 282
通过M2Release 插件管理Maven 版本发布 283
复制构建产物 286
构建进阶 289
汇总测试结果 295
构建管道 296
小结 299
第11 章 分布式构建 301
简介 301
Jenkins 分布式构建架构 301
Jenkins 主/ 从策略 302
主节点使用SSH 启动从节点代理 303
使用Java Web Start 手工启动从代理 307
把Jenkins 从节点安装为Windows 服务 309
无主节点模式启动从节点 310
以远程服务方式启动Windows 从节点 310
把构建作业与一个或一组从节点关联 311
节点监控 313
云计算 314
使用Amazon EC2 314
使用CloudBees DEV@cloud 服务 318
小结 319
第12 章 自动化部署和持续交付 321
简介 . 321
实现自动化和持续部署 322
部署脚本 322
数据库更新 322
冒烟测试 325
回滚更改 326
部署到应用程序服务器上 326
部署一个Java 应用 327
部署像Ruby 和PHP 这样基于脚本的应用程序 336
小结 339
第13 章 Jenkins 的维护341
简介 341
监控磁盘空间 341
使用Disk Usage 插件 343
磁盘使用及Jenkins Maven 项目类型 344
监控服务器负载 345
备份配置 346
Jenkins 备份基础 346
使用备份插件 348
更为轻量的自动备份 350
构建作业归档 350
构建迁移 351
附录A 自动化你的单元和集成测试 357
Jenkins 2是什么 2
Jenkinsfile 3
声明式流水线 5
Blue Ocean界面 6
Jenkins 2的全新任务类型 7
做出转变的原因 10
DevOps理念的转变 10
装配流水线 11
可恢复性 11
可配置性 11
共享工作空间 11
专业知识 12
访问逻辑 12
流水线源管理 12
竞争 12
迎接挑战 13
兼容性 13
流水线兼容性 13
插件兼容性 15
检查兼容性 20
总结 21
第2章 基础知识 23
语法:脚本式流水线和声明式流水线 24
如何选择脚本式语法和声明式语法 25
系统(system):主节点(master)、节点(node)、代理节点(agent)和执行器(executor) 26
主节点 27
节点 27
代理节点 27
执行器 28
创建节点 29
结构:使用Jenkins DSL 31
节点 32
阶段 34
步骤 34
支持环境:开发一个流水线脚本 36
创建一个流水线项目 36
编辑器 38
使用代码片段生成器 39
运行一条流水线 43
回放 49
总结 52
第3章 流水线执行流程 53
触发任务 53
在其他项目构建后构建 54
周期性构建 54
使用GitHub钩子触发器进行GitSCM轮询 57
SCM轮询 57
静默期 58
远程触发构建 58
用户输入 58
输入 59
参数 62
多个输入参数的返回值 68
参数与声明式流水线 69
流程控制选项 74
超时(timeout) 74
重试(retry) 76
睡眠(sleep) 76
等待直到(waitUntil) 76
处理并发 78
使用lock步骤对资源加锁 78
使用milestone来控制并发构建 80
在多分支流水线中限制并发 82
并行地运行任务 82
有条件的执行功能 92
构建后处理 .94
脚本式流水线构建后处理 94
声明式流水线与构建后处理 96
总结 97
第4章 通知与报告 99
通知 99
电子邮件 100
协作服务 110
报告 120
发布HTML报告 120
总结 123
第5章 访问与安全 125
安全加固Jenkins 125
启用安全性 126
其他全局安全配置 129
Jenkins中的凭证 133
凭证范围 134
凭证域 135
凭证提供者 135
凭证存储 136
管理凭证 136
选择凭证提供者 136
选择凭证类型 137
通过提供者指定凭证类型 138
创建和管理凭证 139
上下文链接 141
添加一个新域或者凭证 141
使用新域和凭证 144
高级凭证:基于角色的访问权限 145
基本用途 146
管理角色 147
分配角色 152
角色策略宏 155
在流水线中使用凭证 157
用户名和密码 157
SSH密钥 158
令牌凭证 159
控制脚本安全性 160
脚本检查 160
脚本批准 161
Groovy沙箱 162
Jenkins凭证与Vault配合使用 164
方法 164
安装 165
创建一个策略 165
身份验证 166
在Jenkins中使用Vault 168
总结 171
第6章 扩展你的流水线 173
可信库和不可信库 173
内部库与外部库 174
内部库 174
外部库 176
从代码仓库获取库 178
Modern SCM 178
Legacy SCM 178
在流水线脚本中使用库 179
从源码版本控制中自动下载库 180
加载库到脚本中 180
Jenkins项目中的库范围 182
库结构 183
样本库例程 183
共享库代码的结构 184
使用第三方库 195
直接加载代码 196
从外部SCM加载代码 196
回放外部代码和库 198
深入研究可信与不可信代码 200
总结 203
第7章 声明式流水线 205
动机 206
不直观 206
掌握Groovy 206
其他必需的装配 206
结构 207
代码块 208
部分 208
指令 209
步骤 209
条件 210
构建代码块 210
pipeline 211
agent 212
environment 215
tools 216
options 219
triggers 222
parameters 224
libraries 227
stages 228
post 231
处理非声明式的代码 232
检查你的插件 233
创建一个共享库 233
在pipeline代码块之外放置代码 233
script语句 234
在一个阶段中使用parallel 234
脚本检查与错误报告 235
声明式流水线与Blue Ocean接口 238
总结 238
第8章 理解项目类型 241
通用项目选项 241
基础设置 241
源码管理 247
构建触发器 249
构建环境 256
构建 266
构建后操作 266
项目类型 266
自由风格类型项目 267
Maven项目类型 267
流水线项目类型 270
外部任务项目类型 272
多配置项目类型 275
Ivy项目 280
文件夹 282
多分支流水线项目 287
GitHub组织项目 292
Bitbucket团队/项目 296
总结 299
第9章 Blue Ocean用户界面 301
第一部分:管理已有的流水线 302
主界面 302
项目详情页面 305
运行页面 316
第二部分:使用Blue Ocean编辑器 325
不依赖现有Jenkinsfile创建一个全新的流水线 326
使用编辑器 330
编辑已有的流水线 340
导入和编辑已有的流水线 344
使用非GitHub仓库支持流水线 354
总结 356
第10章 转换 357
通用的准备 358
逻辑和准确性 358
项目类型 358
系统 358
访问 358
全局配置 359
插件 359
共享库 359
将自由风格类型的流水线转换为脚本式流水线 360
源码 364
编译 369
单元测试 373
集成测试 377
迁移流水线接下来的部分 380
从Jenkins流水线项目转换为Jenkinsfile 385
方法 388
最后的步骤 395
从脚本式流水线转换为声明式流水线 397
样本流水线 397
转换 399
完成转换 402
可用于转换的通用指南 403
总结 405
第11章 操作系统环境集成(shell、工作空间、环境和文件) 407
使用shell的步骤 407
sh步骤 408
bat步骤 413
powershell步骤 414
使用环境变量 415
withEnv步骤 416
使用工作空间 418
创建自定义工作空间 418
清理工作空间 420
文件和目录步骤 422
使用文件 422
使用目录 423
使用文件和目录的更多操作 424
总结 425
第12章 集成分析工具 427
SonarQube调查 427
使用个人规则 428
质量门和配置文件 432
扫描程序 434
将SonarQube与Jenkins一起使用 434
全局配置 434