我每天都在运行管道。该管道基本上将我的 origin/master 推送到几个远程分支。由于有许多远程分支(约 70 个),这可能需要大约 1.5 小时(包括测试阶段)。在此部署管道期间,可以推送到 origin/master。因此,我的测试可能不会针对更改运行,但仍会被推送到远程分支。有没有办法在部署管道运行时禁用对 origin/master 的任何更改?
我正在考虑在管道中引入一个新阶段来锁定分支,以及另一个阶段在部署完成后解锁分支。这是一个易于管理的解决方案吗?我应该去别处看看吗?如何才能实现这一目标?
一种方法是在 CI/CD 管道中创建一个部署标志,以防止在部署完成之前推送到 master。这可以使用 CI/CD 系统和 Git 挂钩都可以访问的文件来完成。
创建部署标志:在管道启动之前,设置部署标志,可以是部署正在进行的文件。
在推送期间检查标志:使用 Git 预推送挂钩在允许推送到 master 之前检查标志(文件)。
预推钩子中的示例:
# Check if deployment flag exists
if [ -f /path/to/deployment_in_progress ]; then
echo "Deployment is in progress. Please wait."
exit 1
fi
部署后删除标记:部署成功完成后,删除标记以允许对 master 进行进一步更改。