一千萬個為什麽

搜索

Jenkins是否支持使用“git @”(而不是“https”)URL來克隆git子模塊?



在嘗試使用Git嵌套子模塊檢出項目時,Jenkins遇到了一些問題。克隆子模塊時失敗並出現權限錯誤:

hudson.plugins.git.GitException: Command "git submodule update --init --recursive some/path" returned status code 128:
stdout: Submodule path 'some/path': checked out '34e663c11661b5153076c1d624ead25137df0783'

stderr: Cloning into 'some/other/path'...
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of '[email protected]:foo/foo.git' into submodule path 'some/other/path' failed
Failed to recurse into submodule path 'some/path'

在Jenkins作業中,啟用了檢出子模塊: 在高級子模塊行為下的Git插件中,啟用了選項遞歸更新子模塊使用來自父存儲庫的默認遠程數據庫的憑據。 所有git存儲庫都是私有Github存儲庫,但Jenkins用戶具有對它們的讀訪問權限。

通過 https:// ... 替換 git @ ... URL來實現它的唯一方法。例如,這裏會失敗

[submodule "foo"]
    path = some/path
    url = [email protected]:foo/foo.git

......但這會奏效

[submodule "foo"]
    path = some/path
    url = https://github.com/foo/foo.git

我不能排除我們的結果存在錯誤配置。但我仍然有一些通用的理解問題:

  • Jenkins Git插件是否支持 git @ 網址?或者,您是否需要使用 https:// ... URL?
  • 為什麽協議的選擇會對Jenkins產生影響?是因為 git @ 假設Jenkins的SSH密鑰被添加到Github存儲庫中了嗎?

轉載註明原文: Jenkins是否支持使用“git @”(而不是“https”)URL來克隆git子模塊?

一共有 2 個回答:

As a reference, it works for our system, submodules over SSH. We use deploy keys for this purpose. In Gitlab they can be found under Settings --> Repository --> Deploy Keys. The used key has to be marked as Enable in each used Git repository (main and submodules).

您使用的憑據是使用用戶名/密碼還是令牌?如果是這樣,那將適用於http克隆,但是對於git @將失敗,因為它使用ssh密鑰進行身份驗證。

你可以選擇另一個選項叫做“Checkout over SSH”來自 Github分支源插件。您需要向Jenkins添加一個新的“具有私鑰的SSH用戶名”憑據,您可以選擇上傳私鑰,使用文件或使用jenkins master上的文件(通常為〜/ .ssh/id_rsa) </代碼>)。需要將相應的公鑰添加到您的Github配置文件或repo設置中。