之前:
1、Jenkins拉取Gitlab源码。通过git@ip方式成功,通过http://ip方式,没有成功
通过git@ip方式成功
2、触发远程构建。这个不是重点,没啥太大用
3、构建。我理解就是把源码从GitLab上拉到本地工作区,再通过执行命令编译成Jar包。关键看Goals and options的内容
重点:需要安装Maven插件,如图:
否则,创建工程时,在Pre Steps之后,没有Build选项。Goals and options:clean pmd:pmd checkstyle:checkstyle findbugs:findbugs package -DskipTests。这是原来李老师写的,新建项目这么写,运行没有问题
坑:当编译到第2个Moudle,即tds-common时,提示个:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project tds-common: Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags -> [Help 1] 截图如下:
百度,竞然说是lombok版本低,与高版本的JDK不兼容。一查JDK,果然是版本较高:jdk-11.0.1。于是下载JDK1.8,装之。再在Jenkins上设置全局工具设置中,JDK那里,于增加一个JDK版本,再在项目中指定JDK(以前没注意,如果只有一个,好像没有JDK选项),果然过去了。感谢:快乐崇拜234 https://blog.csdn.net/liubenlong007/article/details/86139598
(一度怀疑是阿里的Maven的远程镜像问题——之前把镜像改成阿里了vim /opt/maven3.6.0/conf/settings.xml)
4、代码质量检查。即用SonarQube。这里在公司环境没有成功,原因是项目需要下载支持包,而公司网不允许上外网。改为直接在个人的IDEA环境中集成Sonar
重点:
5、直接构建并测试运行状况。
Build选项卡,Goals and options:(Maven命令参数使用,感谢:https://www.cnblogs.com/hiver/p/7850954)
6、将编译后的代码布署到远程主机。这是本节要学的东东
这里差点没折腾死我,终于摸索出源文件是啥,前缀是啥了:
Source files:有特定格式,点下右侧门的?号就差不多知道了。
Remove prefix:表示考到目标服务器的位置后,文件名中要去掉的内容。我之前这里是空,结果发布后,Source files中设置的所有目录层级,全部考到目标服务器的目标目录里了
Remote directory:一定要注意,这个目录,是在系统设置中的远程目录的基础上的!即,系统设置>Publish over SSH>SSH Servers>Remote Directory的内容,如图:
Exec command:这里好理解,可以写命令,也可以Shell脚本,要是脚本的话,需要指定目录(我是这样写的)
完整设置截图:
折腾一小天,这个终于算是成功了!
小结:这种方式不灵活,只能执行发布到远端,再执行些指令,不能提前删除旧文件
MD,我增加上SSH sites,就出这个错误,也许是和方式一,在系统设置中有冲突了,只能用一种吗?发现不是的,可以忽略这个提示,在下面的命令行中尽定写就好了,能保存的。
第一个:Exceute shell script on remote host using ssh
SSH Site :[email protected]
Command:
echo "Stop service and rm files.....begin"
/usr/local/tds-msv/tds-server.sh stop ${qmModule}
rm -rf /usr/local/tds-msv/${qmModule}.jar
echo "Stop service and rm files......end"
这里:我的tds-server.sh脚本,在服务器上直接运行,有提示,但可以成功,但是在Jenkins上Build中,就会出现 exit staus -1,经倪工指点:需将tds-server.sh本身的进程号也排除,问题解决!感谢倪工!
再增加一个:Exceute shell
echo "scp files......begin"
scp ${WORKSPACE}/target/${qmModule}.jar [email protected]:/usr/local/tds-msv/${qmModule}.jar
echo "scp files......end"
第二个:Exceute shell script on remote host using ssh
SSH Site :[email protected]
Command:
echo "Start service and rm files.....begin"
/usr/local/tds-msv/tds-server.sh start ${qmModule}
echo "Start service and rm files.....end"
tds-server.sh,内容如下(感谢:https://blog.csdn.net/l1028386804/article/details/78669778?utm_source=blogxgwz2)
#!/bin/sh
## java env
#export JAVA_HOME=/usr/local/jdk/jdk1.8.0_144
#102.85的JDK
##下面直接用java命令,而不指定Java位置 ZHCH 2020-03-12
#export JAVA_HOME=/usr
#export JRE_HOME=$JAVA_HOME/jre
## service name
APP_NAME=$2
#SERVICE_DIR=/usr/local/tds-msv/$APP_NAME
SERVICE_DIR=/usr/local/tdsapp/tdsmsv/$APP_NAME
SERVICE_NAME=$APP_NAME
SERVICE_LOG=$APP_NAME\.log
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
cd $SERVICE_DIR
case "$1" in
start)
## 起动参数
if [ ! -n "$3" ]; then
echo "未指定起动参数,默认为test"
APP_ACTION="test"
else
APP_ACTION=$3
fi
# nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >>$SERVICE_LOG 2>&1 &
nohup java -Xms256m -Xmx1024m -jar $JAR_NAME --spring.profiles.active=$APP_ACTION >>$SERVICE_LOG 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;
stop)
# echo "$SERVICE_DIR/$PID"
if [ -f "$SERVICE_DIR/$PID" ]; then
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"
else
echo "$SERVICE_NAME is not running"
fi
sleep 5
##
P_ID=`ps -ef | grep -w $SERVICE_NAME |grep -v 'tds-server'|grep -v "grep" | awk '{print $2}'`
echo "$P_ID"
if [ "$P_ID" == "" ] || [ "$P_ID" = "0" ]; 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