gpt4 book ai didi

perl - 从 SVN 集成自定义 Slack 中显示的消息

转载 作者:行者123 更新时间:2023-12-01 04:57:26 25 4
gpt4 key购买 nike

我对 Slack 很陌生.我创建了一个团队,并添加了与我们的 SVN 存储库的集成。我已经设置了一个“提交后”脚本,并且在预期的 Slack channel 中收到了通知。就目前而言,一切都很好。

我想自定义松弛 channel 中的通知,但我失败了。

提交后脚本是基于 Perl 的;有许多模板可用。我使用了一个并添加了一行来包含因此更改的文件:

my $files = `/usr/bin/svnlook changed -r $ARGV[1] $ARGV[0]`;
my $date = `/usr/bin/svnlook date -r $ARGV[1] $ARGV[0]`;
my $log = `/usr/bin/svnlook log -r $ARGV[1] $ARGV[0]`;
my $who = `/usr/bin/svnlook author -r $ARGV[1] $ARGV[0]`;
chomp $who;

my $payload = {
'revision' => $ARGV[1],
'date' => $date,
'author' => $who,
'log' => $log,
'files' => $files,
};

my $ua = LWP::UserAgent->new;
$ua->timeout(15);

my $req = POST( "https://${opt_domain}/services/hooks/subversion?token=${opt_token}", ['payload' => encode_json($payload)] );

我在 Slack channel 中收到的唯一消息是以下形式:
<rev number>:<author>-<log message>

我不知道为什么我没有得到日期,并且更改的文件列表出现在 Slack 消息中。相关的 svnlook 命令在服务器上手动运行时会产生预期的结果。如果我将脚本的相关位更改为:
my $payload = {
'wibble' => $ARGV[1],
'date' => $date,
'author' => $who,
'log' => $log,
'files' => $files,
};

然后手动调用钩子(Hook)
post-commit /var/svn/repo 5966

(例如)我得到的输出包括:
payload=%7B%22wibble%22%3A%225966%22

(如我所料/希望的那样),但后来
Response:
HTTP/1.1 500 Server Error
Connection: close
...
X-Cache: Error from cloudfront
X-Frame-Options: SAMEORIGIN

invalid_payload

我天真地期望有效负载指定消息,因此您可以制作如下消息:
revision: 5696
date: 2016/03/14 12:00:00
author: ...
log: <log text>
files: myfile.c, myfile.h

在上面的例子中,我想知道我是否会得到
wibble: 5696

因此,我必须得出结论,Slack 端的某些内容只需要收到的 JSON 中的某些字段。然后根据某种规则将它们格式化为 channel 消息。我发现不知道哪些字段是可接受的,以及如何对格式进行一些控制。例如,我没有收到有关无效负载的错误的事实表明日期和文件字段名称是有效的,但是如何让它们出现在 Slack 消息中?

最佳答案

如果您想创建自定义消息,您应该使用 Incoming Webhooks在 API 中。我怀疑您正在使用 Subversion Hook ,并且它可能具有固定的消息布局。

text 中发布您想要的文字键入payload .这样您就可以像处理普通的 Slack 消息一样对其进行格式化。

关于perl - 从 SVN 集成自定义 Slack 中显示的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36037472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com