原文链接:https://mp.weixin.qq.com/s/Bq78Hk3NTRV8nzvid5kvXg
- 自动化前:分别去每个仓库,填写相关参数,点击按钮。
- 自动化后:
分别去每个仓库,填写相关参数,点击按钮。
背景
不知道你们有没有遇到这样的情况,每次产品到了一个新的阶段,需要给代码创建新的分支,比如用于测试。
如果是给一个仓库创建一个分支也还好,但我们组相关的仓库多达五六个,所以我们需要给每一个仓库做这样一个简单又枯燥的重复操作(创建分支),作为程序员,我不允许有这样的情况发生。
于是,我借助持续集成工具Jenkins(方便他人使用)和Shell脚本语言,实现了上述过程的自动化。
使用指南
现在我只需要2步就可以轻松完成上面的过程:
1)进入Jenkins项目,填写2个构建参数:当前版本、上一版本。
⚠️:
- 我们的分支名是基于版本名的;
- 我们会基于上个版本的release分支创建当前版本的test分支。
2)点击Build按钮,等待结果。
这里我用自己的两个Github仓库做了试验,相关日志如下:
✌️:日志清晰展示了操作的过程和结果。
⚠️:我们要操作的仓库是在Configure > Source Code Management > Git > Repositories里配置的。如果需要新增仓库,只需在配置里添加,无需修改脚本。
脚本参考
V1.0的Shell脚本如下(里面有具体的说明):
# 主流程
main() {
#1
set +ex # e:异常不退出;x:不显示执行的命令
declare -a success_list # 记录成功的仓库
declare -a failure_list # 记录失败的仓库
echo "========================⚙️已完成准备工作⚙️========================\n"
#2
echo "========================🆒正式开始🆒========================"
remote_hosts=`git remote`
echo "🌿要操作的仓库有:\n${remote_hosts}\n"
# ️遍历管理的远端仓库们,仓库在Source Code Management > Git > Repositories里添加
# ⚠️可以通过Advanced > Name配置仓库别名,方便检查日志
for remote_host in ${remote_hosts}; do
CreateAndPushTestBranch ${remote_host}
done
#3
echo "========================🌲输出结果🌲========================"
echo "✅成功的有:${success_list[*]}"
echo "❌失败的有:${failure_list[*]}"
echo "\n\n"
}
# 创建并推送test分支
# 入参1:远端仓库别名
CreateAndPushTestBranch() {
echo "========================💼开始操作仓库:$1💼========================"
target_host=$1 # 记录仓库别名
echo "1. 创建分支 git checkout -b"
# current_version、last_version是构建参数,在General中定义
git checkout -b test/${current_version} ${target_host}/release/${last_version}
echo "2. 推送分支 git push"
git push ${target_host} HEAD
if [ $? -eq 0 ]; then
success_list+="${target_host} "
result="成功✅"
else
failure_list+="${target_host} "
result="失败❌"
fi
echo "3. 清理分支 git branch -D"
git -c advice.detachedHead=false checkout ${target_host}/release/${last_version} # -c advice.detachedHead=false,临时屏蔽detachedHead警告
git branch -D test/${current_version}
echo "\n👉${target_host}仓库创建并推送test/${current_version}分支:${result}\n"
}
main; exit