SpringBoot集成Jenkins自动化本地单体应用部署

SpringBoot集成Jenkins自动化本地部署

1.准备工作

1.1:前言

首先安装Jenkins之前,linux中必须安装好了JDK和Maven,如果还没有安装过,下面准备好安装教程, > > Linux环境安装JDK:https://www.cnblogs.com/xuliangxing/p/7066913.html > > Linux环境安装Maven:https://blog.csdn.net/qq_35868412/article/details/89471735

1.1.1:安装

image-20211224155208398
> > - > sudo wget -O /etc/yum.repos.d/jenkins.repo \https://pkg.jenkins.io/redhat-stable/jenkins.repo > sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key > sudo yum upgrade > sudo yum install epel-release java-8-openjdk-devel > sudo yum install jenkins > sudo systemctl daemon-reload > > > - whereis jenkins 命令查看jenkins的安装目录 > > - 如有异常:Job for jenkins.service failed because the control process exited with error code > > > 1. 我jenkins中的没有配置jdk的路径 mvn -v 可显示路径 或者ps -ef |grep java > > > >
image

image-20211224155942075

> > > > 2. 然后修改/etc/init.d/jenkins文件 ,配置jdk安装路径 > > > >
image
image-20211224160011853

> > > > 3. 启动jenkins服务默认使用8080端口,启动前如果想修改端口号,可在/etc/sysconfig/jenkins中修改jenkins端口号 > > > >
image
image-20211224160228788

> > > > 4. 将jenkins用户改成root,上面jenkis注释 > > > > 5. 修改完成之后,重新启动一下jenkins,启动成功~ > > > >
image

image-20211224160057030
> > > > 6. 访问服务器ip:8070访问 > > > > 7. 会告诉你初始密码所在位置,一般是 /var/lib/jenkins/secrets/initialAdminPassword输入密码,进入系统页面,会提示创建用户,可以自行创建用户,输入用户名和密码. > > > > 8. 先看是否插件配置齐全,然后配置全局变量信息,比如maven,git,jdk路径信息,具体操作步骤如下: > > 构建maven项目,使用gitlab仓库,必备的几个插件有maven-intergration(此处下面还有一个maven安装不要忘记(否则会打包失败,而且界面会提示找不到pom.xml)), publish-over-ssh等 > > > > 9.
image

image-20211224160749109

> > > > 10.
image
image-20211224160805756

> > > > 11.
image
image-20211224160819177

1.1.2:创建一个jenkins任务

1.
image
image-20211224161004320

> > 2.
image
image-20211224161022765

> > 3.
image
image-20211224161035118

> > 4.
image
image-20211224161049592

> > 5.
image
image-20211224161103179
  1. 注意:(jenkins安装和你部署的项目在同一台服务器选择执行sheel)

    #!/bin/bash 
           
    #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
    export BUILD_ID=dontKillMe
           
    #Jenkins中编译好的jar名称
    jarName=sannuo-1.0-SNAPSHOT.jar
          
    #jenkins任务名称
    pathName=sannuo
          
    #自定义项目名称
    usePathName=/data/sinocare/sannuojarproject
    
    
    echo "拷贝文件"
    rm -rf $usePathName/$jarName
    cp /var/lib/jenkins/workspace/$pathName/target/$jarName $usePathName/
    echo "切换路径"
    cd $usePathName/
    echo "执行脚本"
    ./auto_deploy.sh restart
    echo "启动成功!"
    

如果和你部署的不在同一台服务器 > >
image
image-20211224161348949

> > 附上解释: > > 7. 本地进行构建: > >
image
image-20211224161829709

> >
image
image-20211224161853286

> >
image
image-20211224162017448

> > > 说明:具体详细的都在脚本里面。脚本会贴出来 白色的.sh 文件为不可执行文件,chmod +x xx.sh

3.配置web钩子自动部署(Gogs + jenkins 实现自动部署)

3.1:准备

1. 安装gogs > 2. 安装jenkins

3.2:操作

1. 点击可选插件,搜索gogs,我这里已经安装了,所以选的已安装 > >
image
image-20211224162416044

> >
image
image-20211224162507111

> >
image
image-20211224162549242

> >
image

image-20211224162652042
> > > 说明:这里的推送地址是http://jenkins地址:端口号/gogs-webhook/?job=test,这里的test是要与上面在jenkins里面的任务名一致。触发web钩子的事件可以自己设置什么样的事件去触发jenkins的构建。 > > > > 然后返回可以正常启动。如果gogs配置钩子的过程当中没有配置密钥。在jenkins中什么都不需要点。

4.脚本

4.1:启动脚本

  #!/bin/bash
# 定义变量
# 要运行的jar包路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到
JAR_NAME="/data/sinocare/sannuojarproject/sannuo-1.0-SNAPSHOT.jar"
# 日志路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到
LOG_PATh="/data/sinocare/sannuojarproject/main.log"


# 如果输入格式不对,给出提示!
tips() {
        echo ""
        echo "WARNING!!!......Tips, please use command: sh auto_deploy.sh [start|stop|restart|status].   For example: sh auto_deploy.sh start  "
        echo ""
        exit 1
}


# 启动方法
start() {
        # 重新获取一下pid,因为其它操作如stop会导致pid的状态更新
        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
        # -z 表示如果$pid为空时执行
        if [ -z $pid ]; then
                # 生产环境输出日志和错误日志都不打印
                #nohup java -jar $JAR_NAME > /dev/null 2>&1 &
                # 调试时可用这个命令打印启动 
            nohup java -jar $JAR_NAME > $LOG_PATh 2>&1  &
        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
                echo ""
        echo "Service ${JAR_NAME} is starting!pid=${pid}"
                echo "........................Here is the log.............................."
                echo "....................................................................."
        #tail -f $LOG_PATh
                echo "........................Start successfully!........................."
        else
                echo ""
                echo "Service ${JAR_NAME} is already running,it's pid = ${pid}. If necessary, please use command: sh auto_deploy.sh restart."
                echo ""
        fi
}
             
# 停止方法
stop() {
                # 重新获取一下pid,因为其它操作如start会导致pid的状态更新
        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
        # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
        if [ -z $pid ]; then 
                echo ""
        echo "Service ${JAR_NAME} is not running! It's not necessary to stop it!"
                echo ""
        else
                kill -9 $pid
                echo ""
                echo "Service stop successfully!pid:${pid} which has been killed forcibly!"
                echo ""
        fi
}

# 输出运行状态方法
status() {
        # 重新获取一下pid,因为其它操作如stop、restart、start等会导致pid的状态更新
        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
        # -z 表示如果$pid为空时执行。注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
        if [ -z $pid ];then
                echo ""
        echo "Service ${JAR_NAME} is not running!"
                echo ""
        else
                echo ""
        echo "Service ${JAR_NAME} is running. It's pid=${pid}"
                echo ""
        fi
}

# 重启方法
restart() {
        echo ""
        echo ".............................Restarting.............................."
        echo "....................................................................."
                # 重新获取一下pid,因为其它操作如start会导致pid的状态更新
        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
        # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
        if [ ! -z $pid ]; then
                kill -9 $pid
        fi
        start
        echo "....................Restart successfully!..........................."
}

# 根据输入参数执行对应方法,不输入则执行tips提示方法
case "$1" in
   "start")
     start
     ;;
   "stop")
     stop
     ;;
   "status")
     status
     ;;
   "restart")
     restart
     ;;
   *)
     tips
     ;;
esac   

需要自己好好理解下,想明白jenkins具体实现的功能,公司当中只是自己构建项目从来没有安装和配置,其中还是有非常多的坑的 。

给自己做个标记。

附上好文:

如何启动jar:https://app.yinxiang.com/fx/4ba1a688-6c6a-4c74-bc25-5804dff2b104

Linux环境下安装Jenkins(超详细):https://blog.csdn.net/qq_35868412/article/details/89475386

centos7使用jenkins自动化部署Spring boot项目(全):https://blog.csdn.net/lvxiucai/article/details/98979157

ERROR: Maven JVM terminated unexpectedly with exit code 137解决:https://blog.csdn.net/u014204541/article/details/102671182

linux安装jenkins并远程部署springboot项目:https://blog.csdn.net/laidanlove250/article/details/103243020

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容