【问题标题】:GitLab new project setup webhookGitLab 新项目设置 webhook
【发布时间】:2026-02-16 06:20:02
【问题描述】:

我在服务器上设置了 GitLab。每次我在我的用户下创建一个新项目时,我都必须通过导航到 Project -> Settings -> Web Hooks -> Add Web Hook 手动添加一个 Web Hook

由于许多用户将在托管的 GitLab 上创建项目,因此很难为每个项目单独设置 Web Hook。

有没有办法在创建新项目时自动(默认)设置一个 Web Hook 作为新项目的一部分?

非常感谢任何帮助。

【问题讨论】:

    标签: project gitlab webhooks


    【解决方案1】:

    您可能会通过System Hooks API 找到一种自动执行此操作的方法。监听project_create钩子事件,然后调用project hook endpoint添加你想要的。

    一直是网络钩子!

    【讨论】:

    • @KunalAggarwal 你能举个例子吗?
    【解决方案2】:

    我找到了这个脚本,你需要什么:

    接收钩子并执行网络钩子的查询插入

    使用 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;
      }
    

    【讨论】: