#gitlab #webhook #github-webhook #github #ci

bin+lib trigger

另一个GitHub/GitLab Webhook监听器

10个版本 (4个稳定版)

1.1.2 2020年7月17日
1.1.1 2019年4月25日
0.4.2 2019年4月22日
0.3.0 2019年3月17日
0.1.0 2019年1月1日

#462 in HTTP服务器

每月26次下载

MIT许可协议

20KB
253

trigger.rs

license Travis-CI

英文(中式英语)简体中文

另一个GitHub/GitLab Webhook监听器,使用从GitHub/GitLab接收的事件运行shell命令。

使用rifling构建。

安装

  • 使用cargo

    cargo install trigger
    
  • GitHub发行版下载二进制文件(目前仅限Linux),并将其移动到您的PATH

用法

命令行帮助

trigger --help

启动程序

trigger --config "<path to config file>"

或者,启动trigger并启用调试日志

TRIGGER_LOG=debug trigger --config "<path to config file>"

debug可以替换为您喜欢的任何其他日志级别(包括errorwarninfodebugtrace)。

配置

Trigger的配置为YAML格式。

示例

# Sample config

settings:
  host: 0.0.0.0:4567    # Host address trigger is going to listen
  secret: "secret"      # Secret used to authenticate payload (Optional)
  print_commands: false # Print command or not (Optional, default: false)
  capture_output: false # Capture output of the commands (Optional, default: false)
  exit_on_error: true   # Exit on error in commands (Optional, default: false)
  kotomei: true         # Warn you about letting @kotomei study for his exam or not (Optional, default: true)

events:
  common: |
    set -e;
    PAYLOAD='{payload}';
    function get_prop {
      echo $(echo ${PAYLOAD} | jq $1 | tr -d '"');
    }
    SENDER=$(get_prop '.sender.login');
    SENDER_ID=$(get_prop '.sender.id');
  all: echo "This command will be executed in all the events, the current event is {event}";
  push: echo "User \"${SENDER}\" with ID \"${SENDER_ID}\" pushed to this repository";
  watch: |
    ACTION=$(get_prop '.action');
    echo "GitHub user \"${SENDER}\" with ID \"${SENDER_ID}\" ${ACTION} watching this repository";
  else: echo "\"${SENDER}\" with ID \"${SENDER_ID}\" sent {event} event";
  • 密钥不是必需的,但强烈推荐。
  • events.common中的命令将在实际事件之前执行。
  • events.all中的命令将在收到任何有效请求后执行。
  • 所有可用的事件列表请参阅此处(GitHub)此处(GitLab)
    • 注意:GitLab的事件需要重新格式化,即将空格(whitespaces)替换为下划线(underscore),并确保它是小写的。
      • 例如,GitLab文档中的Push Hook在trigger的配置中将变为push_hook
  • events.else中的命令将在没有定义匹配事件时执行。
  • 在命令中,占位符 {payload} 将被替换为未解析的负载。
    • 请使用单引号将其包裹起来。
    • 如果需要,可以使用 jq 进行解析。
  • 其他占位符(如果未包含在交付中,它们将被替换为 unknown
    • {id} 将被替换为事件的 UUID(仅 GitHub,GitLab 不提供此功能)。
    • {event} 将被替换为事件的类型。
    • {signature} 将被替换为负载的签名。
    • {request_body} 将被替换为请求的正文 ()。

建议与反向代理一起使用,例如 nginx

location /hook {
    proxy_pass http://0.0.0.0:9999/;
}

Docker

  1. 要使用 Docker 触发器,首先拉取镜像
    docker pull kaymw/trigger
    
  2. 按照上述说明准备您的配置。
  3. 启动容器
    docker run --volume $PWD:/work trigger trigger --config trigger.yaml
    

注意:在此 Docker 镜像中,触发器的默认工作目录是 /work,默认端口是 4567

感谢:@musnow

其他片段

Systemd 单元 (trigger.service)

[Unit]
Description=Yet another GitHub Webhook listener
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/path/to/your/config/
ExecStart=/path/to/trigger /path/to/your/config/file.yaml
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

#  sy
# ste
# md

许可证和致谢

本软件根据 MIT 许可证条款分发,有关详细信息,请参阅 LICENSE 文件。

Trigger 使用 pretty_env_loggerlog 进行日志记录。
Trigger 使用 yaml-rust 解析配置。
Trigger 使用 hyper 创建 Web 服务器。
Trigger 使用 run_script 运行 shell 代码。

依赖关系

~12–21MB
~282K SLoC