Bagaimana cara mengatur Gitlab dengan kait pasca-terima?

19

Saya menggunakan Gitlab di satu server dan ingin mendorong repositori git saya di commit dari cabang master ke server web lain. Jadi ketika saya mendorong versi baru situs web, server produksi akan diperbarui. Saya tahu ini harus dimungkinkan dengan kait di dalam gitlab tetapi saya tidak dapat menemukan persisnya. Mencoba panduan berikut http://danielmiessler.com/study/git/#website tetapi tidak ditulis untuk digunakan dengan gitlab sehingga saya kehilangan bagian.

Apa yang harus saya lakukan pada server web produksi dan apa yang harus saya setel dengan URL kait?

Tristan
sumber
Anda dapat menggunakan kait git biasa, jika Anda memiliki akses root ke server git, lihat kait pasca-komitmen di sini: git-scm.com/book/en/v2/Customizing-Git-Git-Git-Hooks
Doka
Anda dapat mencoba kait Custom Git .
monsta

Jawaban:

9

gitlab sudah menggunakan kait pasca-terima secara internal. Anda bisa bermain-main dengan skrip itu dan memanggil hook Anda juga, tetapi dari dokumen sepertinya cara "resmi" adalah dengan menggunakan "web-hooks", yaitu membiarkan gitlab memanggil server web Anda pada post-accept dan kemudian server web Anda kemudian menarik repositori. Saya belum mencoba ini sendiri, tetapi karena tidak ada yang menjawab sejauh ini saya pikir saya akan mengarahkan Anda ke arah itu:

untuk mengaktifkan kait web masuk ke halaman utama proyek Anda dan pilih kait dari kanan atas, di bawah menu utama. ( http://yourgitlab.example.net/yourproject/hooks ) Anda. ada contoh & dokumen yang ditautkan dari halaman itu ( http://yourgitlab.example.net/help/web_hooks ).

edit: //

Saya mencobanya pagi ini. Berikut ini contoh skrip php. Ini mengasumsikan Anda telah mengkloning repo dan server web memiliki semua kunci izin / ssh yang diperlukan.

<?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);
} 
Gryphius
sumber
ya saya tahu di mana menemukan halaman kait. Saya hanya tidak tahu bagaimana seharusnya file tersebut terlihat seperti gitlab.
Tristan
1
lihat jawaban yang diedit, saya menambahkan contoh skrip. mungkin tidak sempurna tetapi setidaknya tes cepat tampaknya berhasil
Gryphius
4

Gitlab tidak memiliki kait pasca-terima karena pengembang mengganti gitolite dengan gitlab-shell .

Karena itu Anda dapat:

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

Pastikan pengguna git memiliki semua izin yang diperlukan untuk menjalankan perintah dalam file ini

Nicolay77
sumber
hookfolder sudah ada:hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/
MariuszS