问题描述
在处理发布 Sarbanes-Oxley (SOX) 应用程序构件时,对于 SNAPSHOTS 的版本管理,什么是最佳策略?我目前遵循语义化版本号(semver)模式 <major>.<minor>.<patch>
,我想知道是否有必要对版本策略更加精细,并在末尾附加类似于 git 哈希值这样的内容?例如,<major>.<minor>.<patch>-SNAPSHOT<githash>
。还是说我可以将 SNAPSHOTS 视为标准的快照版本,省略哈希值?
我认为采用后者的理由是,直到进入发布流程之前,SNAPSHOTS 并不会被切割为发布候选(rc)版本,因此在遵循成熟的 CI 模式时,持续将变更合并到主分支进行早期测试验证时,它们可能会被覆盖。
此外,在组织内通常只有在执行发布时才会打开和跟踪变更请求。
解决方案
请注意以下操作可能会因版本差异或特定需求而有所变化。
语义化版本号(SemVer)模式
建议遵循《Semantic Versioning 2.0.0 文档》中定义的原则。语义化版本号(SemVer)模式是一种用于版本号管理的标准方法,有助于清晰地表示软件版本的变化。
根据 SemVer 模式,版本号由三个部分组成:主版本号(major)、次版本号(minor)和修订版本号(patch)。此外,还可以添加预发布版本和构建元数据。在你的情况下,添加 git 哈希值作为构建元数据可能是个好主意,以便更精确地跟踪快照版本的变化。
示例版本号格式
以下是一个示例版本号格式,结合了 SemVer 模式和 git 哈希值:
<major>.<minor>.<patch>-SNAPSHOT<githash>
这个格式可以在版本号中包含主版本号、次版本号、修订版本号以及与 git 提交相关的哈希值。
考虑发布流程和变更请求
你提到 SNAPSHOTS 在进入发布流程之前可能会被覆盖。要处理这个问题,可以考虑以下方法:
-
在进入发布流程之前,确保及时备份和存档 SNAPSHOTS 的版本。这样即使它们被覆盖,你仍然可以回溯到之前的版本。
-
对于每个发布流程,始终记录变更请求和变更的详细信息。这样,即使 SNAPSHOTS 被覆盖,你也可以通过变更请求来跟踪每个版本的变化历史。
-
在 CI/CD 流程中,确保在将 SNAPSHOTS 推送到主分支之前进行适当的测试和验证。这有助于降低错误覆盖的风险。
示例版本管理脚本
以下是一个简单的示例脚本,可以结合语义化版本号和 git 哈希值来管理 SNAPSHOTS 版本:
#!/bin/bash
# 获取最近的 git 提交哈希值
githash=$(git rev-parse --short HEAD)
# 获取当前版本号
current_version=$(cat version.txt)
# 构建新的版本号
new_version=$(echo $current_version-SNAPSHOT$githash)
# 更新版本号文件
echo $new_version > version.txt
# 输出新版本号
echo "New version: $new_version"
在这个示例中,我们使用一个名为 version.txt
的文件来存储当前版本号。脚本首先获取最近的 git 提交哈希值,然后将其添加到当前版本号中作为 SNAPSHOTS 版本的一部分。
结论
对于 Sarbanes-Oxley (SOX) 应用程序的 SNAPSHOTS 版本管理,建议遵循语义化版本号(SemVer)模式,并考虑将 git 哈希值添加到版本号中以精确地标识快照版本的变化。此外,在发布流程中要注意及时备份和记录变更请求,以确保跟踪版本的变化历史和维护一致性。
注意:上述解决方案仅供参考,具体操作可能因环境和需求而有所变化,请根据实际情况进行调整。