jenkins+maven+git+shell企业级灵活部署项目到一台或多台服务器

环境准备

  1. 安装jdk,mvaen
  2. 安装jenkins
  3. 安装git
  4. 安装Unison

服务器说明

本文使用3台服务器做演示

  • 服务器A:代码仓库
  • 服务器B:
该服务器装有jenkins默认会创建jenkins用户,方便管理权限,
创建一个server用户,tomat安装目录归属server用户所有
  • 服务器C: 装有tomcat
B服务器也创建一个server用户,tomat安装目录归属server用户所有

SSH免密登录配置

  1. 为B服务器jenkins用户生成秘钥,一路回车即可。如遇到无法切换jenkins用户请参考
ssh-keygen -t rsa
  1. B服务器server用户生成秘钥,方法同上。在这里插入图片描述
    秘钥生成完成后你会发现没有authorized_keys 文件,需要自己创建一个即可,创建完成该文件需要600权限,执行以下命令
chmod 600 authorized_keys
  1. C服务器server用户生成秘钥并创建authorized_keys 文件,方法同上。
  2. 将B服务器jenkins用户生成的公钥(id_rsa.pub里的东西)分别配置到,A服务器的代码仓库目录拥有者,B服务器server用户,C服务器server用户的authorized_keys文件中
  3. 验证是否能免密登录,在B服务器切换jenkins用户
    • 登录C服务器
    [root@lw tomcat]#su jenkins
    [jenkins@lw tomcat]$ssh server@C服务器ip
    
    1. 登录B服务器serverr用户
    [jenkins@lw tomcat]$ssh server@B服务器ip
    
    1. 显示以下图片登录成功(exit退出登录)
      在这里插入图片描述

目录结构

  • B服务器
[root@lw ~]#cd /home/
[root@lw home]#mkdir jenkins	
[root@lw home]#cd jenkins/
[root@lw jenkins]#mkdir sh
[root@lw jenkins]#mkdir word
[root@lw jenkins]#tar -zxvf apache-maven-3.5.4-bin.tar.gz
-
/home/jenkins/sh      用来存放shell脚本
/home/jenkins/word    jenkins临时工作目录
/home/jenkins/apache-maven-3.5.4   jenkins打包项目用

在这里插入图片描述
·在sh目录创建一个shell脚本

[root@lw jenkins]#cd sh
[root@lw sh]#vi springboot.sh

·加入以下代码,保存并退出
#!/bin/sh
路径) --restart-server= (是否重启服务) ]" ;

# 参数
# (git 仓库路径),
repository_url="";
# (构建 ID)
release_id="";
# (mvn 构建参数)
package_params="";
# (部署名称)
context_path="/ROOT";
# (应用名称)
app_name="";
# (部署机器)
hosts="";
# (web 容器的 Home 目录 )
web_home="";
# (备份路径)
backup_dir="";
# (APP 的安装路径)
app_home=
# (是否重启服务)
restart_server="";

deploy_type="normal";

if [ $# = 0 ];then
        echo  ${show_usage};
        exit 1;
fi

#获取参数!
while [ -n "$1" ]
        do
            case "$1" in
                    --repository-url) repository_url=$2; shift 2;;
                    --release-id) release_id=$2; shift 2;;
                    --package-params) package_params=$2; shift 2;;
                    --repository-url) repository_url=$2; shift 2;;
                    --app-name) app_name=$2; shift 2;;
                    --context-path ) context_path=$2; shift 2;;
                    --hosts) hosts=$2; shift 2;;
                    --web-home) web_home=$2; shift 2;;
                    --backup-dir) backup_dir=$2; shift 2;;
                    --app-home) app_home=$2; shift 2;;
                    --restart-server) restart_server=$2; shift 2;;
                    --deploy-type) deploy_type=$2; shift 2;;
                    --) break ;;
                    *) echo $1,$2,${show_usage}; break ;;
            esac
        done



# 临时工作区
deploy_time=$(date +'%Y%m%d%H%M%S')
deploy_basic_path=/home/jenkins/word
deploy_app_path=$app_name/${opt_build_id}_${deploy_time}

# 临时工作文件目录deploy_basic_path +  应用名+ 构建 ID + 时间戳(201606061212)/.
deploy_full_path=$deploy_basic_path/$deploy_app_path
mkdir -p $deploy_full_path
cd $deploy_full_path
echo '当前工作目录为: ' $deploy_full_path

echo info : check out ${repository_url} ${release_id} ...

git archive --remote=${repository_url} ${release_id} | tar -x -C .
if [ $? != 0 ]; then
        echo ${repository_url} is not a git repository;
        exit 2;
fi

chmod -R 777 *
echo info : mvn clean package  ${package_params}

#maven位置
/home/jenkins/apache-maven-3.5.4/bin/mvn clean package ${package_params}

chmod -R 777 *
target_path=$deploy_full_path/target${context_path}
war_name=${target_path}.war

# tomcat 操作
tomcat_opt(){
        local hosts=$1;
        local deploy_opt=$2;
        local p_tomcat_opt=$3;

        hosts=${hosts//:2375/''}

        hostList=${hosts//,/ }
        echo hostList is $1
        for host in $hostList ; do
                echo host_event  `date "+%Y-%m-%d %H:%M:%S"`  is $host
                if [ $deploy_opt == "yes" ] ;then
                        echo info : chmod -Rf 777 $deploy_full_path
                        chmod -Rf 777 $deploy_full_path
                        echo info : unison ${target_path} ssh://server@${host}/${app_home}${context_path} -force ${target_path} -batch
                        unison ${target_path} ssh://server@${host}/${app_home}${context_path} -force ${target_path} -batch
                fi;

                echo p_tomcat_opt is $p_tomcat_opt
                if [ $p_tomcat_opt == "restart" ];then
                        echo  ansible  $hosts -m shell -a "${web_home}/bin/shutdown.sh 10 -force ;nohup ${web_home}/bin/catalina.sh start "
                        ansible  $hosts -m shell -a "${web_home}/bin/shutdown.sh 10 -force ;nohup ${web_home}/bin/catalina.sh start "
                        sleep 30s
                fi

                if [ $p_tomcat_opt == "stop" ];then
                        ansible  $hosts -m shell -a "${web_home}/bin/shutdown.sh 10 -force  "
                fi

                echo "build successfully ..." ${host}
        done;
}

# 普通tomcat 运行环境部署
deploy_tomcat(){
        echo "start deploy_tomcat ......"
        echo unzip -oq ${war_name} -d ${target_path}
        mkdir -pv ${target_path}
        unzip -oq ${war_name} -d ${target_path}

        local _tp='normal';
        if [ $restart_server == 'YES' ] ; then
                _tp='restart';
        fi;
        if [ $restart_server == 'FYES' ] ; then
                _tp='frestart';
        fi;
        tomcat_opt ${hosts} 'yes' ${_tp} ;
}


# 如果maven构建成功, 则开始部署
if [ -f ${war_name} ];then
        deploy_tomcat ;
        echo "build successfully ..." ${hosts}
else
        echo "build failed"
        exit 10
fi

·如果以上操作不是用jenkins用户操作,则需要执行以下命令,否则构建会报各种权限不足错误

[root@lw sh]#chown -R jenkins:jenkins /home/jenkins/
[root@lw server]#cd /home/server/
[root@lw server]#mkdir tomcat
[root@lw server]#cd tomcat
[root@lw tomcat]#tar -zxvf apache-tomcat-8.5.30.tar.gz
[root@lw tomcat]#mv apache-tomcat-8.5.30 tomca-8080
[root@lw sh]#chown -R server:server /home/server
此台服务器端口为8080
  • C服务器
[root@lw1 ~]#cd /home/server/
[root@lw1 server]#mkdir tomcat
[root@lw1 server]#cd tomcat
[root@lw1 tomcat]#tar -zxvf apache-tomcat-8.5.30.tar.gz
[root@lw1 tomcat]#mv apache-tomcat-8.5.30 tomca-8080
[root@lw1 tomcat]#vi tomcat-8080/conf/server.xml  修改端口为8050
[root@lw1 sh]#chown -R server:server /home/server
分别启动BC服务器tomcat并删除webapps下的所有东西
启动前修改bin目录下的catalina.sh文件,添加一行CATALINA_PID="/home/deploy/tomcat/mjs-app-prod/logs/tomcat.pid",即指定tomcat.pid位置/home/deploy/tomcat/mjs-app-prod/logs(可以任意修改),要不然以后启动的时候会kill不掉进程,无法构建的问题
在BC两台服务器安装tomcat的时候注意保持路径一直,并且用root操作时需注意修改目录所属用户,否则构建没有操作权限

配置jenkins构建

  1. 登录jenkins新建一个任务,选择一个自由风格项目
    在这里插入图片描述
  2. 填写描述,勾选参数化构建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3. 构建项目
在这里插入图片描述
在这里插入图片描述
4. 分别访问两台服务器,端口为8080和8050,显示成功
在这里插入图片描述

说明

如果没有多台服务器,在填写参数化构建时只填写一个ip即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值