gpt4 book ai didi

git - 如何在不克隆 Jenkins 的情况下监听子模块的变化

转载 作者:太空狗 更新时间:2023-10-29 14:22:56 25 4
gpt4 key购买 nike

Jenkins 的头脑是超然的。每当子模块更新时,我都需要触发构建。但是,只有主项目被克隆。

两个问题

  • 我如何告诉 Jenkins 在子模块获取时触发构建更新了,但没有克隆子模块?我需要主要项目代码克隆,但 Jenkins 仍然需要仅在以下情况下开始构建子模块得到更新。所以假设子模块 A 得到更新(一个新的 commit ism adE),它应该触发一个构建,其中克隆了主要项目代码。子模块未被克隆。
  • Jenkins 克隆主项目后,如何将子模块的最新更改 pull 到子模块目录?当然,子模块目录将位于分离的头部。如何从最近的提交中提取子模块的最新更改(我不能使用 git submodule update,因为它不会提取子模块的最新更改)。

基本上,我想为每个子模块提供自己的 CI 环境进行测试,但每个子模块都不是一个独立的应用程序;他们取决于主要项目。因此,当子模块更新时,我们需要使用该子模块的最新代码更新主项目,而无需克隆子模块,必须提取子模块的代码。我不想在主项目上设置轮询。 Jenkins 应该每次都检查子模块以检查是否有新的提交

最佳答案

我会推荐一项 Jenkins 作业来监控父存储库。

默认情况下,如果您不启用Job Configuration -> Section Source Code Management, Git -> Advanced Button (under Branches to build) -> Recursively update submodules,它不会克隆子模块.
它只会监视父存储库的克隆,以定期获取最新提交,只需启用 Poll SCM,而不是通过设置指定计划:请参阅“Automatically triggering a Jenkins build on Git commit”。

如果一个子模块被更新,这意味着父仓库也会改变。
当子模块发生变化时,将创建并推送一个新的父 repo SHA1,记录 gitlink (special entry in the index)。该 gitlink 引用了子模块的新 SHA1。

这意味着,每次父 repo 更改时,jenkins 作业需要执行以下操作:

git diff --name-only --diff-filter=M ${revision} HEAD

如果 M(已修改)列表包含该作业的正确子模块,则(使用 Parameterized Trigger Plugin)触发正确的 CI 作业。

正确的 CI 作业(每个子模块一个)也将监视主父 repo,默认情况下也不会克隆子模块,正确的除外。
它的第一步应该遵循“git submodule update specific submodule only

git submodule update --init -- <specific relative path to submodule>

剩下的工作可以构建/测试特定的子模块。

关于git - 如何在不克隆 Jenkins 的情况下监听子模块的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33716905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com