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即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值