[英]How to push from Gitlab to Github with webhooks
如果我只能找到合適的手冊,我的Google-fu會讓我失望。
我有一個由我們的托管服務提供商安裝的Gitlab服務器Gitlab服務器有很多項目。 對於其中一些項目,我希望Gitlab每次從本地客戶端推送到Gitlab時自動推送到遠程存儲庫(在本例中為Github)。 像這樣:client - > gitlab - > github也應該推送任何標簽和分支。
AFAICT我有3個選擇:
我會很感激好指點,當我找到它時,我會總結並記錄一個解決方案。
編輯
我正在使用這個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作為后構建動作,它就像一個魅力,正是我想要的。
當然會工作的。
可能但很危險,因為GitLab shell會自動將符號鏈接掛鈎到存儲庫中,這些是權限檢查所必需的: https : //github.com/gitlabhq/gitlab-shell/tree/823aba63e444afa2f45477819770fec3cb5f0159/hooks所以我寧願遠離它。
Web掛鈎不適合直接使用:它們在某些事件上以固定格式發出HTTP請求,在您的情況下是推送,而不是Git協議請求。
當然,您可以編寫一個消耗鈎子,克隆和推送的服務器,但是服務(單推和無部署)或GitLab CI(已實現掛鈎管理)將是更好的解決方案。
如果有人實現它, 服務是最好的選擇:在源代碼樹中生存,只需一次推送,並且不需要額外的部署開銷。
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.