Azure Devops 管道 - 默认情况下不更新子模块

Azure Devops pipelines - submodules not get updated by default

在 Azure devops 管道中,默认情况下不会更新子模块。

重现问题。

源代码

https://github.com/forvaidya/submodule.git
https://github.com/forvaidya/supermodule.git

更新不会发生,除非我在管道中有以下步骤。我希望默认情况下会发生这种情况,或者某些全局变量会启用/禁用它,默认情况下应该是 true (Refresh submodules)

- script: |
      git submodule deinit --all
      git submodule init
      git submodule update --remote
  displayName: 'Refresh Submodule'

在私有 Git 存储库中,上述步骤将不起作用,并且会出现 HTTP 错误

Azure Logs in Gist

您可以尝试检查管道的选项 Checkout submodules。请参阅以下步骤:

在您的 yaml 管道编辑页面上单击 3dots --> Triggers

转到 Yaml 选项卡-->获取源代码--> 检查签出子模块

然后当您 运行 您的管道时,Azure devops 管道将自动更新子模块。

如果由于子模块回购是私有的或在不同的组织中并且无法从您的 azure devop 管道访问的原因,上述步骤无法更新子模块。您可以尝试像下面这样配置子模块凭据。

1,设置一个管道秘密变量来保存子模块回购的凭证(eg.PAT)。

2,然后在脚本任务中的git命令上方添加git config submodule.SubmoduleRepo.url以更新子模块。

- script: |
      git submodule deinit --all
      git submodule init
      git config submodule.TestRepo.url https://$(PAT)@dev.azure.com/TestOrganization/TestProject/_git/TestRepo
      git submodule update --remote
    enabled: true

有关详细信息,请参阅 this thread

更新:

您还可以在 yaml 中启用 checkout 子模块,请参阅 here 了解更多信息。

- checkout: self
  submodules: true