-
Notifications
You must be signed in to change notification settings - Fork 0
/
jenkins-kit.txt
771 lines (599 loc) · 23.1 KB
/
jenkins-kit.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
在Jenkins上,打开Manage Jenkins,打开Jenkins-CLI。
下载jenkins-cli.jar,按照Jenkins-CLI页面的指引来操作:
# 导出一个job
java -jar jenkins-cli.jar -s http:https://192.168.37.131:8080/ get-job myjob > myjob.xml
# 导入一个jobs
java -jar jenkins-cli.jar -s http:https://192.168.37.131:8080/ get-job myjob < myjob.xml
两步解决问题
1. 系统管理 -> 插件管理 -> 安装插件gitlab hook
这里写图片描述
2. 系统管理 -> 系统设置 -> 去掉 Enable authentication for ‘/project’ end-point
拷贝到远程,全局设置
Publish over SSH
SSH Servers
SSH Server Name: tpodps
Hostname: 10.19.2.21
Username: tpodps
Remote Directory:/alidata/workspace/aml/upgrade
aml-mini
源码管理
Git
Repositories
Repository URL: https://github.com/jerryzu/aml-mini.git/
Branches to build: 指定分支*/nopart
构建
Send files or execute commands over SSH
SSH Publishers
SSH Server
Name: tpodps
Transfers
Transfer Set
Source files: sql/*.sql,bin/*
Exec command: tar -czvf /alidata/workspace/aml/upgrade/sp.tar.gz /alidata/workspace/aml/upgrade/* ##有问题,会包函路径
原因是就是升级站点的链接https://updates.jenkins.io/update-center.json默认是https的,如何解决呢?
解决方案1:
安装插件那个页面,就是提示你offline的那个页面,不要动。然后打开一个新的tab,输入网址http:https://192.168.211.103:8080/jenkins/pluginManager/advanced。 这里面最底下有个【升级站点】,把其中的链接由https改成http的就好了,http:https://updates.jenkins.io/update-center.json。 然后在服务列表中关闭jenkins,再tomcat重新启动,这样就能正常联网了
apache-tomcat-8.5.9\conf\context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="JENKINS_HOME" value="D:/jenkins/" type="java.lang.String"/>
</Context>
Windows下以war包形式放在tomcat上运行Jenkins后
二、解决
(1)全局设置新增参数
http:https://localhost:8080/jenkins/configure
进入全局设置找到全局属性新增键值对 LANG < - > zh_CN.UTF-8 ,保存
(2)修改tomcat安装目录下的server.xml配置文件
修改 URIEncoding=“utf-8” 为 useBodyEncodingForURI="true"
(3)配置计算机环境变量
JAVA_TOOL_OPTIONS
-Dfile.encoding=UTF8
在tomcat的catalina.sh里配置环境变量
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"
Publish overSSH的方式: windows服务器
http:https://www.freesshd.com/freeSSHd.exe
1.系统管理,系统设置里面配置Publish over SSH
Jenkins SSH Key
Passphrase: <这里是自己填充的>
SSH Servers
SSH Server
Name: <alias>
Hostname: <IP>
Username:
Remote Directory: \ --远程访问的目录,表示根目录,对应windows服务器的c:\<username>
Use password authentication, or use a different key
Passphrase/Password: <user password>
2.在项目中的构建后操作,增加构建后操作步骤,选择send built artifact over SSH选项
SSH Publishers
SSH Server
Name: <alias>
Transfers
Transfer Set:
Source files: test\jenkinstest.war -- jenkins工作空间中,用来发送的war包
Remove prefix: test\ --移除前缀
Remote directory: test\ -- 发送到远程的目录,是基于远程c:\users\<user>目录的
Exec command: cmd/c call c:\users\<user>\test\deploy.bat -- 执行远程该目录下的一个批处理命令
注意事项,a.在Exec conmmand中 一定要写上 cmd /c 不然命令无法执行b.执行远程的bat批处理命令
在windows服务器端 我的deploy.bat的内容是
f:
cd f:\java_projec\tomcat\apache-tomcat-18086-jenkins-api
call deploy.bat
:end
我的tomcat在f盘下,在里面还放了一个deploy.bat的批处理文件,内容是
cd bin
call shutdown.bat
cd ..
copy c:\users\<user>\test\jenkinstest.war webapps\
cd bin
call startup.bat
:end
jenkins 连接windows 传输文件夹下面所有得文件与文件夹
------------
SSH Publishers
SSH Server
Name: <alias>
Transfers
Transfer Set:
Source files: build/classes/**
Remove prefix: build/classes/
Remote directory: jenjensjar
Exec command:
rm -rf c:/jenkins/bb/*
mv c:/program\file\openssh/jenkensjar/* c:/jenkins/bb
在要传输得文件夹后面写两个 **
如果只写一个* ,传输得只有build/classes下得文件,文件夹不会传输
如果要复制到另外一个目录,则要先清空该目录,
rm -rf jenkins/bb/*
否则会报
mv: cannot move ‘C:/Program Files/OpenSSH/jenkensjar/java’ to ‘C:/jenkins/bb/java’: Directory not empty
Publish overSSH的方式: linux服务器
jenkins服务器上生成密钥对,使用ssh-keygen -t rsa命令
在~/.ssh/下会有私钥id_rsa和公钥id_rsa.pub
应用服务器上创建~/.ssh文件夹和~/.ssh/authorized_keys文件,并将jenkins服务器的公钥id_rsa.pub中的内容复制到authorized_keys文件
应用服务器上重启ssh服务,service sshd restart
现在jenkins服务器可免密码直接登陆应用服务器
1.系统管理,系统设置里面配置Publish over SSH
Jenkins SSH Key
Passphrase: <这里是自己填充的>
Path to key: /root/.ssh/id_rsa
SSH Servers
SSH Server
Name: <alias>
Hostname: <IP>
Username:
Remote Directory: /app
2.在项目中的构建后操作,增加构建后操作步骤,选择send built artifact over SSH选项
SSH Publishers
SSH Server
Name: <alias>
Transfers
Transfer Set:
Source files: target/jenkinstest.war -- jenkins工作空间中,用来发送的war包
Remove prefix: target/ --移除前缀
Remote directory: test\ -- 发送到远程的目录,是基于远程c:\users\<user>目录的
Exec command: ~/deploy.sh
------------------
#!/bin/bash
FOLDER="/root/server/bak/"
FILE="/root/server/qbmmj.jar"
FOLDERTEST="/root/server/bak/qbmmj/"
#time
PREFIX="time="
TIME=`date +%F`
TIMES=`date +%T`
KONGGE="--"
VER="1.5"
#关掉上次启动的项目
ID=`netstat -nlp | grep -w 8094 | sed -r 's#.* (.*)/.*#\1#'`
#echo "port is :$ID"
kill -9 $ID
#备份
if [ ! -d "$FOLDER" ]
then
mkdir /root/server/bak
fi
if [ ! -d "$FOLDERTEST" ]
then
mkdir /root/server/bak/qbmmj
fi
if [ -f "$FILE" ]
then
cp /root/server/qbmmj.jar /root/server/bak/qbmmj/qbmmj$VER$PREFIX$TIME$KONGGE$TIMES.jar
rm -f /root/server/qbmmj.jar
fi
mv /root/server/qbmmj-v1.0.jar /root/server/qbmmj.jar
#nohup /usr/java/jdk1.8.0_131/bin/java -jar /root/qbmmj/test-0.0.1-SNAPSHOT.jar &
#启动
/usr/local/jdk/bin/java -jar /root/server/qbmmj.jar
#echo "start success!"
exit 0
===========================
#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=/opt/javaserver/javaproject/register-center.jar
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_NAME >> register-center.out 2>&1 &
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running";
start
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
先要用shell脚本把jar复制到对应的服务器上
#!/bin/bash
scp -r /home/git/.jenkins/workspace/x-x/x-x/target/x-x.jar [email protected]:/lxm/deploy/
echo "复制完成"
ssh [email protected] "sh ./script/subscibe.sh"
exit
#vim subscibe.sh
#!/bin/bash
#jdk环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_181
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
date=`date +%Y%m%d%H%M%S`
APP_NAME=subscibe-wechat.jar
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
cd /lxm/wapps
mv ${APP_NAME} backup/${APP_NAME%%.*}${date}.jar
echo "备份成功"
cd /lxm/deploy
cp -r ${APP_NAME} /lxm/wapps
rm -rf ${APP_NAME}
cd /lxm/wapps
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar /lxm/wapps/$APP_NAME --spring.profiles.active=prod >/lxm/wapps/subscibe.log 2>&1 &
echo "程序已启动..."
fi
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. pid is ${pid} "
else
echo "${APP_NAME} is not running."
fi
exit
http:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http:https://localhost:8080/jenkins/restart
"Warnings have been published for the following currently installed components"
那就说明这三个插件需要更新,所以在主页面的时候点击“系统管理”→“插件管理”,更新出现以上错误的组件即可。
=============================release step=================================================================
#!/bin/bash
cd /alidata/workspace/tpedw/
svn --username "zuxh" --password "zuxh" cat svn:https://10.19.0.22/edw/08src/alidata/edwproject/taskfile/sql/cdm_fin_prm_dd.sql > cdm_fin_prm_dd.sql
=========================================test step=======================================================
@echo on
chcp 65001
cd D:\work\svn\edw
for /f "tokens=*" %%a in (..\task.txt) do (
echo %%a
copy /y 07pm\30-发布\2019-12-17_tpedw\%%a 08src\alidata\edwproject\taskfile\sql\
type 08src\alidata\edwproject\taskfile\sql\%%a
)
==================================================sync step==============================================
d:
cd d:\work\svn\edw
svn --username "zuxh" --password "zuxh" update
===========================
chmod +x /alidata/workspace/tpedw/1.sh
/alidata/workspace/tpedw/1.sh
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# pass parameter use gen apk
pathApk=$1 # 接受外部参数
# 取出来最新打的包,进行复制到指定路径
cd $BASEAPK # 进入output\debug 路径下
ApkName=$(jq -r .[0].path /root/.jenkins2/jobs/npl/workspace/app/build/outputs/apk/debug/output.json) # 使用 jq 工具解析android studio 生成的json获取apk名称
echo $ApkName #打印
cp $pathApk/$ApkName $pathApk/npl.apk #进行apk 拷贝,linux 命令
mv -f $pathApk/npl.apk /usr/tomcat/apache-tomcat-8.0.36/webapps/apk/ # 移动到tomcat 路径下
java -jar /usr/local/android/qrtools/QRcode.jar url=http:https://10.7.0.201:8080/apk/npl.apk image=latestapk.jpg save=/usr/tomcat/apache-tomcat-8.0.36/webapps/examples/image # 使用二维码生成jar 生成二维码
output.json: 格式
[{
"outputType": {
"type": "APK"
},
"apkInfo": {
"type": "MAIN",
"splits": [],
"versionCode": 17
},
"path": "npl-2.0.9-062716-debug.apk",
"properties": {
"packageId": "com.nuoyuan.npl",
"split": "",
"minSdkVersion": "14"
}
}]
install jq
sudo apt-get install jq
===============================================================================================
Post Steps
Run only if build succeeds
Execute shell script on remote host using ssh
SSH site: root@<ip>:22
Command:
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_144
/usr/local/dubbo-server/account-server.sh stop
rm -rf /usr/local/dubbo-server/account/*
Execute shell
scp -r ${WORKSPACE}/target/lib root@<ip>:/usr/local/dubbo-server/account
scp ${WORKSPACE}/target/medcare-dubbo-account.jar root@<ip>:/usr/local/dubbo-server/account
Execute shell script on remote host using ssh:
SSH site: root@<ip>:22
Command:
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_144
/usr/local/dubbo-server/account-server.sh start
account-server.sh脚本
#!/bin/sh
## java env
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre
## service name
APP_NAME=account
SERVICE_DIR=/usr/local/dubbo-server/$APP_NAME
SERVICE_NAME=medcare-dubbo-$APP_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
cd $SERVICE_DIR
case "$1" in
start)
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;
stop)
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"
sleep 5
##
## edu-service-aa.jar
## edu-service-aa-bb.jar
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
else
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID
fi
;;
restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;
*)
## restart
$0 stop
sleep 2
$0 start
;;
esac
exit 0
========================================================
Jenkins+SVN+Maven实现自动打包Jar/War并发布
发布Jar
在构建部分,点击增减构建步骤并选择执行shell,shell如下
echo "备份原有jar包"
cd /usr/local/i2work/target
mv i2work-reward.jar i2work-reward.jar_bak$(date +%Y%m%d%H%M)
echo "复制Jar到目标文件夹"
cd ${WORKSPACE}/target/
cp i2work-reward.jar /usr/local/i2work/target
sh /opt/scripts/i2work-stat.sh reward
发布War(本地Tomcat)
在构建部分,点击增减构建步骤并选择执行shell,shell如下:
echo "进入工作空间"
cd /root/.jenkins/workspace/i2work-operation/target/
echo "修改war包名称"
mv i2work-operation-1.0-SNAPSHOT.war operation.war
echo "进入tomcat目录并备份原文件"
cd /usr/local/i2work/apache-tomcat-8.5.4-operation/webapps
mv operation.war operation_bak$(date +%Y%m%d%H%M).tar.gz
echo "进入工作空间并复制war到tomcat中"
cd /root/.jenkins/workspace/i2work-operation/target
cp operation.war /usr/local/i2work/apache-tomcat-8.5.4-operation/webapps
echo "重启tomcat"
sh -x /opt/scripts/operation_restart.sh
================================================================
附上shell脚本(Post Steps–SSH Publishers–Transfers–Exec command):
echo "hello xx-0.0.1.SNAPSHOT.jar"
DAY=`date +%Y-%m-%d`
pid=`ps -ef|xx|grep -v grep|awk '{print $2}'`
if [ -n "$pid" ]
then
echo 'The pid: server' $pid ' will be killed....'
kill -9 $pid
echo 'The pid: server' $pid ' will be start'
nohup java -jar /data/jekins/xx/xx-0.0.1.SNAPSHOT.jar > /dev/null &
else
echo 'The pid: server' $pid ' not exist , will be start'
nohup java -jar /data/jekins/xx/xx-0.0.1.SNAPSHOT.jar > /dev/null &
fi
echo 'The pid: server' $pid ' started'
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agent linux-21
节点连接Jenkins的方式如下:
1.启动节点 在浏览器中启动节点
在命令行中启动节点
java -jar agent.jar -jnlpUrl http:https://localhost:8080/jenkins/computer/linux-21/slave-agent.jnlp -secret ed271e6f14eb9220ad9a0ae9dd837c50d4562fdcff38ad9d387223d6ef78a83d -workDir "/"
Run from agent command line, with the secret stored in a file:
echo ed271e6f14eb9220ad9a0ae9dd837c50d4562fdcff38ad9d387223d6ef78a83d > secret-file
java -jar agent.jar -jnlpUrl http:https://localhost:8080/jenkins/computer/linux-21/slave-agent.jnlp -secret @secret-file -workDir "/"
关联到linux-21的项目
无
2.输入节点的名称,并且选中permanent agent,点击ok
3.节点创建成功后会自动跳转到配置页面
名字:节点的名字
描述:说明这个节点的用途等
of executors:并发构建数量
远程工作目录:用于存放jenkins的工作空间的
标签:分配job会以标签的名称去分配
用法:节点的使用策略
启动方法:windows的话就不要给自己添堵了,选择 Java web start
4.这时节点也配置好了,但是slave节点还是没有连接的状态,这时我们使用slave机器进入Jenkins的管理节点页面
点击该节点,进入节点页面,可能出现这样的状态
点击Go to security configuration screen and change it,然后将 TCP port for JNLP agents选择随机选取
然后进入控制面板,将防火墙关闭(不做描述,自行处理)
回到slave页面,这时页面出现launch 按钮
点击launch ,这时会让我们下载一个文件,下载到我们的slave节点的远程工作目录就可以了
点击图中的launch按钮,他会提示你下载该文件slave-agent.jnlp.按照提示下载该文件,并保存在本地。我们这里需要确认两个问题是否存在:
问题一,确认slave-agent.jnlp 是用javaws来运行的,而不是java.exe 或者是javaw.exe来运行,因为一般的机器默认是采用java.exe启动的。我曾经因为这个问题折腾了好久。
问题二,将slave-agent.jnlp用notepad打开后,确认其中的URL是可用的Jenkins地址。其中的配置可能是这样的:
<jnlp spec="1.0+" codebase="http:https://16.158.69.53:9999/jenkins/computer/irshost12.tc.tb.com/">
<information>
<title>Slave Agent for irshost12.tc.tb.com</title>
<vendor>Jenkins project</vendor>
<homepage href="https://jenkins-ci.org/"/>
</information>
<security><all-permissions/></security>
<resources><j2se version="1.5+"/><jar href="http:https://16.158.69.53:9999/jenkins/jnlpJars/remoting.jar"/><property name="hudson.showWindowsServiceInstallLink" value="true"/>
</resources><application-desc main-class="hudson.remoting.jnlp.Main">
<argument>60c101541d377ad629da21b37c24cd6227edef74b97ff663c5b09e261ac2d5d6</argument><argument>irshost12.tc.tb.com</argument><argument>-url</argument>
<argument>http:https://16.158.69.53:9999/jenkins/</argument>
</application-desc>
</jnlp>
确认其中的url地址是上面的正确的地址,而不是localhost,因为我的jenkins部署在本地测试。
安装slave-agent.jnlp之前必须要在节点服务器安装JDK环境,至于如何安装JDK这里就不在说明了,网上教程很多,下面安装slave-agent.jnlp,双击slave-agent.jnlp文件,出现下图界面:
然后双击slave-agent,出现connected说明连接成功
上面的窗口关闭或者电脑重启后,这个节点也就关闭了,所以最好把这个节点加入window服务。
点击窗口的file菜单,点击Install as a service,完成
成功示例:(红框所示)
现在回到jenkins的管理节点页面,刷新一下界面,发现slave节点的红色 的那个X已经没有了,说明连接成功
5.关联job,进入job的配置页面,勾选Restrict where this project can be run,并且在Label Expression输入奴隶节点的标签名(一个标签有可能对应多台slave节点),也可以输入slave节点的名称
7.进行构建,查看控制台信息,可以看到运行的确实是windows的机器
linux与mac的配置大同小异,只需稍加改动就可以了,这样配置好之后就可以实现分布式构建,在做自动化测试的时候我们只需要将测试服务器配置为slave节点,配置好相应的job来监控开发job或者开发的代码是否有变动或者构建的动作,根据自己的情况执行测试项目的构建动作,从而实现持续集成
在安装过程中,可能会出现以下报错,导致安装失败:
在一些文档中,说是主机不信任客户机,但是没有说明该如何去解决(主机和客户机两边的防火墙都已经关闭了)
最终我用以下的方法成功运行了它:将"slave-agent.jnlp“文件用notepad打开,将文本中的“localhost”用主机的IP地址去代替,保存文件后用Java打开(Launch)即可;
wget -O /etc/yum.repos.d/jenkins.repo http:https://pkg.jenkins-ci.org/redhat/jenkins.repo
wget http:https://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
vim /usr/local/maven/conf/settings.xml
<mirrors>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http:https://maven.aliyun.com/nexus/content/groups/public</url>
</mirrors>
=======================================================================================
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/conf</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/conf</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
/*********************sample git maven jar ****************************************/
<?xml version='1.1' encoding='UTF-8'?>
<maven2-moduleset plugin="[email protected]">
<goals>clean package</goals>
<postbuilders>
<jenkins.plugins.publish__over__ssh.BapSshBuilderPlugin plugin="[email protected]">
<delegate>
<delegate plugin="[email protected]">
<publishers>
<jenkins.plugins.publish__over__ssh.BapSshPublisher plugin="[email protected]">
<configName>actuary</configName>
<transfers>
<jenkins.plugins.publish__over__ssh.BapSshTransfer>
<remoteDirectory></remoteDirectory>
<sourceFiles>target/aml-1.0-SNAPSHOT.jar,target/lib/*.jar,target/conf/*.*</sourceFiles>
<removePrefix>target/</removePrefix>
/*********************node(linux) shell ****************************************/
<?xml version='1.1' encoding='UTF-8'?>
<project>
<builders>
<hudson.tasks.Shell>
<command>cd /alidata/workspace/ && tar -czvf aml-1.0-SNAPSHOT.tar.gz * </command>
==========================================================================================================
deliver.sh
#!/bin/bash
# author:hukey
function start(){
ansible $1 -a "/app/node1/service.sh start"
}
function update(){
if [ ! -f /var/lib/jenkins/workspace/dev_test/dev_test/*.jar ];then
echo '[error]:java.jar not exist, update failed.'
exit 1
fi
jar=$(ls /var/lib/jenkins/workspace/dev_test/dev_test/*.jar)
ansible $1 -a "{{app_dir1}}/service.sh update"
ansible $1 -m copy -a "src=$jar dest={{$2}}"
}
function netport(){
ansible $1 -a "netstat -ntplu"
}
update dev_test_node1 app_dir1
sleep 3
start dev_test_node1
while sleep 5; do
start_code=$(netport dev_test_node1 | egrep java | wc -l)
if [ $start_code -ge 1 ]; then
update dev_test_node2 app_dir1
sleep 3
start dev_test_node2
break
fi
done
http:https://localhost:8080/jenkins/user/jerry/configure
java -jar jenkins-cli.jar -s http:https://localhost:8080/jenkins/ -auth jerry:1175cc661da55c485b7371eb863a41ca36 list-jobs
java -jar jenkins-cli.jar -s http:https://localhost:8080/jenkins/ -auth jerry:1175cc661da55c485b7371eb863a41ca36 get-job 5.aml > 5.aml.xml