จะติดตั้ง Gitlab ด้วย hook post-accept ได้อย่างไร


19

ฉันใช้ Gitlab บนเซิร์ฟเวอร์เครื่องหนึ่งและต้องการที่จะผลักดันที่เก็บ git ของฉันในการส่งข้อมูลของสาขาหลักไปยังเว็บเซิร์ฟเวอร์อื่น ดังนั้นเมื่อฉันกดเว็บไซต์เวอร์ชันใหม่เซิร์ฟเวอร์ที่ใช้งานจริงจะได้รับการอัปเดต ฉันรู้ว่ามันน่าจะเป็นไปได้ด้วย hooks ใน gitlab แต่ฉันไม่สามารถหาได้ว่า ลองใช้คู่มือต่อไปนี้http://danielmiessler.com/study/git/#websiteแต่ไม่ได้เขียนเพื่อใช้กับ gitlab ดังนั้นฉันจึงขาดชิ้นส่วน

ฉันต้องทำอย่างไรกับเว็บเซิร์ฟเวอร์ที่ใช้งานจริงและฉันต้องตั้งค่า hook URL เป็นอย่างไร


คุณสามารถใช้ hooks git ปกติหากคุณมีการเข้าถึงรูทไปยังเซิร์ฟเวอร์ git ให้ดูที่ hook post-commit ที่นี่: git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Doka

คุณสามารถลองตะขอที่กำหนดเอง Git
monsta

คำตอบ:


9

gitlab ใช้ hook post-receive ภายในแล้ว คุณสามารถคลุกคลีกับสคริปต์นั้นและเรียกใช้ hook ของคุณเช่นกัน แต่จากเอกสารดูเหมือนว่า "ทางการ" เป็นวิธีที่จะใช้ "web-hooks" เช่นให้ gitlab โทรหา webserver ของคุณใน post-receive และ webserver ของคุณจากนั้น ดึงที่เก็บ ฉันไม่ได้ลองทำเอง แต่เนื่องจากไม่มีใครตอบฉันคิดว่าฉันจะชี้คุณไปในทิศทางนั้น:

เพื่อเปิดใช้งาน web-hooks เข้าไปในหน้าหลักของโครงการของคุณและเลือก hooks จากด้านขวาบนด้านล่างเมนูหลัก ( http://yourgitlab.example.net/yourproject/hooks ) มีตัวอย่าง & เอกสารเชื่อมโยงจากหน้านั้น ( http://yourgitlab.example.net/help/web_hooks )

แก้ไข: //

เช้านี้ฉันลองแล้ว นี่คือตัวอย่างสคริปต์ PHP จะถือว่าคุณได้โคลน repo แล้วและเว็บเซิร์ฟเวอร์มีการตั้งค่าการอนุญาต / ssh คีย์ที่จำเป็นทั้งหมด

<?php
$mirrordir='/srv/http/gitlabhooktest/gitmirror';
$gitdir=$mirrordir."/.git";

$json= file_get_contents('php://input');
#error_log($json);
$jsarr=json_decode($json,true);
#error_log(print_r($jsarr,true));
$branch=$jsarr["ref"];
if($branch=='refs/heads/master'){
 $cmd="git --work-tree=$mirrordir --git-dir=$gitdir pull";
 #error_log($cmd);
 exec($cmd);
} 

ใช่ฉันรู้ว่าจะหาหน้า hooks ได้ที่ไหน ฉันไม่ทราบว่าไฟล์ควรมีลักษณะอย่างไร gitlab ควรโพสต์ถึง
อุโมงค์

1
ดูคำตอบที่แก้ไขแล้วฉันได้เพิ่มสคริปต์ตัวอย่าง อาจไม่สมบูรณ์แบบ แต่อย่างน้อยการทดสอบอย่างรวดเร็วดูเหมือนว่าใช้ได้
Gryphius

5

มีการเพิ่มตะขอแบบกำหนดเองเมื่อเร็ว ๆ นี้ (เนื่องจาก Gryphius กล่าวว่ามีการใช้ hooks ปกติภายใน): https://github.com/gitlabhq/gitlabhq/globabh/667c0a909bde1cf71f21d8ec9768e98b1c489030/doc/hooks/custom_hooks.md

คุณเพียงแค่สร้างcustom_hooksไดเรกทอรีภายใน Git repo ของคุณแล้วใส่ hooks ลงไปจากนั้น GitLab จะทำให้แน่ใจว่ามันจะทำงาน


4

Gitlab ไม่ได้มีการโพสต์ได้รับเบ็ดตั้งแต่นักพัฒนาแทนที่ gitolite กับ gitlab

ดังนั้นคุณสามารถ:

sudo -u git bash
touch /home/git/repositories/<repository name>.git/hooks/post-receive
vim /home/git/repositories/<repository name>.git/hooks/post-receive

ตรวจสอบให้แน่ใจว่าผู้ใช้ git มีสิทธิ์ทั้งหมดที่จำเป็นในการเรียกใช้คำสั่งในไฟล์นี้


hookมีโฟลเดอร์อยู่แล้ว:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.