簡體   English   中英

如何使用webhooks從Gitlab推送到Github

[英]How to push from Gitlab to Github with webhooks

如果我只能找到合適的手冊,我的Google-fu會讓我失望。

我有一個由我們的托管服務提供商安裝的Gitlab服務器Gitlab服務器有很多項目。 對於其中一些項目,我希望Gitlab每次從本地客戶端推送到Gitlab時自動推送到遠程存儲庫(在本例中為Github)。 像這樣:client - > gitlab - > github也應該推送任何標簽和分支。

AFAICT我有3個選擇:

  1. 使用兩個遙控器配置本地客戶端,並同時推送到Gitlab和Github。 我想避免這種情況,因為開發人員
  2. 在Gitlab服務器的存儲庫中添加一個git post-receive鈎子。 這將是最靈活的(我有足夠的Linux經驗將shell腳本編寫為git hooks)並且我已經找到了關於如何執行此操作的文檔,但我也想避免這種情況,因為托管服務提供商需要給我shell訪問權限。
  3. 我在Gitlab中使用webhooks。 我不熟悉webhooks的基礎知識,我無法找到可理解的文檔,甚至是一個簡單的分步示例。 這是我發現的Gitlab文檔,我不明白它: http ://demo.gitlab.com/help/web_hooks/web_hooks

我會很感激好指點,當我找到它時,我會總結並記錄一個解決方案。

編輯

我正在使用這個Ruby代碼進行Web掛鈎:

class PewPewPew < Sinatra::Base
  post '/pew' do
    push = JSON.parse(request.body.read)
    puts "I got some JSON: #{push.inspect}"
  end
end

下一步:了解如何告訴gitlab服務器必須推送存儲庫。 我將回到GitLab API。

編輯

我想我有個主意。 在我運行webhook的服務器上,我從GitLab拉出然后我推送到Github。 在推送到GitHub之前,我甚至可以做一些“魔術”(運行測試,構建jar,部署到Artifactory,......)。 事實上,如果Jenkins能夠在成功構建之后能夠推送到遠程存儲庫,那將是很棒的,然后我不需要編寫自己的webhook,因為我非常確定Jenkins已經為Gitlab提供了一個webhook,無論是本機還是通過插件。 但我不知道。 然而。

編輯

我在詹金斯解決了這個問題。 您可以在Jenkins作業中設置多個git遠程。 我使用Git Publisher作為后構建動作,它就像一個魅力,正是我想要的。

  1. 當然會工作的。

  2. 可能但很危險,因為GitLab shell會自動將符號鏈接掛鈎到存儲庫中,這些是權限檢查所必需的: https//github.com/gitlabhq/gitlab-shell/tree/823aba63e444afa2f45477819770fec3cb5f0159/hooks所以我寧願遠離它。

  3. Web掛鈎不適合直接使用:它們在某些事件上以固定格式發出HTTP請求,在您的情況下是推送,而不是Git協議請求。

    當然,您可以編寫一個消耗鈎子,克隆和推送的服務器,但是服務(單推和無部署)或GitLab CI(已實現掛鈎管理)將是更好的解決方案。

  4. 如果有人實現它, 服務是最好的選擇:在源代碼樹中生存,只需一次推送,並且不需要額外的部署開銷。

  5. GitLab CI或其他像Jenkins這樣的CI是目前可用的最佳選擇。 它們基本上已經為webhooks實現了服務器,它會自動為你克隆:你所要做的就是從它們中推送。

您想要Google的關鍵字是“gitlab mirror github”。 這導致我:例如Gitlab存儲庫鏡像 今天似乎沒有完美,簡單的解決方案。

這也已經在功能請求論壇上提出: http//feedback.gitlab.com/forums/176466-general/suggestions/4614663-automatic-push-to-remote-mirror-repo-after-push-to總是檢查那里;)去和upvote請求。

現在的關鍵難點是如何存儲推送憑證。

我在詹金斯解決了這個問題。 您可以在Jenkins作業中設置多個git遠程。 我使用Git Publisher作為后構建動作,它就像一個魅力,正是我想要的。

我添加了在成功構建“”之后運行的“-publisher”作業。 我本可以在一份工作中完成它,但我決定把它分開。 構建作業由GitLab中的Web鈎子觸發; 發布者作業正在使用BuildResultTrigger插件中的@daily計划。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM