Shell脚本打包Go、Vue和上传至Docker仓库记录
简介有时候为了打包需要敲很多命令,实在比较麻烦,所以这里记录了如何通过shell脚本将这些命令全部集中起来,后面可以直接执行该脚本就把需要的所有命令跑完。
完整打包一个Go应用是比较麻烦,会有各种命令,因为涉及到前端Vue、Go编译和Docker等。比如需要先打包静态文件,编译Golang二进制包,上传Docker仓库,然后做一些清理工作。这里主要记录使用一个shell脚本将所有的命令全部写入进去,等后面需要再次需要重复上面的步骤时,就可以只执行该脚本即可。
1、脚本文件内容如下
使用该脚本的时候需要对 !!!xxxx!!! 这个内容进行替换成自己的信息
#镜像名称
image_name="!!!!镜像名称!!!!"
#docker仓库地址
docker_addr="!!!!自己的仓库地址!!!!/${image_name}"
#版本号需要在执行脚本的时候进行输入,格式为0.0.1的格式
version=$1
if [ $# -ne 1 ];then
echo "只能包含一个版本号参数,如1.0.0、1.21.23"
exit
fi
#定义编译函数
build(){
#编译后台界面资源文件
cd templates/ && npm run build --pro && cd ../
#删除编译的文件
rm -rf ${image_name}
#使用bindata打包所有的静态文件
go-bindata -o=bindata/bindata.go -pkg=bindata ./templates/dist/...
#编译
go build --tags netgo -o ${image_name}
#编译镜像
docker build -t ${image_name}:${version} . --network=host
#镜像打tag
docker tag ${image_name}:${version} ${docker_addr}:${version}
docker tag ${image_name}:${version} ${docker_addr}:latest
#推送镜像
docker push ${docker_addr}:${version}
docker push ${docker_addr}:latest
#删除镜像
docker rmi ${image_name}:${version} ${docker_addr}:latest ${docker_addr}:${version}
}
#提示信息
read -r -p "确认当前版本使用:${version} 版本号编译Docker镜像吗? [Y/n] " input
case $input in
[yY][eE][sS]|[yY])
build
;;
[nN][oO]|[nN])
echo "退出"
;;
*)
echo "输入错误,退出"
exit 1
;;
esac
2、编译前准备
- 首先,检查本地是否安装了编译所需要的环境
- 其次,检查仓库是否进行了登录,命令如下
docker login 仓库地址
- 最后,要讲上面的内容存在项目根目录下,并设置成可执行权限
3、执行脚本
> ./build.sh 0.0.1 #编译成0.0.1版本