zyan/gitlab-hooks
Composer 安装命令:
composer require zyan/gitlab-hooks
包简介
gitlab消息推送到企业微信群,钉钉群
README 文档
README
gitlab消息推送 转发给 企业微信与钉钉群机器人等
已支持平台
- 企业微信群机器人
- 钉钉群机器人
- 飞书群机器人
注:钉钉群请添加一个自定义机器人 关健词为: git
企业微信效果图
钉钉效果图
要求
- php >= 7.2
- Composer
安装
composer require zyan/gitlab-hooks -vvv
入门
以laravel为例,创建一个新的控制器 路由为 /test/gitlab
将url填到gitlab系统钩子
namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Zyan\GitLabHooks; class Test extends Controller { public function gitlab() { $gitlab = new GitlabHooks(); //快速发送给企业微信群机器人 $res = $gitlab->sendToWeWork('您的企业微信群机器人key'); //快速发送给钉钉群机器人 //$res = $gitlab->sendToDingTalk('您的钉钉群机器人access_token'); //快速发送给飞书群机器人 //$res = $gitlab->sendToFeiShu('您的飞书群机器人key'); return response()->json($res->getBody()->getContents()); } }
进阶
namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Zyan\GitLabHooks; class Test extends Controller { public function gitlab() { //定制多个仓库发送不同的群 $config =[ //把仓库1跟仓库2发送到群1 [ 'project' => ['仓库1','仓库2'], 'key' => '群1_key', 'is_at_all' => false, //是否@全体成员 可选 'at_mobiles' => [], //需要@成员的手机号 可选 'at_userids' => [], //需要@成员的userid 可选 ], //把仓库2跟仓库3发送到群2 [ 'project' => ['仓库3','仓库4'], 'key' => '群2_key', 'is_at_all' => false, //是否@全体成员 可选 'at_mobiles' => [], //需要@成员的手机号 可选 'at_userids' => [], //需要@成员的userid 可选 ], //注意: 飞书群机器人不支持@成员 //... ]; $gitlab = new GitlabHooks($config); //发送到企业微信群机器人 $res = $gitlab->app('wework')->send(); //发送到钉钉群机器人 //$res = $gitlab->app('dingtalk')->send(); //发送到飞书群机器人 //$res = $gitlab->app('feishu')->send(); //如果同时发送给多个群,则返顺多个送发结果 return response()->json($res); } }
过滤某些事件(白名单)
$gitlab = new GitlabHooks($config); $pushObjectKinds = [ 'push', 'merge_request', 'tag_push' ]; $gitlab->setPushObjectKinds($pushObjectKinds);
默认为
[
'push',
'merge_request',
'tag_push'
];
注意: 仅对
send方法有效
高级
自定义提供者
- 编写更多的群机器人接口,自己写一个类
<?php namespace Xxxx\Provider; use Zyan\Client\HttpClient; use Zyan\Contract\ProviderInterface; //这里需要继承 HttpClient 与 ProviderInterface 接口 class XxxBot extends HttpClient implements ProviderInterface { /** * 推送到某某机器人. * * @param string $key * @param string $text * @param bool $isAtAll * @param array $atMobiles * @param array $atUserIds * * @return string * * @author 读心印 <aa24615@qq.com> */ public function send(string $key, string $text, bool $isAtAll = false, array $atMobiles = [], array $atUserIds = []): \Psr\Http\Message\ResponseInterface { $data = [ "msgtype" => "markdown", "markdown" => [ "title" => "gitLab通知", "text" => $text, ], "at" => [ "atMobiles" => $atMobiles, "atUserIds" => $atUserIds, "isAtAll" => $isAtAll ] ]; $url = 'https://api.xxxx.com/robot/send?access_token='.$key; return $this->postJson($url, $data); } }
- 注册自定义提供者
use Zyan\GitLabHooks; use Zyan\Template\Markdown; //发送模板 use Xxx\XxxBot; //你自己写的类 //自定义提供者 仅限进阶模式,请配置您的发送信息 $config = [ [ 'project' => ['仓库1','仓库2'], 'key' => '群1_key', 'is_at_all' => false, //是否@全体成员 可选 'at_mobiles' => [], //需要@成员的手机号 可选 'at_userids' => [], //需要@成员的userid 可选 ] ]; $gitlab = new GitlabHooks($config); $gitlab->setPorovider([ 'xxxbot' => XxxBot::class ]); $res = $gitlab->app('xxxbot')->send();
自定义消息模板
钉钉与企业微信默认使用 Zyan\Template\Markdown 消息模板
由于飞书暂不支持 markdown 格式,所以飞书默认使用 Zyan\Template\Text 消息模板
您可以编写自定义模板 或 覆盖默认的模板
- 编写一个消息模板类
<?php namespace Zyan\Template; use Zyan\Body; use Zyan\Contract\TemplateInterface; //这里需要继承 Body 与 TemplateInterface 接口 class Text extends Body implements TemplateInterface { public function getMessage(): string { $objectKind = $this->getObjectKind(); switch ($objectKind) { case 'push': $branch = $this->getBranch(); break; case 'merge_request': $branch = $this->getSourceBranch() .'→'. $this->getTargetBranch(); break; default: $branch = ''; break; } $content = '# 代码推送通知 '; $content .= "\n--------------------------------------"; $content .= "\n> 开发 : " . $this->getUserName() . " "; $content .= "\n> 项目 : " . $this->getProjectName() . " "; $content .= "\n> 分支 : " . $branch . " "; $content .= "\n> 事件 : " . $objectKind . " "; $state = $this->getState(); if (!empty($state)) { $content .= "\n> 状态 : " . $state . " "; } if (!empty($message)) { $content .= "\n"; $content .= "\n " . $message ; } return $content; } }
- 注册自定义模板
use Zyan\GitLabHooks; use Zyan\Template\Text; //发送模板 //自定义提供者 仅限进阶模式,请配置您的发送信息 $config = [ [ 'project' => ['仓库1','仓库2'], 'key' => '群1_key', 'is_at_all' => false, //是否@全体成员 可选 'at_mobiles' => [], //需要@成员的手机号 可选 'at_userids' => [], //需要@成员的userid 可选 ] ]; $gitlab = new GitlabHooks($config); $gitlab->setTemplate([ 'xxxbot' => Text::class, //如果需要对其他机器人使用这个模板,请填写多个 'bot2' => Text::class //... ]); $res = $gitlab->app('xxxbot')->send();
参与贡献
- fork 当前库到你的名下
- 在你的本地修改完成审阅过后提交到你的仓库
- 提交 PR 并描述你的修改,等待合并
关于作者
- 作者博客 blog.php127.com
- PHP交流群(有问必答) 324098841
License
zyan/gitlab-hooks 适用场景与选型建议
zyan/gitlab-hooks 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 14.5k 次下载、GitHub Stars 达 1, 最近一次更新时间为 2021 年 10 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「gitlab」 「钉钉群」 「�」 「�业微信群」 「gitlab推送」 「gitlab消息」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 zyan/gitlab-hooks 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 zyan/gitlab-hooks 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 zyan/gitlab-hooks 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
PHP GitLab generic API client (not stick to any version)
A collection of monolog handlers using PSR-18 http client
Creates & updates issues on a GitLab repository from Symfony2 exceptions
Library to handle Webhooks from various services.
A PSR-15 middleware to manage Gitlab hooks.
In-app feedback and bug reporting for Laravel: a floating button that turns client reports with annotated screenshots into GitHub or GitLab issues.
统计信息
- 总下载量: 14.5k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 5
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-10-21

