shell脚本实现打tag并上传Git仓库

1,681 阅读1分钟

背景:按运维要求,Web前端项目发布正式环境时,开发人员需要在Git项目仓库创建tag,并将待发布项目地址和tag以邮件方法知会运维人员,最后运维结合Jenkins完成部署上线。

为满足上述要求,同时避免手动创建tag,本文制作了一个简单的脚本文件 deploy.sh,开发人员本地执行 npm run deploy tag名称 ,即可实现基于当前分支创建tag,并上传至远程Git仓库。

PS: 此流程较简单粗糙,仅抛砖引玉

1. 本地项目根目录创建deploy.sh

deploy.sh内容如下

#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e
# 判断tag是否为空
if [ $# -eq 0 ];
then
    echo 'please input tag name!'
    exit
fi
# 校验tag格式是否正确
TAGPATTERN="^final_v[1-9]\.[0-9]\.[0-9]$"
if [[ "$1" =~ $TAGPATTERN ]]; then :
else
echo "tag format is invalid!"
exit
fi
# 生成静态文件
npm run build
# 判断dist目录是否存在
if [ ! -d "dist" ]; then
echo 'dist folder cannot found!'
exit
fi

# 创建tag并上传远程Git仓库
git tag $1
git push -f origin $1

脚本内容做了一些约束:

  • tag名称不能空
  • tag名称必须正则匹配final_vx.x.x格式
  • 根目录需存在dist目录,注意在.gitignore中去掉dist忽略项
2. package.json文件 scripts 添加deploy属性
3. 执行npm run deploy final_v1.1.1, 创建名为final_v1.1.1的tag
MacBook-Pro:autotag kuipernpm run deploy final_v1.1.1

> autotag@1.0.0 deploy /Users/kuiper/autotag
> bash deploy.sh "final_v1.1.1"

/Users/kuiper/autotag
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.skysri.com/kuiper/autotag.git
 * [new tag]         final_v1.1.1 -> final_v1.1.1

远程仓库有了此tag,可以通知运维发布正式环境啦

学习Webhooks、Jenkins、docker、Jest等技术可实现更完善规范的CI/CD