如何设置子模块 Azure DevOps

Posted

技术标签:

【中文标题】如何设置子模块 Azure DevOps【英文标题】:How to setup submodules Azure DevOps 【发布时间】:2019-05-06 02:46:52 【问题描述】:

有人能解释一下 SubModule 在 azure devops 中的工作原理吗

MyDevOps 根文件夹

我有一个名为 MyCore.sln 的解决方案,其中包含 4-5 个项目

我有一个名为 MyMain.sln 的主解决方案,其中包含引用 MyCore.sln 项目的另外 4-5 个项目项目

这一切都在本地编译和工作,但在 azure devops 中构建时失败

进入powershell中的MyMain.sln文件夹,如下执行

执行如下 git submodule add https://myGroup@dev.azure.com/MyGroup/MyProjec/_git/MyCore

我现在可以在我的 Main Repo 中看到一个名为 MyCore 的文件夹,其中包含项目,我开始引用它们

我可以看到 .gitmodules 文件

但是,当我去构建管道时,它找不到引用的项目(属于 myCore 存储库)

我错过了显而易见的事情吗?

是否有关于如何在 azure devops 中设置子模块的全面说明?

我可以在任何地方想象这个吗?

【问题讨论】:

这取决于它们是什么类型的子模块,就像在您自己的机器上一样,任何用户凭据都可以轻而易举地获得,而在 Azure DevOps 上,一切都需要明确配置(一个示例blog.lextudio.com/… )。 【参考方案1】:

在 Get Sources 步骤的高级部分,您需要启用 Checkout Submodules 选项。

如果您使用的是 YAML 构建,则需要添加:

steps:
- checkout: self
  submodules: true

关于您的后续问题:

我应该把我的解决方案文件放在哪里

理想情况下,您应该有一个解决方案,因为您希望这些项目能够一起构建。有多种解决方案会很尴尬。如果您想共享一个解决方案中的组件,最好将第二个 repo 中的项目发布为 NuGet 包。

【讨论】:

您好,感谢您的快速回复。忘了提,但我做到了,但我的管道仍然失败。 感谢您的回复。我会尝试放一些日志(工作内容不确定)。日志说找不到引用的项目,这导致我提出一个问题。引用子模块的存储库是否应该包含两个存储库中的实际物理项目?还是应该只包含指向子模块 repo 的链接? 取决于解决方案文件。这就是告诉项目系统哪个项目存储在哪里。 每个.*proj文件和*.sln文件都应该存储在一个仓库中,并且只能存储在一个仓库中。 只是为了澄清我有 2 个 repos“MyCore Repo”和“MyMain Repo”(虚构名称)为了清楚起见而简化。我想将“MyCore Repo”作为子模块添加到我的主仓库,这样每个仓库都有自己的解决方案。对你最后的评论有点困惑。对不起 。感谢您有时间解释。

以上是关于如何设置子模块 Azure DevOps的主要内容,如果未能解决你的问题,请参考以下文章

simulink子模块封装如何初始化,为啥输入的数据不能传回到模块中?

azure devops vsts 扩展动态上下文菜单,子菜单未正确加载

在 Azure Devops 上运行 SQ 不会扫描所有文件/子文件夹/项目,尤其是 c# 文件

[getPersonalAccessTokenHandler在ES2015模块中使用azure-devops-node-api时不是函数

如何将 git 子模块与 Bitbucket 管道一起使用?

在 Docker 中运行 Azure DevOps 作业时出现“找不到具有给定版本的模块 Az.Accounts”错误