我们的应用程序使用VSTS作为CI流,我们要求每次将代码合并回主服务器时补丁版本应增加一。
我们已经创建了一个shell脚本,它会破坏应用程序的版本并标记repo,但现在我们正在寻找流程中注入它的最佳位置。我们想到了以下几点:
主提交钩子构建 - 将此置于此处的问题是我们使用某些策略保护主分支(必须解析所有注释,项目必须构建等)。因此,构建代理运行脚本无权访问推送更改。
提取请求构建 - 此选项会将脚本集成到用于验证构建的构建作业中。这实际上有效,但是当更新被推送到分支时,这会触发无限构建循环,因为PR会自动重建分支。一般来说,这个选项似乎更脆弱。
我很乐意让选项1解决,但尽管所有尝试授予代理正确的角色,它仍然无法访问回购。我们收到以下错误:
TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.
有没有一种标准的方法可以解决这个问题?
答案 0 :(得分:1)
要通过CI构建更新文件版本并为新提交添加标记,您可以添加 PowerShell任务。详细步骤如下:
在构建定义中设置权限和配置
首先转到版本控制选项卡,允许以下项目构建服务:
然后在您的构建定义中,在变量选项卡中将变量system.prefergit
添加为true
,并在选项标签中启用允许脚本访问OAuth令牌。
更多详细信息,您可以参考Run Git commands in a script。
添加powershell脚本
git -c http.extraheader="AUTHORIZATION: bearer %SYSTEM_ACCESSTOKEN%" fetch
git checkout master
# Get the line of the file that contain the version
# split the line, and only get the version number major.minor.patch.
# check the version numbers (such as if patch less than 9) and increase the version
#replace the old version with new version in the file
git add .
git commit -m 'change the version as $newVersion'
git tag $newVersion
git push origin master --tags
注意:即使新版本和标记可以推送到远程仓库成功,PowerShell任务也可能失败。因此,您应该在使用自定义选项的PowerShell任务之后将任务设置为“即使先前任务失败也是如此。”
答案 1 :(得分:0)