Shell 脚本 - 打包 docker 镜像

所涉及到点

  1. 获取当前脚本的路径
  2. 判断文件是否存在
  3. 三元表达式中执行多条语句
  4. 判断值是否为数字
  5. 数学运算
  6. 函数
  7. case 判断
  8. 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
posted @ 2022-04-15 18:40  klvchen  阅读(511)  评论(0)    收藏  举报