定义
以上都是基本语法,下面我们将通过一个具体的例子,来实践讲解shell脚本的使用
实例一 jenkins本地自动化部署脚本
说明:此脚本实现了通过jenkins,从git上获取tomcat,本地maven打包服务,发布到tomcat中,然后复制tomcat到指定目录下,检测原有服务,并重启tomcat服务,并通过curl命令测试服务是否已经启动成功
#!/bin/sh -
set -x
targetName=${project_name}
targetWar=
base_tomcat=
port=${port}
tomcat_name="tomcat-${project_name}-${port}"
tomcat_target=
#更新构建id,否则如果jenkins和tomcat在同一服务器的话,jenkins执行完成后,会杀死所有进程
export BUILD_ID=tomcat_deploy_id_${tomcat_name}
workspace=`find /jenkins/ -name ${JOB_NAME}`
echo "$M2_REPO"
if [ -d ${workspace} ]
then
echo "workspace is exists ${workspace} \n" > /dev/null
cd ${workspace}
mvn clean install -Dmaven.test.skip=true
if [ $? -eq 0 ]
then
echo "本地打包${targetName}完成 \n" > /dev/null
else
echo "本地打包${targetName}失败 \n" > /dev/null
exit 1
fi
else
echo "workspace is not exists ${workspace} \n" > /dev/null
fi
targetWar=`find /apps/mvn-space -name $targetName*.war`
if [ -n "${targetWar}" ]
then
echo "echo ${targetWar} build success, start tomcat "
else
echo "echo ${targetWar} is not exists,部署失败\n"
exit 1
fi
# # # 清除空间内的basetomcat
rm -rf tomcat-base
#捡出tomcat
git clone git@code.aliyun.com:tlgj704/tomcat-base.git
# #
base_tomcat=`find /jenkins/ -name tomcat-base`
if [ -d "${base_tomcat}" ]
then
echo "base_tomcat is ${base_tomcat}"
else
echo "未找到base_tomcat,部署失败"
exist 1
fi
#将war拷贝到base-tomcat中
cp ${targetWar} ${base_tomcat}/webapps/${targetName}.war
pushd ${base_tomcat}/conf/
#更新tomcat端口
`sed -i "s/8080/${port}/g" server.xml`
pushd
#查找原有tomcat是否在运行
tomcat_target=`find /apps/ -name ${tomcat_name}`
if [ -d "${tomcat_target}" ]
then
#找到旧tomcat,将会先杀4死旧服务
echo "${tomcat_name} arealy exists ,will stop ,and remove \n"
#查找原有服务
oldPid=`lsof -i:${port} | grep java |awk -F " " '{ print $2}' `
#如果原服务存在,先杀死原服务
if [ -n "${oldPid}" ]
then
`kill -9 "${oldPid}"`
else
echo "old pid is null\n"
fi
rm -rf ${tomcat_target}
else
#没找到旧tomcat,将会创建新服务
echo "${tomcat_name} not exist,create new tomcat\n"
fi
cp -r ${base_tomcat} /apps/${tomcat_name}
#等待10秒,等待复制完成
sleep 10
#启动服务
sh /apps/${tomcat_name}/bin/startup.sh
#删除临时tomcat
rm -rf ${base_tomcat}
echo "部署工程${JOB_NAME}完成"
#等待10秒,等待复制完成
sleep 10
exit 0
实例二 jenkins远程自动自动化部署脚本
。。。
网友评论