jenkins持续集成案例

时间:2022-07-22
本文章向大家介绍jenkins持续集成案例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

环境介绍

线上环境使用的微服务的一套治理方案,由于把所有的模块全都放到一台机器上,启动的时候是通过java jar的方式进行启动,所以整个过程就非常的简单和清晰,大概思路如下:

  1. 拉取git仓库代码
  2. 通过maven打包构建
  3. 将jar包同步到目标主机上
  4. 执行目标主机上的java程序

实现过程

配置Jenkins

此过程需要安装Jenkins的一些插件,例如Git Parameter,Extended Choice Parameter Plugin 过程如下图:

还需要配置jdk和maven,这里不再赘述,截图如下:

创建一个任务

创建一个自由风格的任务

设置参数,在构建时可以选择分支

设置参数,在构建时可以选择要发布的模块

设置好NAME,以及Parameter type为Check Boxes,Number of Visible Items要显示的数量,有多少就写多少,Delimter设置分隔符,这里设置的是空格,后面的Value是要发布的模块名,有什么就写什么,后面也可以设置默认的value,构建时会自动勾选 设置git仓库的地址,注意$BRANCH

最后就是设置执行的脚本

脚本参考
# cat start_server.sh 
#!/bin/bash

basedir="/export/server/pangolin-server"
DATE=`date "+%Y%m%d%H%M"`
JAVA_BIN=`which java`

#pangolin-service-eureka-0.0.1-SNAPSHOT.jar
#nohup java -Xms128m -Xmx128m -jar pangolin-service-eureka-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &

module_list=(
business 
common 
dataimp 
eureka 
file 
reminder 
target 
zuul 
)

stop() {
        module_name=$1
        jar_name="pangolin-service-${module_name}-0.0.1-SNAPSHOT.jar"
        module_pro=$(ps -ef | grep "$jar_name" | grep -v grep | wc -l)
        if [ $module_pro -ne 0 ]
        then
                ps -ef | grep "$jar_name" | grep -v grep | awk '{print $2}' | xargs kill -9 2>&1
                if [ `ps -ef | grep "$jar_name" | grep -v grep | wc -l` -eq 0 ];then
                        echo "$module_name module stop successful."
                else
                        echo "$module_name module stop faild."
                fi
        fi
}

check() {
        module_name=$1
        if test ! -d ${basedir}/service/${module_name}-server;then
                mkdir ${basedir}/service/${module_name}-server -p
        fi
}

start() {
        module_name=$1
        jar_name="pangolin-service-${module_name}-0.0.1-SNAPSHOT.jar"
        module_pro=$(ps -ef | grep "$jar_name" | grep -v grep | wc -l)
        while true
        do
                if [ $module_pro -eq 0 ]
                then
                        check $module_name
                        cd ${basedir}/service/${module_name}-server
                        if test ! -d backup;then
                                mkdir backup
                                mv ${jar_name} backup/${jar_name}_old_$DATE
                        fi
                        cp ${basedir}/${jar_name} ${basedir}/service/${module_name}-server/
                        nohup $JAVA_BIN -Xms128m -Xmx128m -jar $jar_name > /dev/null 2>&1 &
                        if [ `ps -ef | grep "$jar_name" | grep -v grep | wc -l` -ne 0 ];then
                                echo "$module_name start successful."
                                break
                        fi
                else
                        stop $module_name
                fi
        done
}

if [ $# -ne 0 ];then
        for line in $@
        do
                start $line
        done
else
        echo "Usage: sh $0 $module_list[*]"
        exit 0
fi
就是一个简单的启动脚本,启动时需要传入模块名的参数,多个时以空格分隔

构建任务示例

可以选择一个或多个进行发布