基于Git+Maven+Jenkins的可持续集成及自动化构建

19 篇文章 0 订阅
7 篇文章 0 订阅

由于项目是采用分布式架构,需要多节点部署,加之对Jenkins的pipeline不是特别熟悉,决定更多的使用shell实现。

这里写图片描述
创建一个任务
这里写图片描述

配置参数化构建(使之支持回滚)
这里写图片描述

配置源码git地址
这里写图片描述

配置定时触发
这里写图片描述

配置构建shell(支持回滚)

case $deploy_env in
    deploy)
        echo "deploy:$deploy_env"
        mvn install
        cd a
        mvn clean package -Pdev 
        cd ../b
        mvn clean package -Pdev 
        cd ../c
        mvn clean package -Pdev 
        cd ../d
        mvn clean package -Pdev 
        cd ../e
        mvn clean package -Pdev 
        cd ../f
        mvn clean package -Pdev
        cd ..
        ;;
    rollback)
        echo "rollback:$deploy_env"
        echo "version:$version"
        rm -rf ./*/target

        cp -R /root/.jenkins/jobs/all/configurations/builds/${version}/archive/a/target ./a
        cp -R /root/.jenkins/jobs/all/configurations/builds/${version}/archive/b/target ./b
        cp -R /root/.jenkins/jobs/all/configurations/builds/${version}/archive/c/target ./c
        cp -R /root/.jenkins/jobs/all/configurations/builds/${version}/archive/d/target ./d
        cp -R /root/.jenkins/jobs/all/configurations/builds/${version}/archive/e/target ./e
        cp -R /root/.jenkins/jobs/all/configurations/builds/${version}/archive/f/target ./f
        ;;
    *)
    exit
        ;;
esac

这里写图片描述
配置war发送至远程服务以及调用远程服务脚本
由于服务直接有依赖关系,故启动脚本之间有的会有sleep

scp **/target/*.war root@192.168.2.64:/root/all/wars

ssh root@192.168.2.64 "/root/all/sh/a.sh"
ssh root@192.168.2.64 "/root/all/sh/b.sh"
ssh root@192.168.2.64 "/root/all/sh/c.sh"
sleep 15

ssh root@192.168.2.64 "/root/all/sh/d.sh"
sleep 40
ssh root@192.168.2.64 "/root/all/sh/e.sh"
ssh root@192.168.2.64 "/root/all/sh/f.sh"
sleep 20
ssh root@192.168.2.64 "/root/all/sh/tail/tail.sh"


这里写图片描述

a.sh脚本示例

#!/bin/sh
export tomcat_name=apache-tomcat-8.5.16-a-provider
export tomcat_home=/data/soft/$tomcat_name
export war_home=/root/all/wars
export war_name=$war_home/a-provider.war
TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')
echo "[info]进程$TomcatID将要被清理。。。"
kill -9 $TomcatID  # 杀掉原tomcat进程
sleep 3
TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')
if [[ !$TomcatID ]];then # 这里判断TOMCAT进程是否存在  
    echo "[info]进程清理成功"
    export bak=$tomcat_home/appbak/$(date -d "today" +"%Y%m%d_%H%M%S")-war-bak
        mkdir $bak
    echo "[info]清理过期备份文件"
    find $bak/ -mtime +30 -name "*-war-bak" -exec rm -rf {} \;
        echo "[info]开始备份应用程序至$bak。。。"
        cp -r  $tomcat_home/webapps/ROOT $bak/
        echo "[info]备份应用程序至$bak完成"
        rm -rf $tomcat_home/webapps/ROOT $tomcat_home/webapps/ROOT.war
        echo "[info]开始部署应用程序。。。"
        cp $war_name $tomcat_home/webapps/ROOT.war
        echo "[info]部署应用程序完成,开始启动。。。"
        rm -rf $war_name
        $tomcat_home/bin/startup.sh

 else
    echo "[error]进程$TomcatID清理失败,请重试!"
fi

tail.sh脚本示例

echo '==============================a-provider==================================================='
tail -n 50 /data/soft/apache-tomcat-8.5.16-a/logs/catalina.out
echo '==============================b-provider==================================================='
tail -n 50 /data/soft/apache-tomcat-8.5.16-b/logs/catalina.out
echo '==============================c-provider==================================================='
tail -n 50 /data/soft/apache-tomcat-8.5.16-c/logs/catalina.out
echo '==============================d==================================================='
tail -n 50 /data/soft/apache-tomcat-8.5.16-d/logs/catalina.out
echo '==============================e==================================================='
tail -n 50 /data/soft/apache-tomcat-8.5.16-e/logs/catalina.out
echo '==============================f==================================================='
tail -n 50 /data/soft/apache-tomcat-8.5.16-f/logs/catalina.out

以上远程调用,需配置免密登录
如配置B服务免密登录A,则在B服务器:
执行ssh-keygen -t rsa
然后一直回车,就可以在 /root/.ssh目录下看到公钥和私钥

[root@123456 /]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
74:fb:6e:b8:40:67:81:52:8a:ad:5a:7b:d8:83:df:dd root@iz8vbda2qfz3f1qw1b2e9cz
The key's randomart image is:
+--[ RSA 2048]----+
|        .        |
|     o o .       |
|    . + o o      |
|     . o . o     |
|    o   S +      |
|   o = . o .     |
|  . + + .  ..    |
|     o o o.o.    |
|      . . ooE    |
+-----------------+
You have new mail in /var/spool/mail/root

在B服务器:
/root/.ssh目录下新建文件authorized_keys,将B机器中的公钥放到A机器的authorized_keys中
免密登录配置完毕
另外,服务器需要在/etc/bashrc文件配置jdk相关配置,否则ssh远程调用脚本启动tomacat时,会报出JAVA_HOME找不到错误

配置归档(每次构建后,war归档存储,用于回滚操作)
这里写图片描述

综上,一个简单的支持远程多节点部署的可持续集成服务配置完毕

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值