小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
#git仓库项目的名称、docker-compose.yml 里面image和container的名称要求一样
project_name_service_name_container_name=usercenter
#你最终要部署的sdk的war的名称,不加版本号
sdk_name=usercenter-web
#项目的lab地址,基于https的话要在地址中加入用户名和密码信息
project_repository=
#你需要拉取的源码版本,符合git版本,默认不传参获取最新版本,也可以传特定的版本用于版本回退
#比如传^ 回退一个版本,^^回退两个版本 ^^^回退三个版本 versionid 回退到versionid这个版本
pull_version=$1
function pull () {
if [ ! -d gitlab ]; then
mkdir gitlab
fi
cd gitlab
if [ ! -d "$project_name_service_name_container_name" ]; then
git clone $project_repository
echo -e "\n\nclone success!\n\n"
cd ..
else
cd $project_name_service_name_container_name
if [ -n "$pull_version" ]; then
#回退
if [[ $pull_version == "rollback" || $pull_version == "rbk" || $pull_version == "rb" ]]; then
git reset --hard HEAD^
else
git reset --hard $pull_version
fi
echo -e "\n\nreset success!\n\n"
else
git pull
echo -e "\n\npull success!\n\n"
fi
cd ../..
fi
echo "current path " pwd
}
function package () {
cd gitlab/$project_name_service_name_container_name
mvn package "-Dmaven.skip.test=true -e -U"
sdk_packaged_name=${sdk_name}*.war
cp $sdk_name/target/*.war ../../web/$project_name_service_name_container_name/"$project_name_service_name_container_name".war
rm -rf ./*/target
echo "package success!"
cd ../..
echo "current path " pwd
}
function start () {
orignal_started_container=docker ps |grep $project_name_service_name_container_name
original_stoped_container=docker ps -a |grep $project_name_service_name_container_name
if [ -n "$orignal_started_container" ]; then
docker stop $project_name_service_name_container_name
fi
if [ -n "$original_stoped_container" ]; then
docker rm $project_name_service_name_container_name
fi
docker-compose build $project_name_service_name_container_name
docker-compose create $project_name_service_name_container_name
docker-compose start $project_name_service_name_container_name
echo -e "\n\n##################Application Log#######################\n\n"
docker logs -f $project_name_service_name_container_name
}
pull
package
start
脚本说明
这个脚本每个app应该有一个脚本,命名可以用deploy_appname的形式,但是不要求 运行脚本需要满足以下:
project_name_service_name_container_name=填写你的docker-compose.yml中的containe_name
sdk_name=填写sdk构建名称,不需要加版本信息 例如我的项目sdk构建名称就是项目的web模块的名称:xxx-web
project_repository=填写你项目的git地址,推荐ssh地址,https的话记得加上你的用户名和密码信息