Shell 脚本 - 打包 docker 镜像
所涉及到点
- 获取当前脚本的路径
- 判断文件是否存在
- 三元表达式中执行多条语句
- 判断值是否为数字
- 数学运算
- 函数
- case 判断
- read 客户输入
#!/bin/bash
# 构建docker 镜像
# 项目服务的名称
projectName=dr-flexible-load
# 这个shell脚本的位置
shellPath=$(cd $(dirname $0) && pwd)
# 项目服务的源代码位置
workSpace=${shellPath}/mysrc/${projectName}
# 镜像的定义,如 myregistry.com:5005/cloud-emm/服务的名称:版本号
registryUrl=myregistry.com:5005
group=cloud-emm
# 项目服务 docker-compose 所在父目录的上级目录,例如:${projectParentDir}/dr-flexible-load/docker-compose.yml
projectParentDir=/data/huidian/docker-compose
confirm_update()
{
read -p "是否已经把项目代码更新到最新版本?[Y/n] " opt
case $opt in
Y)
echo "====> 开始检查"
;;
*)
echo "====> 请先更新项目代码"
exit 1
;;
esac
}
check_int()
{
echo "====> 检查版本号"
[ -f ${shellPath}/info.txt ] || { echo "info.txt does not exits!"; exit 1; }
buildNumber=$(cat ${shellPath}/info.txt)
expr ${buildNumber} + 0 >/dev/null 2>&1
[ $? -ne 0 ] && { echo "Args must be integer!";exit 1; }
}
build_images()
{
echo "====> 开始打包镜像"
cd ${workSpace}/target
cp ${workSpace}/src/main/docker/Dockerfile Dockerfile
[ -d ${workSpace}/upload_dir ] && cp -af ${workSpace}/upload_dir ./
docker build -t ${registryUrl}/${group}/${projectName}:${buildNumber} .
[ $? -ne 0 ] && { echo "打包失败,请检查!";exit 1; }
}
update_project()
{
echo "====> 开始更新服务"
sed -i "s#image: ${registryUrl}.*#image: ${registryUrl}/${group}/${projectName}:${buildNumber}#g" ${projectParentDir}/${projectName}/docker-compose.yml
cd ${projectParentDir}/${projectName}; docker-compose up -d
}
update_build_num()
{
echo "====> 更新版本号"
#echo $(expr ${buildNumber} + 1) > ${shellPath}/info.txt
buildNumber=$(expr ${buildNumber} + 1)
echo ${buildNumber} > ${shellPath}/info.txt
}
main()
{
confirm_update
check_int
update_build_num
build_images
update_project
}
main

浙公网安备 33010602011771号