传统的开发是开发,打包测试,开发,打包测试,且每次都是全量打包。这给运维,测试带来大量没必要的工作量,同时每次全量打包导致系统每次测试不全面,bug不断,测试,开发,运维叫苦连天。因此持续集成开发势在必行。

参考:
http://www.jianshu.com/p/a7d7df97fe4b

1. 安装并运行jenkins-war

启动异常1:

1
2
3
4
5
6
7
8
9
10
java.lang.NullPointerException
at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:367)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:312)
at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)

以上异常是爆的字体问题异常。

解决方法:
执行命令安装yum install fontconfig

图一:

2. 初次访问配置

  • 按图一红色提示,在服务器对应目录下找到安全密码,拷贝进去登录。
  • 按照页面想到,安装插件,如果不确定要安装什么插件,那就选择推荐的插件按钮即可。
  • 创建管理员账号,按照页面设置即可。

这样,下面就可以开始使用jenkins了。

3. maven,svn,springboot下持续构建java应用

3.1 配置jenkins

点击系统管理

配置各种环境:

  • maven setting.xml
  • jdk,取消自动安装
  • maven,取消自动安装

3.2 安装maven插件


点击直接安装即可。

3.3 创建新项目

选定。

点击ok。

3.4 配置项目各种信息


3.5 开始构建项目

查看构建结果

然后再服务器相关目录下就能看到构建后的jar包:

3.6 构建后配置

构建成功后,我们需要发布项目到远程服务器,或者执行等一系列动作。

3.6.1 直接执行jar

修改项目配置:

添加成功构建后要执行的脚本:

注意脚本写法,如果是后台执行:
BUILD_ID=dontKillMe nohup /usr/local/SBA/startup.sh &

3.6.2 发布jar到远程服务器,并执行

  • 下载相关插件:
  • 在系统设置中添加远程服务器:

  • 在项目中设置,选定远程服务器:

注意:

  • 备份,执行远程服务器上的jar包
  1. 在远程服务器上设置脚本,放在目录:server/bin

停止应用脚本stop.sh

# 将应用停止
#stop.sh
#!/bin/bash
echo "Stopping SpringBoot Application"
pid=`ps -ef | grep jenkins-demo*.jar | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
   kill -9 $pid
fi

备份应用脚本replace.sh:

#replace.sh 用于将上次构建的结果备份,然后将新的构建结果移动到合适的位置
#!/bin/bash
# 先判断文件是否存在,如果存在,则备份
file="/server/java/apps/jenkins-demo.jar"
if [ -f "$file" ]
then
   mv /server/java/apps/jenkins-demo.jar /server/java/apps/backup/jenkins-demo.jar.`date +%Y%m%d%H%M%S`
fi
mv /server/java/apps/jenkins-demo*.jar /server/java/apps/jenkins-demo.jar

启动应用包脚本start.sh:

# startup.sh 启动项目
#!/bin/bash
echo "授予当前用户权限"
chmod 777 /server/java/apps/jenkins-demo.jar
echo "执行....."
java -jar /server/java/apps/jenkins-demo.jar

注意:启动脚本如果是放在和jenkins同一个服务器上,后台执行nohub java -jar /server/java/apps/jenkins-demo.jar &不起作用,所在要在jenkins上这样配置BUILD_ID=dontKillMe nohup /usr/local/SBA/startup.sh &
如果是远程服务器,就可以改成:

# startup.sh 启动项目
#!/bin/bash
echo "授予当前用户权限"
chmod 777 /server/java/apps/jenkins-demo.jar
echo "执行....."
nohup java -jar /server/java/apps/jenkins-demo.jar > jenkins-demo.out 2>& 1 &

  1. 设置远程服务器执行脚本:

如果是jenkins所在服务器执行后台jar,要注意,远程服务器其实可以去掉,在脚本改成后台执行就可以。

备注:

1.替换jar包中的文件

jar -uvf rpds.jar BOOT-INF/classes/db.properties

2.启动jar应用程序shell脚本

#!/bin/sh
# chkconfig: 2345 64 36
## java env 
#################### zhengjianyan #######################
export JAVA_HOME=/server/java/jdk
export JRE_HOME=$JAVA_HOME/jre

BASE_PATH=/server/java/service/com.xcsqjr.scf.service
VERSION=1.0.0
## service name
APP_NAME=all

SERVICE_DIR=$BASE_PATH/com.xcsqjr.scf.service.$APP_NAME
SERVICE_NAME=com.xcsqjr.scf.service.$APP_NAME-$VERSION
#JAR_NAME=$SERVICE_DIR/$SERVICE_NAME/target\.jar
JAR_NAME=$SERVICE_DIR/target/$SERVICE_NAME.jar
PID=$SERVICE_NAME\.pid

rm -rf $SERVICE_DIR/target/*.tmp
cd $BASE_PATH
cd ..

$JAVA_HOME/bin/jar uvf $SERVICE_DIR/target/$SERVICE_NAME.jar application.properties

cd $SERVICE_DIR
case "$1" in

    start)
        nohup $JRE_HOME/bin/java -Xms128m -Xmx256m -jar $JAR_NAME >/dev/null 2>&1 &
        echo $! > $SERVICE_DIR/target/$PID
        echo "=== start $SERVICE_NAME"
        ;;

    stop)
        kill `cat $SERVICE_DIR/target/$PID`
        rm -rf $SERVICE_DIR/target/$PID
        echo "=== stop $SERVICE_NAME"

        sleep 5
        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"
        ;;

    *)
        echo "==== restart ====="
        ## restart
        $0 stop
        sleep 5
        $0 start
        ;;
esac
exit 0