首页 > 解决方案 > VSTS 分支策略可以应用于 GitHub 吗?

问题描述

VSTS 分支策略似乎是天赐之物,可以保护主源代码在分支未通过单元测试和/或目视检查的情况下接受分支合并。

该企业了解如何将其应用于只有组织成员才能访问的 VSTS 托管 Git 存储库。

我们正试图通过开源更多工作来推动这个组织共享其工作(这对我们来说将是第一次)。

我们不认为 VSTS 有能力向公众开放(例如,不确定我们是否准备好向公众开放我们的看板......至少在我们在流程上更加成熟并且能够透明之前)作为一个组,不会意外共享部署密钥等)。

我们认为使用 GitHub 面向公众会更合适(接受其他建议)。

但是,我们如何使用公共 Git 存储库,同时使用分支策略保护其主分支免受错误影响?或者我们会使用两个存储库(一个在 VSTS 中,一个在 GitHub 中,用户将合并提交到 GitHub,我们拉入 GitHub 更改……但是我们如何确保它们也在 brnaches 上?)。

如果问题含糊不清,我很抱歉……我们只是不知道是否有足够的经验,而且由于该组织的风险状况,一开始就不能轻易前进以获得经验。第 22 条军规。因此含糊不清。

PS:可能还有其他可用选项,但 VSTS 是给定的:它是关于使用 ALM 而不是集成多个服务的企业战略决策。即使它缺少面向公众的元素。

标签: azure-devopsazure-pipelines

解决方案


您不能直接将 VSTS git repo 分支策略应用于 GitHub 存储库。

由于 VSTS git repo 是私有 repo(而不是 github public repo),因此 VSTS git repo 有访问限制。

如果您希望任何人都可以阅读/贡献您的 git 存储库,您应该在 github 中托管您的 git 存储库。如果您还想使用 VSTS 功能(分支策略、构建和发布等),您可以在 github 和 VSTS 中托管您的 git repo,并通过两个 CI 构建定义自动在 github repo 和 VSTS git repo 之间同步。详细步骤如下:

1. 将 github repo 的更改同步到 VSTS git repo

创建 CI 构建定义 -> 选择您的 GitHub 存储库作为构建源 -> 空进程 -> 触发器选项卡 -> 启用持续集成 -> 包含所有带有*.

在此处输入图像描述

在此处输入图像描述

然后使用以下脚本添加 PowerShell 任务:

if ( $(git remote) -contains 'vsts' )
{
  git remote rm vsts
  echo 'remove remote vsts'
}

git remote add vsts https://Personal%20Access%20Token:{PAT}@{account}.visualstudio.com/{project}/_git/{repo}
$branch="$(Build.SourceBranch)".replace("refs/heads/","")
git checkout $branch
git push vsts $branch

保存构建定义。

如果有新的分支(如featureA)推送到 github repo 与 PR 合并featureAmaster分支中,则会触发构建featureA在 VSTS 上创建相应的分支。

2.在VSTS上创建相关的拉取请求

根据 github 的 PR 在 VSTS 上创建相关 PR。如上例,您应该在 VSTS 中创建一个 PR 以合并featureAmaster分支中。

3.通过PR验证验证PR

如果您想在合并拉取请求之前构建更改,您可以在master分支上添加如下验证策略,以便在 PR 创建或更新时立即触发验证构建。

在此处输入图像描述

4. 合并 PR 并将 VSTS git repo 的更改同步到 github repo

您需要创建另一个构建定义以自动将 VSTS git repo 的更改同步到 github repo:

创建 CI 构建定义 -> 选择 V​​STS git repo 作为源 -> 空进程 -> 触发器选项卡 -> 启用持续集成 -> 包含所有带有*.

在此处输入图像描述

然后使用以下脚本添加 PowerShell 任务并保存构建定义:

if ( $(git remote) -contains 'github' )
{
  git remote rm github
  echo 'remove remote github'
}


git remote add github https://username:password@github.com/username/reponame
$branch="$(Build.SourceBranch)".replace("refs/heads/","")
git checkout $branch
git push github $branch

现在在 VSTS git repo 中合并更改(例如合并featureAmaster分支)后,将自动触发构建。分支上的合并提交master将同步到 github repo。

顺便说一句:如果您只想在创建或更新拉取请求以合并到主分支时触发 VSTS 构建,您可以只使用在 github 中托管您的 git 存储库并在 VSTS 构建定义中启用拉取请求验证。

在此处输入图像描述


推荐阅读