2013-12-03 59 views
4

我在服务器上安装GitLab。每次我在我的用户下创建一个新的项目,我必须通过导航到Project -> Settings -> Web Hooks -> Add Web HookGitLab新项目设置webhook

手动添加Web挂钩,因为许多用户将创建在托管GitLab项目将很难设置网络挂接为每个项目单独。

是否有一种方法,以便在创建新项目时,它会自动(默认情况下)将Web Hook设置为新项目的一部分?

任何帮助,非常感谢。

回答

7

你也许可以通过System Hooks API找到一种方法来自动执行此操作。收听project_create挂钩事件,然后拨打电话project hook endpoint添加您想要的。

它的webhooks一路下来!

+0

谢谢!这就是诀窍! –

+0

@KunalAggarwal你能提供一个例子吗? – Adrian

0

我发现这个剧本怎么所有你需要:

recive钩和执行网络挂接的查询插入

与运行PHP -S 0.0.0.0:8080

<?php 
    $allowed_host = "ip_of_your_gitlab_server"; 
    $sql_host = "localhost_or_ip_of_your_mysql_server"; 
    $sql_user = ".."; 
    $sql_password = ".."; 
    $database = "gitlabhq_production"; 

    if ($_SERVER['REMOTE_ADDR'] == $allowed_host) { // ofc you could increase security with some kind of API key or w/e 
     $sql = mysqli_connect($sql_host, $sql_user, $sql_password, $database); 
     if (mysqli_connect_errno()) { 
      exit; 
     } 
     $file = fopen("/tmp/sql_error", "a"); // you can use this as debug log too ;) 

     $input = json_decode(file_get_contents('php://input'), true); 
     $pid = $input['project_id']; 

     if ($input['event_name'] == "project_create") { 
      $url = 'url_of_your_project_hook'; 
      // this creates a project hook, specify it for your needs.. 
      $q = mysqli_query($sql, "INSERT INTO gitlabhq_production.web_hooks (url, project_id) VALUES('$url', '$pid')"); 

      if (!$q) fwrite($file, $sql->error); 
     } elseif ($input['event_name'] == "project_destroy") 
      $q = mysqli_query($sql, "DELETE FROM gitlabhq_production.web_hooks WHERE project_id='$pid'"); 

     mysqli_close($sql); 
    } else { 
     // redirect? 
     exit; 
    }