在VSTS中提交为master后提升版本

时间:2017-10-29 14:55:11

标签: continuous-integration azure-devops azure-pipelines azure-pipelines-build-task

我们的应用程序使用VSTS作为CI流,我们要求每次将代码合并回主服务器时补丁版本应增加一。

我们已经创建了一个shell脚本,它会破坏应用程序的版本并标记repo,但现在我们正在寻找流程中注入它的最佳位置。我们想到了以下几点:

  1. 主提交钩子构建 - 将此置于此处的问题是我们使用某些策略保护主分支(必须解析所有注释,项目必须构建等)。因此,构建代理运行脚本无权访问推送更改。

  2. 提取请求构建 - 此选项会将脚本集成到用于验证构建的构建作业中。这实际上有效,但是当更新被推送到分支时,这会触发无限构建循环,因为PR会自动重建分支。一般来说,这个选项似乎更脆弱。

  3. 我很乐意让选项1解决,但尽管所有尝试授予代理正确的角色,它仍然无法访问回购。我们收到以下错误:

    TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.

    有没有一种标准的方法可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

要通过CI构建更新文件版本并为新提交添加标记,您可以添加 PowerShell任务。详细步骤如下:

  1. 在构建定义中设置权限和配置

    首先转到版本控制选项卡,允许以下项目构建服务:

    • 分支机构创建:允许
    • 贡献:允许
    • 阅读:继承允许
    • 标记创建:继承允许

    然后在您的构建定义中,在变量选项卡中将变量system.prefergit添加为true,并在选项标签中启用允许脚本访问OAuth令牌

    更多详细信息,您可以参考Run Git commands in a script

  2. 添加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
    
  3. 注意:即使新版本和标记可以推送到远程仓库成功,PowerShell任务也可能失败。因此,您应该在使用自定义选项的PowerShell任务之后将任务设置为“即使先前任务失败也是如此。”

答案 1 :(得分:0)