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次下载
20KB
253 行
trigger.rs
英文(中式英语),简体中文
另一个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
可以替换为您喜欢的任何其他日志级别(包括error
、warn
、info
、debug
、trace
)。
配置
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
。
- 例如,GitLab文档中的
- 注意:GitLab的事件需要重新格式化,即将空格(whitespaces)替换为下划线(underscore),并确保它是小写的。
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
- 要使用 Docker 触发器,首先拉取镜像
docker pull kaymw/trigger
- 按照上述说明准备您的配置。
- 启动容器
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_logger 和 log 进行日志记录。
Trigger 使用 yaml-rust 解析配置。
Trigger 使用 hyper 创建 Web 服务器。
Trigger 使用 run_script 运行 shell 代码。
依赖关系
~12–21MB
~282K SLoC