Jenkins+SpringBoot+Gitee持续集成

 

一 背景

项目采用SpringBoot架构,如果用传统的构建+发布的模式,QA要记录很多的环境配置,做很多机械的操作,容易增加出错的可能,工作效率比较低。

为了解决这个问题,我使用Jenkins作为持续集成工具,写了一个Shell脚本,可以自动清理服务器环境和启动对应的服务,大大提高了QA部署服务的工作效率。

二 使用资源

1)Gitee工程、Gitee账号。(公司项目是用codehub维护,我这里使用码云来演示)

2)Ubuntu18测试环境服务器。

3)Windows10 开发机器。

4)Shell脚本,主要功能清理服务器部署环境、启动服务。

4)Jenkin的web程序包。

三 操作时序图

四 安装和设置Jenkins

 1)下载jenkins.war

下载地址:https://jenkins.io/download/

  页面下部,点击红框里面的文件下载。

 2)启动Jenkins

在任一安装了java环境的机器上都可以启动jenkins程序包

java -jar jenkins.war

在控制台会jenkins会输出初始化密钥

同样可以去电脑对应的文件目录里面找到这个key 

b111033f1a404d799251929b4db3e14f

 3)安装Jenkins

jenkins默认8080端口,访问 http://127.0.0.1:8080,输入上面的初始化密钥

  点击继续,

  选择安装推荐的插件

  网络快的话,大概几分钟

  创建一个自己的用户,保存并继续,

保存继续,

  完成设置。

4)设置Jenkins

  • 安装扩展插件

选择 可选插件

安装这几个[Pipeline Maven Integration]、[Maven Integration]、[Publish Over SSH]和[Gitee]。

勾选并选择直接安装。

  • 系统设置

   拉到页面的下部,配置远程测试服务器,

  增加服务配置,

    

  • 全局工具配置

  

  分配设置maven配置文件、jdk目录、git安装目录和maven目录。

   

  

  自己电脑上安装了git后,会默认读取git的安装进程的

  

  • 创建构建任务

  

   

   

  

  输入一个名字,例如我输入:helloPudding

  进入配置页面,配置源代码,

  构建环境中,选择 [Send files or execute commands over SSH after the build runs]

  

  分两步操作

  第一步 清理服务器环境 和 第二步 启动服务

  

  服务器opt目录的树形结构是

  

  goaloneService.sh 的脚步内容如下:

  

#!/bin/sh
## java env
export JAVA_HOME=/lib/jvm/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
## exec shell name
EXEC_SHELL_NAME=$1\.sh
## service name
SERVICE_NAME=$1
SERVICE_DIR=/opt
JAR_NAME=$SERVICE_NAME\-0.0.1-SNAPSHOT.jar
TIME_STR=$(date +%Y%m%d%H%M%S)
PID=pid/$SERVICE_NAME\.pid
WORK_DIR=$SERVICE_DIR/servicespace/$1
#function start
start(){
    cd $WORK_DIR
   if [ ! -d "log" ]; then
        mkdir log
    fi
   nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME > log/$SERVICE_NAME.out 2>&1 &
        echo $! > $PID
        echo "**************** start $SERVICE_NAME success ****************"
}
# function stop
stop(){
    cd $WORK_DIR
   if [ -f "$PID" ]; then
                kill  `cat $PID`
                rm -rf $PID
        fi
        echo "**************** stop $SERVICE_NAME ****************"
        sleep 6
        TEMP_PID=`ps -ef | grep -w "$SERVICE_NAME" | grep "java" | awk '{print $2}'`

        if [ "$TEMP_PID" =  "" ]; then
            echo "**************** $SERVICE_NAME process not exists or stop success ****************"
        else
            echo "**************** $SERVICE_NAME process pid is [$TEMP_PID] ****************"
            kill -9 $TEMP_PID
        fi
    echo "**************** stop $SERVICE_NAME success ****************"
}
# function clean
clean(){
    cd $WORK_DIR
        if [ ! -d "lastDeploy" ]; then
           mkdir lastDeploy
        fi
        if [ -f "$JAR_NAME" ]; then
           mv $JAR_NAME lastDeploy/$JAR_NAME$TIME_STR
        fi
}
case "$2" in
    start)
   start
        ;;
    stop)
   stop
        ;;
    restart)
        stop
        sleep 2
        start
        echo "**************** restart $SERVICE_NAME success ****************"
        ;;
    clean)
   stop
    sleep 2
   clean
    echo "**************** clean $SERVICE_NAME success ****************"
   ;;
    *)
       ## restart
       stop
       sleep 2
       start
       ;;
esac
exit 0

  配置maven打包命令,并跳过单元测试。

  • 执行构建任务

  

   控制台输出部分日志:

  

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.670 s
[INFO] Finished at: 2018-08-30T18:25:56+08:00
[INFO] Final Memory: 35M/333M
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving C:\Users\xxx\.jenkins\workspace\helloPudding\pom.xml to com.goalone/helloPudding/0.0.1-SNAPSHOT/helloPudding-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving C:\Users\xxx\.jenkins\workspace\helloPudding\target\helloPudding-0.0.1-SNAPSHOT.jar to com.goalone/helloPudding/0.0.1-SNAPSHOT/helloPudding-0.0.1-SNAPSHOT.jar
SSH: Connecting from host [DESKTOP-DFCKDKK]
SSH: Connecting with configuration [Test182] ...
channel stopped
SSH: EXEC: STDOUT/STDERR from command [cd /opt
sh ./goaloneService.sh helloPudding clean] ...
**************** stop helloPudding ****************
**************** helloPudding process not exists or stop success ****************
**************** stop helloPudding success ****************
**************** clean helloPudding success ****************
SSH: EXEC: completed after 8,230 ms
SSH: EXEC: STDOUT/STDERR from command [cd /opt
sh ./goaloneService.sh helloPudding start] ...
**************** start helloPudding success ****************
SSH: EXEC: completed after 202 ms
SSH: Disconnecting configuration [Test182] ...
SSH: Transferred 1 ( 0 + 1 ) file(s)
Finished: SUCCESS

  部署成功。

五 讨论扩展

  • jenkins是主流的持续集成工具,配置简单,使用方便,配合shell脚本很容易操作服务器。类似的产品也有很多,详情请来 https://www.oschina.net/p/jenkins/related 了解。
  • 这里是通过java命令启动jar包,现在虚拟化技术比较流行,可以配合docker进行持续集成。
  • jenkins的功能还有很多,有时间可以详细挖掘一下。

六 参考资料

  https://www.jianshu.com/p/ba09cdc53343

猜你喜欢

转载自www.cnblogs.com/goalone/p/9556168.html