-
Notifications
You must be signed in to change notification settings - Fork 0
/
2074530126.html
715 lines (497 loc) · 29.9 KB
/
2074530126.html
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
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<meta name="generator" content="Hexo 3.9.0" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>一起来玩Jenkins之Jenkins的搭建以及项目的构建 - 小奇的博客</title>
<meta name="description" content="前言在开发完成后,我们都是要将开发好的项目部署到服务器上的,而部署到服务器上的步骤常常是不变的,所以自动化部署是可以实现的,那么如何自动化部署呢?">
<meta name="keywords" content="Jenkins">
<meta property="og:type" content="article">
<meta property="og:title" content="一起来玩Jenkins之Jenkins的搭建以及项目的构建">
<meta property="og:url" content="https://blog.visutech.cn/2074530126.html">
<meta property="og:site_name" content="小奇的博客">
<meta property="og:description" content="前言在开发完成后,我们都是要将开发好的项目部署到服务器上的,而部署到服务器上的步骤常常是不变的,所以自动化部署是可以实现的,那么如何自动化部署呢?">
<meta property="og:locale" content="zh-CN">
<meta property="og:image" content="https://blog.visutech.cn/images/og_image.png">
<meta property="og:updated_time" content="2020-05-06T02:08:13.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="一起来玩Jenkins之Jenkins的搭建以及项目的构建">
<meta name="twitter:description" content="前言在开发完成后,我们都是要将开发好的项目部署到服务器上的,而部署到服务器上的步骤常常是不变的,所以自动化部署是可以实现的,那么如何自动化部署呢?">
<meta name="twitter:image" content="https://blog.visutech.cn/images/og_image.png">
<link rel="icon" href="/images/favicon.ico">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.1/css/all.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:400,600|Source+Code+Pro">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/styles/atom-one-dark.css">
<style>body>.footer,body>.navbar,body>.section{opacity:0}</style>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/lightgallery.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/justifiedGallery.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/outdatedbrowser/outdatedbrowser.min.css">
<link rel="stylesheet" href="/css/back-to-top.css">
<link rel="stylesheet" href="/css/progressbar.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/pace.min.js"></script>
<link rel="stylesheet" href="/css/style.css">
</head>
<body class="is-2-column">
<nav class="navbar navbar-main">
<div class="container">
<div class="navbar-brand is-flex-center">
<a class="navbar-item navbar-logo" href="/">
<img src="/images/visutech.png" alt="一起来玩Jenkins之Jenkins的搭建以及项目的构建" height="28">
</a>
</div>
<div class="navbar-menu">
<div class="navbar-start">
<a class="navbar-item"
href="/">主页</a>
<a class="navbar-item"
href="/archives">归档</a>
<a class="navbar-item"
href="/categories">类别</a>
<a class="navbar-item"
href="/tags">标签</a>
<a class="navbar-item"
href="/about">关于</a>
</div>
<div class="navbar-end">
<a class="navbar-item" target="_blank" title="Download on GitHub" href="https://github.com/ppoffice/hexo-theme-icarus">
<i class="fab fa-github"></i>
</a>
<a class="navbar-item is-hidden-tablet catalogue" title="目录" href="javascript:;">
<i class="fas fa-list-ul"></i>
</a>
<a class="navbar-item search" title="搜索" href="javascript:;">
<i class="fas fa-search"></i>
</a>
</div>
</div>
</div>
</nav>
<section class="section">
<div class="container">
<div class="columns">
<div class="column is-8-tablet is-8-desktop is-9-widescreen has-order-2 column-main">
<div class="card">
<div class="card-content article ">
<div class="level article-meta is-size-7 is-uppercase is-mobile is-overflow-x-auto">
<div class="level-left">
<time class="level-item has-text-grey" datetime="2019-09-29T07:18:05.000Z">2019-09-29</time>
<span class="level-item has-text-grey">
9 分钟 读完 (大约 1423 个字)
</span>
</div>
</div>
<h1 class="title is-size-3 is-size-4-mobile has-text-weight-normal">
一起来玩Jenkins之Jenkins的搭建以及项目的构建
</h1>
<div class="content">
<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>在开发完成后,我们都是要将开发好的项目部署到服务器上的,而部署到服务器上的步骤常常是不变的,所以自动化部署是可以实现的,那么如何自动化部署呢?<a id="more"></a> <code>Jenkins</code>可以解决我们这个问题。下面让我们一起来了解一下。</p>
<h3 id="什么是Jenkins"><a href="#什么是Jenkins" class="headerlink" title="什么是Jenkins"></a>什么是Jenkins</h3><p>Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。</p>
<p>Jenkins功能包括:</p>
<ol>
<li>持续的软件版本发布/测试项目。</li>
<li>监控外部调用执行的工作。</li>
</ol>
<h3 id="如何搭建简单的Jenkins环境"><a href="#如何搭建简单的Jenkins环境" class="headerlink" title="如何搭建简单的Jenkins环境"></a>如何搭建简单的Jenkins环境</h3><ol>
<li>需要准备 <a href="https://jenkins.io/download/" target="_blank" rel="noopener">Jenkins安装包</a>、<code>jdk1.8</code>、<code>tomcat</code></li>
<li>准备好以后,将Jenkins安装包放入tomcat中的webapps中启动tomcat即可</li>
<li>浏览器访问端口根据提示找到<code>密码文件</code>,并输入<code>密码文件</code>中的密码以后我们就可以进入到Jenkins的主页面了</li>
<li>如果不想汉化的,请忽略此步骤。<ul>
<li>点击左侧的<code>Manage Jenkins</code>。</li>
<li>点击<code>Manage Plugins</code></li>
<li>点击<code>第二个选项卡(可选插件)</code>,搜索<code>local</code>找到<code>Localization: Chinese (Simplified)</code>插件安装,并重启<code>Jenkins</code>,这样我们就汉化完成了</li>
</ul>
</li>
</ol>
<h3 id="如何使用Jenkins"><a href="#如何使用Jenkins" class="headerlink" title="如何使用Jenkins"></a>如何使用Jenkins</h3><p>我们搭建好简单的环境后就一起来了解一下如何使用,下面我们将通过构建<code>git</code>上存储的<code>maven</code>项目来实际操作一下。</p>
<h4 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作:"></a>准备工作:</h4><ol>
<li>在Jenkins服务器上搭建好<code>git</code>环境用来拉取<code>git</code>上的代码。准备好<code>maven</code>环境来对项目进行编译。</li>
<li>Jenkins所需插件的安装 <code>Git Parameter Plug-In</code>、<code>Git plugin</code>、<code>SSH plugin</code>、<code>Publish Over SSH</code>、<code>Maven Integration plugin</code></li>
<li>注意:安装过程中可能会出现timeout的异常,原因是因为国外的插件库不稳定造成的需要更换地址,更换方式为:<br> <code>Manage Jenkins</code>—><code>Manage Plugins</code>—><code>高级</code>—><code>最底部</code>—><code>修改升级站点</code>。可以修改为的站点有:</li>
</ol>
<figure class="highlight plain hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">http://mirror.xmission.com/jenkins/updates/update-center.json</span><br><span class="line"></span><br><span class="line">http://mirror.esuni.jp/jenkins/updates/update-center.json</span><br><span class="line"></span><br><span class="line">https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</span><br></pre></td></tr></table></figure>
<p>一个一个试试,总有一个适合你。笔者用的是第三个,清华大学的镜像</p>
<ol start="4">
<li>Jenkins所在服务器生成私钥,部署服务器上存储公钥,用于<code>Jenkins</code>的远程免密拷贝文件。具体步骤如下<ul>
<li><code>Jenkins</code>服务器使用命令<code>ssh-keygen -t rsa</code> 然后回车三下,生成私钥,这条命令会在<code>~</code>目录下生成一个.ssh的文件夹。里面文件的含义分别是:<ul>
<li>id_rsa: 生成的私钥文件</li>
<li>id_rsa.pub: 生成的公钥文件</li>
<li>know_hosts: 已知的主机公钥清单</li>
</ul>
</li>
<li>通过<code>sh-copy-id</code>将公钥写入远程服务器中具体命令为:<code>ssh-copy-id [email protected]</code></li>
</ul>
</li>
</ol>
<h4 id="Jenkins系统配置"><a href="#Jenkins系统配置" class="headerlink" title="Jenkins系统配置"></a>Jenkins系统配置</h4><p>依次点击 <code>Manage Jenkins</code>—><code>Configure System</code> 找到<code>Publish over SSH</code></p>
<ol>
<li><p>在<code>Key</code>字段中写写入<code>Jenkins</code>部署服务器中生成好的私钥<br><img src="/images/add_private_key.png" alt></p>
</li>
<li><p>新增ssh 服务器,这个可以新增多个,其中<code>Remote Directory</code>字段表示以后拷贝到远程服务器上面的根文件夹是什么。<br><img src="/images/add_ssh_server.png" alt></p>
</li>
</ol>
<h4 id="Jenkins全局配置"><a href="#Jenkins全局配置" class="headerlink" title="Jenkins全局配置"></a>Jenkins全局配置</h4><p>依次点击 <code>Manage Jenkins</code>—><code>Global Tool Configuration</code></p>
<ol>
<li><p>新增jdk<br><img src="/images/add_jdk.png" alt></p>
</li>
<li><p>新增git<br><img src="/images/add_git.png" alt></p>
</li>
<li><p>新增maven<br><img src="/images/add_maven.png" alt></p>
</li>
</ol>
<h4 id="新建任务"><a href="#新建任务" class="headerlink" title="新建任务"></a>新建任务</h4><ol>
<li><p>点击左侧的<code>新建Item</code>进入如图页面,输入名称,选择构建一个maven项目,也可以复制一个之前已经配置好的项目。进入如图<br><img src="/images/new_item_general.png" alt></p>
</li>
<li><p>选择的是<code>Discard old builds(丢弃旧的构建,也可不选)</code>,如图<br><img src="/images/new_item_general_Discard_old_builds.png" alt></p>
</li>
<li><p>选择<code>This project is parameterized</code>—>添加参数—><code>Git Parameter</code> 填入如图数据,描述随便写,名称最好见名知意,因为下面会用到<br><img src="/images/git_parameter_setting.png" alt></p>
</li>
<li><p>源码管理选择git,<code>Repository URL</code>输入你的项目的git地址(http形式的),点击添加,选择<code>Jenkins</code><br><img src="/images/yuanmaguanli_git.png" alt></p>
</li>
<li><p>添加git凭据,用户名输入git账户,密码输入git密码,id可以不写,描述随便写<br><img src="/images/add_pingju.png" alt></p>
</li>
<li><p>指定分支输入<code>$</code>加上<code>Git Parameter</code>中的名称,例如我的名称是<code>breach</code>那么这里就写<code>$breach</code><br><img src="/images/git_zhidingfenzhi.png" alt></p>
</li>
<li><p>建立环境中在目标和选择里面写入maven命令,注意不需要加mvn,发布步骤选择仅在构建成功时运行<br><img src="/images/yuxianbuzhou.png" alt></p>
</li>
<li><p>构建后操作,如图其中<code>Source files</code>表示构建完成后目标文件夹<code>Remove prefix</code>拷贝时不需要拷贝的文件夹<code>Remote directory</code>表示移动的目录,和全局配置中的组合一起,即为最终目录<code>Exec command</code>表示要执行的命令。<br><img src="/images/goujianhoucaozuo.png" alt><br>其中脚本为</p>
</li>
</ol>
<figure class="highlight plain hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">#!/bin/bash</span><br><span class="line">#定义一些常用变量</span><br><span class="line">log_time=`date +%Y-%m-%d_%H:%M:%S`</span><br><span class="line">tomcat_home=/opt/tomcat80</span><br><span class="line">web_backup_home=/root/webbak/lbrz-admin-$log_time</span><br><span class="line">war_base_home=/opt/hachi-lbrz</span><br><span class="line">#停止服务,并备份文件</span><br><span class="line">echo "********************************** 开始停止服务并备份文件`date +%Y-%m-%d_%H:%M:%S`*************************************"</span><br><span class="line">/opt/tomcat80/bin/shutdown.sh</span><br><span class="line">mkdir -p $web_backup_home</span><br><span class="line">mv $tomcat_home/webapps/ROOT* $web_backup_home</span><br><span class="line">echo "************************备份完成`date +%Y-%m-%d_%H:%M:%S` **********************************"</span><br><span class="line">echo "************************准备启动服务`date +%Y-%m-%d_%H:%M:%S` **********************************"</span><br><span class="line">mv $war_base_home/web-admin.war $tomcat_home/webapps/ROOT.war</span><br><span class="line">/opt/tomcat80/bin/startup.sh</span><br><span class="line">echo "************************服务启动完成`date +%Y-%m-%d_%H:%M:%S` **********************************"</span><br></pre></td></tr></table></figure>
<p>通过上述步骤我们就可以通过<code>Jenkins</code>进行多分支打包,并部署到服务器上了。</p>
</div>
<ul class="post-copyright">
<li><strong>本文标题:</strong><a href="https://blog.visutech.cn/2074530126.html">一起来玩Jenkins之Jenkins的搭建以及项目的构建</a></li>
<li><strong>本文作者:</strong><a href="https://blog.visutech.cn">程振奇 | smallodd</a></li>
<li><strong>本文链接:</strong><a href="https://blog.visutech.cn/2074530126.html">https://blog.visutech.cn/2074530126.html</a></li>
<li><strong>发布时间:</strong>2019-09-29</li>
<li><strong>版权声明:</strong>本博客所有文章除特别声明外,均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" rel="external nofollow" target="_blank">CC BY-NC-SA 4.0</a> 许可协议。转载请注明出处!
</li>
</ul>
<div class="level is-size-7 is-uppercase">
<div class="level-start">
<div class="level-item">
<span class="is-size-6 has-text-grey has-mr-7">#</span>
<a class="has-link-grey -link" href="/tags/Jenkins/">Jenkins</a>
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<h3 class="menu-label has-text-centered">喜欢这篇文章?打赏一下作者吧</h3>
<div class="buttons is-centered">
<a class="button is-info donate">
<span class="icon is-small">
<i class="fab fa-alipay"></i>
</span>
<span>支付宝</span>
<div class="qrcode"><img src="/images/zhifubao.jpg" alt="支付宝"></div>
</a>
<a class="button is-success donate">
<span class="icon is-small">
<i class="fab fa-weixin"></i>
</span>
<span>微信</span>
<div class="qrcode"><img src="/images/weixin.png" alt="微信"></div>
</a>
</div>
</div>
</div>
<div class="card card-transparent">
<div class="level post-navigation is-flex-wrap is-mobile">
<div class="level-start">
<a class="level level-item has-link-grey article-nav-prev" href="/1297375589.html">
<i class="level-item fas fa-chevron-left"></i>
<span class="level-item">一起来学maven之nexus私服的搭建</span>
</a>
</div>
<div class="level-end">
<a class="level level-item has-link-grey article-nav-next" href="/2628687485.html">
<span class="level-item">基于SpringBoot2.x,Quartz的定时任务的动态修改</span>
<i class="level-item fas fa-chevron-right"></i>
</a>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<h3 class="title is-5 has-text-weight-normal">评论</h3>
<div id="valine-thread" class="content"></div>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src='//unpkg.com/valine/dist/Valine.min.js'></script>
<script>
new Valine({
el: '#valine-thread' ,
notify: false,
verify: false,
app_id: '4o2bPCDQdabJ5TDJbzpt8EUh-gzGzoHsz',
app_key: 'A8M41EJDeklLXVPVXUOIJDvu',
placeholder: 'O(∩_∩)O哈哈~'
});
</script>
</div>
</div>
</div>
<div class="column is-4-tablet is-4-desktop is-3-widescreen has-order-1 column-left ">
<div class="card widget">
<div class="card-content">
<nav class="level">
<div class="level-item has-text-centered" style="flex-shrink: 1">
<div>
<figure class="image is-128x128 has-mb-6">
<img class="is-rounded" src="/images/avatar.jpeg" alt="程振奇|smallodd">
</figure>
<p class="is-size-4 is-block">
程振奇|smallodd
</p>
<p class="is-size-6 is-block">
smallodd
</p>
<p class="is-size-6 is-flex is-flex-center has-text-grey">
<i class="fas fa-map-marker-alt has-mr-7"></i>
<span>北京</span>
</p>
</div>
</div>
</nav>
<nav class="level is-mobile">
<div class="level-item has-text-centered is-marginless">
<div>
<p class="heading">
文章
</p>
<p class="title has-text-weight-normal">
27
</p>
</div>
</div>
<div class="level-item has-text-centered is-marginless">
<div>
<p class="heading">
分类
</p>
<p class="title has-text-weight-normal">
2
</p>
</div>
</div>
<div class="level-item has-text-centered is-marginless">
<div>
<p class="heading">
标签
</p>
<p class="title has-text-weight-normal">
6
</p>
</div>
</div>
</nav>
<div class="level">
<a class="level-item button is-link is-rounded" href="https://github.com/smallodd" target="_blank">
关注我</a>
</div>
<div class="level is-mobile">
<a class="level-item button is-white is-marginless" target="_blank"
title="Github" href="https://github.com/smallodd">
<i class="fab fa-github"></i>
</a>
<a class="level-item button is-white is-marginless" target="_blank"
title="Facebook" href="https://facebook.com">
<i class="fab fa-facebook"></i>
</a>
<a class="level-item button is-white is-marginless" target="_blank"
title="Twitter" href="https://twitter.com">
<i class="fab fa-twitter"></i>
</a>
<a class="level-item button is-white is-marginless" target="_blank"
title="Dribbble" href="https://dribbble.com">
<i class="fab fa-dribbble"></i>
</a>
<a class="level-item button is-white is-marginless" target="_blank"
title="RSS" href="/">
<i class="fas fa-rss"></i>
</a>
</div>
</div>
</div>
<div class="card widget column-left is-sticky" id="toc">
<div class="card-content">
<div class="menu">
<h3 class="menu-label">
目录
</h3>
<ul class="menu-list"><li>
<a class="is-flex" href="#前言">
<span class="has-mr-6">1</span>
<span>前言</span>
</a></li><li>
<a class="is-flex" href="#什么是Jenkins">
<span class="has-mr-6">2</span>
<span>什么是Jenkins</span>
</a></li><li>
<a class="is-flex" href="#如何搭建简单的Jenkins环境">
<span class="has-mr-6">3</span>
<span>如何搭建简单的Jenkins环境</span>
</a></li><li>
<a class="is-flex" href="#如何使用Jenkins">
<span class="has-mr-6">4</span>
<span>如何使用Jenkins</span>
</a><ul class="menu-list"><li>
<a class="is-flex" href="#准备工作">
<span class="has-mr-6">4.1</span>
<span>准备工作:</span>
</a></li><li>
<a class="is-flex" href="#Jenkins系统配置">
<span class="has-mr-6">4.2</span>
<span>Jenkins系统配置</span>
</a></li><li>
<a class="is-flex" href="#Jenkins全局配置">
<span class="has-mr-6">4.3</span>
<span>Jenkins全局配置</span>
</a></li><li>
<a class="is-flex" href="#新建任务">
<span class="has-mr-6">4.4</span>
<span>新建任务</span>
</a></li></ul></li></ul>
</div>
</div>
</div>
<div class="column-right-shadow is-hidden-widescreen ">
</div>
</div>
</div>
</div>
</section>
<footer class="footer">
<div class="container">
<div class="level">
<div class="level-start has-text-centered-mobile">
<a class="footer-logo is-block has-mb-6" href="/">
<img src="/images/visutech.png" alt="一起来玩Jenkins之Jenkins的搭建以及项目的构建" height="28">
</a>
<p class="is-size-7">
© 2021 程振奇 | smallodd
|<a href="https://beian.miit.gov.cn" target="_blank">冀ICP备17035647号-1</a> |
Powered by <a href="https://hexo.io/" target="_blank">Hexo</a> & <a
href="https://github.com/ppoffice/hexo-theme-icarus" target="_blank">Icarus</a>
</p>
</div>
<div class="level-end">
<div class="field has-addons is-flex-center-mobile has-mt-5-mobile is-flex-wrap is-flex-middle">
<p class="control">
<a class="button is-white is-large" target="_blank" title="Creative Commons" href="https://creativecommons.org/">
<i class="fab fa-creative-commons"></i>
</a>
</p>
<p class="control">
<a class="button is-white is-large" target="_blank" title="Attribution 4.0 International" href="https://creativecommons.org/licenses/by/4.0/">
<i class="fab fa-creative-commons-by"></i>
</a>
</p>
<p class="control">
<a class="button is-white is-large" target="_blank" title="Download on GitHub" href="https://github.com/ppoffice/hexo-theme-icarus">
<i class="fab fa-github"></i>
</a>
</p>
</div>
</div>
</div>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome/css/font-awesome.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/min/moment-with-locales.min.js"></script>
<script>moment.locale("zh-CN");</script>
<script>
var IcarusThemeSettings = {
article: {
highlight: {
clipboard: true,
fold: 'unfolded'
}
}
};
</script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/clipboard.min.js" defer></script>
<script src="/js/animation.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/lightgallery.min.js" defer></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/jquery.justifiedGallery.min.js" defer></script>
<script src="/js/gallery.js" defer></script>
<div id="outdated">
<h6>Your browser is out-of-date!</h6>
<p>Update your browser to view this website correctly. <a id="btnUpdateBrowser" href="http://outdatedbrowser.com/">Update
my browser now </a></p>
<p class="last"><a href="#" id="btnCloseUpdateBrowser" title="Close">×</a></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/outdatedbrowser/outdatedbrowser.min.js" defer></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
outdatedBrowser({
bgColor: '#f25648',
color: '#ffffff',
lowerThan: 'flex'
});
});
</script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/unpacked/MathJax.js?config=TeX-MML-AM_CHTML" defer></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
MathJax.Hub.Config({
'HTML-CSS': {
matchFontHeight: false
},
SVG: {
matchFontHeight: false
},
CommonHTML: {
matchFontHeight: false
},
tex2jax: {
inlineMath: [
['$','$'],
['\\(','\\)']
]
}
});
});
</script>
<a id="back-to-top" title="回到顶端" href="javascript:;">
<i class="fas fa-chevron-up"></i>
</a>
<script src="/js/back-to-top.js" defer></script>
<script src="/js/main.js" defer></script>
<div class="searchbox ins-search">
<div class="searchbox-container ins-search-container">
<div class="searchbox-input-wrapper">
<input type="text" class="searchbox-input ins-search-input" placeholder="想要查找什么..." />
<span class="searchbox-close ins-close ins-selectable"><i class="fa fa-times-circle"></i></span>
</div>
<div class="searchbox-result-wrapper ins-section-wrapper">
<div class="ins-section-container"></div>
</div>
</div>
</div>
<script>
(function (window) {
var INSIGHT_CONFIG = {
TRANSLATION: {
POSTS: '文章',
PAGES: '页面',
CATEGORIES: '分类',
TAGS: '标签',
UNTITLED: '(无标题)',
},
CONTENT_URL: '/content.json',
};
window.INSIGHT_CONFIG = INSIGHT_CONFIG;
})(window);
</script>
<script src="/js/insight.js" defer></script>
<link rel="stylesheet" href="/css/search.css">
<link rel="stylesheet" href="/css/insight.css">
<script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"pluginRootPath":"live2dw/","pluginJsPath":"lib/","pluginModelPath":"assets/","tagMode":false,"log":false,"model":{"jsonPath":"/live2dw/assets/z16.model.json"},"display":{"position":"right","width":200,"height":400},"mobile":{"show":true}});</script></body>
</html>