JBC*_*BCP 10 versioning github
当我的主分支启用了GitHub分支保护时,我正在寻找一个很好的流程来管理我的项目的版本号.
在理想的世界中,当您合并到"发布"分支时,持续集成服务器将运行其测试,然后自动增加项目的版本号并返回到SCM系统.
但是,通过分支保护,您无法在没有Pull请求的情况下提交到您的分支,因此您有一个catch-22,当CI服务器尝试更新版本号时,CI服务器无法将其推送到受保护的分支.
我可以想到一些解决方法,所有这些都是次优的:
我希望还有其他我没有想过的选择.
我们使用的是Javascript和npm,但我认为这个问题与语言无关,例如,Java和Maven肯定存在相同的问题.
小智 4
我曾经git tags使用 Jenkins 进行自动化版本控制。因此,每次作业运行时,都会占用最后一个作业tag并递增它。由于标签与提交不同,因此添加标签不会与分支保护冲突。
# get last tag
last=$(git describe --abbrev=0 --tags)
# increment and tag again
git tag $(($last + 1))
git push origin $(($last + 1))
Run Code Online (Sandbox Code Playgroud)
该脚本适用于简单的整数版本号,但如果您愿意,可以遵循 semver。这是一个 Android 项目,所以我添加了一个 gradle 函数,该函数会取出最后一个标签,并在构建时使用 if 作为版本号。
/*
* Gets the version name from the latest Git tag
*/
def getVersionName = { ->
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
return stdout.toString().trim()
}
Run Code Online (Sandbox Code Playgroud)
我相信您可以对 Javascript 使用类似的设置。