Azure DevOps仓库在组织之间的同步

5
我们有两个Azure DevOps组织, 1.开发 2.客户端
我想知道是否可以以安全的方式将Azure DevOps存储库从一个组织(开发)同步到另一个组织(客户端)? 如果可能的话,最好的同步方式是什么?
注意:我们能够使用PAT和GIT Auth手动克隆Repo从一个组织到另一个组织,但当我们要更新或重新同步代码时会出现问题。我们必须手动重新导入repo(通过删除现有repo)才能进行更改。
我们需要以编程方式完成此操作并同步到另一个组织。
2个回答

6

Azure DevOps Repos 在组织之间的同步

据我所知,Azure DevOps Service 没有此功能。

这里有一些类似的用户反馈:同一组织内项目之间的同步自动将 Azure DevOps Repos 与 GitHub Repos 同步。通常一个组织负责一个产品,所以 Azure Devops 不建议跨组织操作。但如果您确实需要在您的场景中使用这种行为,可以尝试以下两个方向:

1.尝试免费的Martin Hinshelwood提供的Git 工具 for Azure Devops 扩展程序。以下是如何使用它的一些步骤:

  1. 在您的Development组织中安装它,它包含一个Publish Git Repo任务。

  2. 创建一个名为SyncRepos的新经典构建流水线,在其中添加Publish Git Repo任务。

    (Yaml流水线也可以很好地工作,但由于这是仅存在一个任务的管道,因此经典管道已足够)

  3. 配置任务。我们只需要配置git存储库的URL,因此非常容易。

    enter image description here

    假设另一个组织Client中同一repos的名称为ReposToSync,并且此repos位于ProjectA中。因此,在管道(在组织Development中)中应输入以下URL:

    请参见此处: https://anything:PAT@dev.azure.com/Client/ProjectA/_git/ReposToSync

    (您应该使用具有与repos相关权限的PAT。我使用了Full Access,以便轻松测试它,但如果您创建一个限定于repos权限的PAT,则应该更好。它更安全!)

  4. 现在设置触发器,启用CI并将所有分支添加到筛选器中。

    enter image description here

    Yaml管道在步骤4中更好,因为它支持通配符*触发所有分支。请参见此处

  5. 现在,在Development组织中,当我对masterqwe分支进行任何更改时,它将自动触发流水线运行。然后,任务将同步Development存储库中的更改与'Client'组织中的存储库。

    Development组织中的任何更改都将启动同步,如果您希望在'Client'中具有相同的行为,则还需要另一个类似的管道。如果要监视新创建的分支,则使用通配符的Yaml管道更好。

补充说明: 除了使用扩展中的任务之外,如果您熟悉git命令,也可以在CMD任务中使用这些命令。

2.欢迎在我们的User Voice论坛上发布新的功能请求。如果获得足够的投票,请求的优先级会提高,团队会认真考虑它。

希望上述所有内容对您有所帮助 :)

更新1:

无论是git命令还是扩展,如果我们想使其更加安全(避免在任务中直接使用PAT或其他机密信息),我们可以使用secrets来存储重要信息,如PAT。

1.请参见在变量组中创建secret变量,然后链接变量组,之后我们可以在任务中使用$(MyPat),并且它不会显示在日志中。

2.您还可以考虑使用Azure Key Vault。相关文档:从Azure Key Vault链接secrets


谢谢Lance,我们也尝试使用git命令和ssh密钥对进行测试,但安全团队也不建议这样做。我们只使用yaml管道。使用社区开发的扩展程序,这种方式安全吗? - praveen krish
由于这不是来自Microsoft的扩展,我不能保证这是一种安全的方式 :( 我稍后会添加一些编辑以回答一些安全建议。 - LoLance
@praveenkrish 你好朋友,这个问题有什么更新吗?如果你需要任何进一步的帮助,请随时告诉我原始问题 :) - LoLance
感谢Lance的建议,我们会进行测试并实施。 - praveen krish
太好了!如果您需要有关原始问题的进一步帮助,请随时告诉我。 - LoLance

0

今天我尝试了一种在博客文章中发现的方法,它完美地运行了(而且非常容易实现)。

步骤:

  1. 在您的开发组织中创建一个PAT(个人访问令牌)(我看到您已经有一个了,所以跳过此步骤)
  2. 进入开发组织中的目标存储库,单击“克隆”并复制URL
  3. 在“客户端”组织中使用您的PAT导入具有您复制的URL的存储库(这里也一样,我认为您已经完成了此步骤,所以跳过此步骤)
  4. 现在从“客户端”组织克隆该存储库到您的计算机上,并向您的“开发”组织中的存储库添加远程。如果您不了解远程,请参考此页面:管理远程存储库

完成后,您将能够推送和获取来自“开发”组织的存储库。

来源:Azure DevOps 在两个组织之间分叉存储库 - Michael Ghebremedin


这并没有解释如何实施持续的变更,也就是说,当有人推送到开发存储库时,如何将其传达到客户存储库,而不是删除和重新创建它? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接