我想知道是否可以以安全的方式将Azure DevOps存储库从一个组织(开发)同步到另一个组织(客户端)? 如果可能的话,最好的同步方式是什么?
注意:我们能够使用PAT和GIT Auth手动克隆Repo从一个组织到另一个组织,但当我们要更新或重新同步代码时会出现问题。我们必须手动重新导入repo(通过删除现有repo)才能进行更改。
我们需要以编程方式完成此操作并同步到另一个组织。
Azure DevOps Repos 在组织之间的同步
据我所知,Azure DevOps Service 没有此功能。
这里有一些类似的用户反馈:同一组织内项目之间的同步 和 自动将 Azure DevOps Repos 与 GitHub Repos 同步。通常一个组织负责一个产品,所以 Azure Devops 不建议跨组织操作。但如果您确实需要在您的场景中使用这种行为,可以尝试以下两个方向:
1.尝试免费的Martin Hinshelwood提供的Git 工具 for Azure Devops 扩展程序。以下是如何使用它的一些步骤:
在您的Development
组织中安装它,它包含一个Publish Git Repo
任务。
创建一个名为SyncRepos
的新经典构建流水线,在其中添加Publish Git Repo
任务。
(Yaml流水线也可以很好地工作,但由于这是仅存在一个任务的管道,因此经典管道已足够)
配置任务。我们只需要配置git存储库的URL,因此非常容易。
假设另一个组织Client
中同一repos的名称为ReposToSync
,并且此repos位于ProjectA中。因此,在管道(在组织Development
中)中应输入以下URL:
请参见此处: https://anything:PAT@dev.azure.com/Client/ProjectA/_git/ReposToSync
。
(您应该使用具有与repos相关权限的PAT。我使用了Full Access
,以便轻松测试它,但如果您创建一个限定于repos权限的PAT,则应该更好。它更安全!)
现在设置触发器,启用CI并将所有分支添加到筛选器中。
Yaml管道在步骤4中更好,因为它支持通配符*
触发所有分支。请参见此处。
现在,在Development
组织中,当我对master
和qwe
分支进行任何更改时,它将自动触发流水线运行。然后,任务将同步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。
今天我尝试了一种在博客文章中发现的方法,它完美地运行了(而且非常容易实现)。
步骤:
完成后,您将能够推送和获取来自“开发”组织的存储库。