Continuous integration 如何在子模块更改时触发管道?

Continuous integration 如何在子模块更改时触发管道?,continuous-integration,gitlab,gitlab-ci,git-submodules,Continuous Integration,Gitlab,Gitlab Ci,Git Submodules,我有几个使用相同子模块的存储库。有没有办法将这些存储库设置为在子模块的来源发生更改时自动运行管道 例如,如果我在父repo上推送某个内容,我希望它自动将更改通知所有使用它作为子模块的存储库,说明已发生更改,并且需要运行它们的管道。GitLab中有一个名为多项目管道的功能,可以触发存储库之间的构建,但仅限高级版和银色版: 你可以用这个做点什么。您只需要记住,仅仅因为您将新的更改推送到子模块,使用此子模块的存储库就不会更新。他们仍然像以前一样在进行相同的提交 如果你真的想做,你当然可以做任何你想做

我有几个使用相同子模块的存储库。有没有办法将这些存储库设置为在子模块的来源发生更改时自动运行管道


例如,如果我在父repo上推送某个内容,我希望它自动将更改通知所有使用它作为子模块的存储库,说明已发生更改,并且需要运行它们的管道。

GitLab中有一个名为
多项目管道的功能,可以触发存储库之间的构建,但仅限高级版和银色版:

你可以用这个做点什么。您只需要记住,仅仅因为您将新的更改推送到子模块,使用此子模块的存储库就不会更新。他们仍然像以前一样在进行相同的提交

如果你真的想做,你当然可以做任何你想做的事。如果您有一台可以设置gitlab runner的服务器,您可以执行以下操作:

  • 创建一个新的GitLab用户,
    RoboGit
    ,该用户可以访问子模块和使用该子模块的存储库
  • 在服务器上安装并注册gitlab runner
  • 为子模块创建作业

然后,此作业可以手动签出依赖项目,找到子模块,将其更新为最新版本,然后提交这些更改。这些更改的作者将是
RoboGit
,这些更改将触发这些存储库中的构建作业。您将得到类似于您在问题中所描述的内容。

您可以每次触发管道,然后使用shell脚本确定它是否应该继续,我想我找到了类似的方法。我将创建一个VM,该VM将有一个gitlab runner连接到父repo。当父repo更改时,它将激活该gitlab运行程序,该运行程序将拥有我所需的所有repo及其子模块,并将在该VM上执行shell命令,该命令将更新这些repo中的子模块(运行程序将具有写入权限),该更新将触发这些repo的管道。谢谢正如你所描述的,我发现了你刚才在我读到你的答案之前所做的一样,令人惊讶。