git - 有什么办法可以解决克隆 git 子模块的问题?

标签 git hudson jenkins

我从事一个开源项目。我们将生产配置文件保存在一个单独的 git 存储库中,仅供我们团队的少数成员使用。这个 repo 是我们更大项目的一个子模块,它允许人们在不看到我们的 prod creds 的情况下获取和编译该项目。

问题是 Hudson 试图 pull 下子模块,而 Hudson 用户没有对该 repo 的 pull 权限。

hudson.plugins.git.GitException: Error performing command: git submodule update
Command "git submodule update" returned status code 1: Initialized empty Git repository in <http://athenadev.fracturedatlas.org:5904/job/ATHENA/ws/assembly/.git/>
ERROR: Permission to fracturedatlas/assembly.git denied to fracturedatlas/artful.ly.
fatal: The remote end hung up unexpectedly
Clone of 'git@github.com:fracturedatlas/assembly.git' into submodule path 'assembly' failed

       at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:691)

是否有一个很好的“git”方法来解决这个问题,或者我们是否需要重新考虑我们的策略,以使生产凭证远离作恶者?

最佳答案

如果那个 secret 仓库是一个更大的仓库的子模块,那么...... Hudson 应该尝试从那个更大的仓库中提取 ;)

它应该从与第一个相同的“另一个更大的 repo”中提取,但是因为该子模块的存在。

在以下情况下很容易做到:

  • 父仓库是空的,只声明子模块(一个用于“大项目”,一个用于“ secret 仓库”)
  • “更大的项目”包含一个指向 secret 仓库的符号链接(symbolic link)(这样,您不必在更大的项目中直接声明 secret 仓库子模块,您可以在准空父仓库中声明它)<

当这样的父存储库存在时(内容仅限于两个子模块),很容易复制这样的父存储库以获得仅包含一个子模块的子模块(“更大的项目”),没有其他(“ secret 仓库”)。
这将是 Hudson 能够从中提取的第二个父 repo 协议(protocol)。

关于git - 有什么办法可以解决克隆 git 子模块的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770861/

相关文章:

git - 如何从 git 中已推送的分支中删除所有提交?

git - 仅在代码存储库已更新时构建 Docker 镜像 (Jenkins)

java - 即使测试失败,如何始终写入 Jenkins Groovy 管道中的 .csv 数据文件

git - Visual Studio 2015 GIT 是否使用 3 路 merge ?

git - 如何在git中找到最后 checkout 的分支

windows - Git - 如何在 Windows 上使用 .netrc 文件保存用户和密码

java - 当任何 JUnit 测试失败时,如何让构建失败?

c# - 如何在 Hudson 中自动化 Silverlight 单元测试?

build - 在下游项目之前触发上游项目构建

maven - 如何从 CloudBees 部署到私有(private) Maven 存储库?