4

私はSlackにかなり慣れていません。チームを作成し、SVN リポジトリとの統合を追加しました。「post-commit」スクリプトをセットアップし、目的の Slack チャネルで通知を受け取りました。それが行く限り、すべてが良いです。

Slack チャンネルの通知をカスタマイズしたいのですが、うまくいきません。

コミット後のスクリプトは 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 チャネルで受け取る唯一のメッセージは次の形式です。

<rev number>:<author>-<log message>

日付が表示されず、変更されたファイルのリストが Slack メッセージに表示されない理由がわかりません。関連する svnlook コマンドをサーバー上で手動で実行すると、期待どおりの結果が得られます。スクリプトの関連する部分を次のように変更すると:

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

次に、手動でフックを呼び出します

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の特定のフィールドのみを必要とし、何らかのルールに従ってチャネル メッセージにフォーマットするという結論に達する必要があります。どのフィールドが受け入れ可能で、どのように書式設定を制御できるかについては、まったくわかりませんでした。たとえば、無効なペイロードに関するエラーが発生しないという事実は、日付とファイルのフィールド名が有効であることを示唆していますが、それらを Slack メッセージに表示するにはどうすればよいでしょうか?

4

2 に答える 2

1

カスタム メッセージを作成する場合は、API でIncoming Webhookを使用する必要があります。Subversion フックを使用していると思われます。メッセージのレイアウトが固定されている可能性があります。

textのキーに必要なテキストを投稿しますpayload。そうすれば、通常の Slack メッセージと同じようにフォーマットできます。

于 2016-03-17T09:39:49.610 に答える