我正在考虑在我的 GitLabCI 构建过程中为 C++ 应用程序实现语义发布。但是我担心潜在的比赛条件。
首先,如果两个构建同时运行,并且在最新提交中都具有相同的版本增量类型,那么如何防止它们被语义发布分配相同的版本号?语义发布是否会在分配版本号之前进行 git 标签刷新,以防它要分配的版本被偷走?
其次,我需要将版本号编译成二进制文件,所以我需要语义发布在流程开始时为我的流程提供一个可用的版本号,然后为整个构建过程(约 1 小时)保留该版本号,然后发布该版本在成功构建结束时。我可以看到语义发布支持一种试运行模式,该模式将给出建议的版本号,我的流程可以捕获该版本号。但是我看不到语义发布在构建过程中保留版本号的任何方式,因此另一个进程可以开始并采用相同的版本号,然后更早成功(无论出于何种原因),并欺骗第一个进程它声称的版本号。
那么考虑到这些情况,语义释放是否支持任何保留版本号的机制以避免这些竞争条件?