php에서 JIRA의 Webhook을 받고 업데이트 알림을 Chatwork에 던지기
개요
JIRA의 갱신 통지가 Chatwork에 도착하면 인용이라도 할 수 있고 편리하다고 하는 의견이 있었으므로,
원래 JIRA의 기능으로서 존재하는 Webhook을 이용해 JIRA의 갱신 통지를 Chatwork에 던지는 구조를 만들었다.
필요한 것
처리 흐름
사실은 2→4로 가고 싶지만, 일부 정보가 hook로 받을 수 있는 파라미터에 포함되어 있지 않다(같은 생각이 든다) 때문에,
Key(티켓의 ID)로 티켓의 상세 정보를 다시 취득한다.
그렇기 때문에, 하는 것은 이하가 된다.
JIRA 관리자 계정으로 Webhook 설정하기
1. 관리자 계정으로 로그인하여 다음 페이지로 이동합니다.
htps : // 홉 x. 아 t ぁしあん. 네 t / p ぅ 긴 s / 세 rv ぇ t / ぇ b 호오 ks #
※XXXX 부분은 (아마) 라이센스마다 바뀐다.
2. 화면 오른쪽 상단에서 Webhook 만들기를 클릭합니다.
띠가 핑크색으로 되어 있는 것은 신경쓰지 말고 싶다.
3. 적절한 항목을 채우기
다양한 설정 항목이 있지만 우선 다음 내용으로 설정합니다.
webhook의 설정 자체는 이것으로 끝.
IP 주소 제한 제거
htps : // 이런 f ㅅ엔세. 아 t ぁしあん. 이 m / c ぉ d / 다타바세 앙 드 이 p ン ぉ r 마치 온 - 744721662. HTML
클라우드 판의 경우는 상기의 페이지에 써 있는 대로, 이하의 IP 어드레스로부터의 80번 액세스를 허가한다.
IP 주소
131.103.26.0/23
131.103.29.0/24
165.254.226.0/23
131.103.28.0/24
104.192.140.0/23
104.192.136.0/23
자신의 서버에서 가동하고 있는 경우는 그 서버의 IP를 허가하면 좋다고 생각된다.
클라우드 버전의 경우 Cloudfront에서 액세스하는 것 같습니다.
회사의 정책에 따라 원래 Webhook을 사용할 수 없을지도.
그 경우는 정기적으로 필터로 티켓을 크롤링할 정도밖에 생각하지 않는다.
Webhook 대상 php 구현
이번에는 AWS EC2에서 데비안 wheezy 인스턴스를 시작하여 apache와 php를 설치하고,
Default의 DocmentRoot/var/www에 jiraWebHook.php라는 파일을 만들었다.
JIRA 계정에 대해서는 적당히 권한을 붙인 계정을 준비해 둔다.
PHP는 드물게 쓰지 않기 때문에 이상한 일을 해도 놓치면 좋겠다.
jiraWebHook.php
<?php
$base_url='https://XXXX.atlassian.net';
$end_point=$base_url . '/rest/api/2/issue/' . $_GET["key"];
// Webhook用に作成したJIRAアカウント情報を入れる
$user_name="";
$password="";
// hookで受け取ったKeyに対応するチケットの詳細を
// JIRAのAPIを使って取得する。
$curl = curl_init();
// IDとパスを生で設定してるのはご愛嬌
$option = [
CURLOPT_URL => $end_point,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => $user_name . ":" . $password,
];
curl_setopt_array($curl,$option);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
// チケットのステータスに応じてChatworkの絵文字を付ける
switch ($result['fields']['status']['id']) {
// 解決済み
case 5:
$mark = '(F)';
break;
// クローズ
case 6:
$mark = '(coffee)';
break;
// オープン
default:
$mark = '(*)';
break;
}
// プロジェクトIDによってチャットワークの通知先を決定
switch($result['fields']['project']['id']) {
case 10100:
$room_id = "room_id1";
break;
case 10400:
$room_id = "room_id2";
break;
default:
$room_id = "";
break;
}
// 本文を適当に結合。[info]とかはchatwork用のタグ。
$mes_body = "[info][title](" . $mark . $result['fields']['status']['name'] . ")" . $result['key'] . "\:\ " . $result['fields']['summary'] . "(Reporter\:\ " . $result['fields']['reporter']['displayName'] . ")[/title]URL\:\ " . $base_url . "/browse/" . $result['key'] . "[/info]";
// 何故か()があると上手くChatworkへ通知が飛ばなかったためエスケープ。
// きっともっといいやり方がある。
$mes_body=str_replace("(", "\(", $mes_body);
$mes_body=str_replace("(", "\(", $mes_body);
$mes_body=str_replace(")", "\)", $mes_body);
$mes_body=str_replace(")", "\)", $mes_body);
// チャットワークへ投げる処理。
// チャットワークに限らず、適当なチャットサービスのAPIにメッセージボディとか指定して投げればOK。
// とりあえずダミーの関数を書いておいた。
send_chat_service($room_id, $mes_body);
Reference
이 문제에 관하여(php에서 JIRA의 Webhook을 받고 업데이트 알림을 Chatwork에 던지기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hsmt777/items/3cbe73461a68b862d097
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에는 AWS EC2에서 데비안 wheezy 인스턴스를 시작하여 apache와 php를 설치하고,
Default의 DocmentRoot/var/www에 jiraWebHook.php라는 파일을 만들었다.
JIRA 계정에 대해서는 적당히 권한을 붙인 계정을 준비해 둔다.
PHP는 드물게 쓰지 않기 때문에 이상한 일을 해도 놓치면 좋겠다.
jiraWebHook.php
<?php
$base_url='https://XXXX.atlassian.net';
$end_point=$base_url . '/rest/api/2/issue/' . $_GET["key"];
// Webhook用に作成したJIRAアカウント情報を入れる
$user_name="";
$password="";
// hookで受け取ったKeyに対応するチケットの詳細を
// JIRAのAPIを使って取得する。
$curl = curl_init();
// IDとパスを生で設定してるのはご愛嬌
$option = [
CURLOPT_URL => $end_point,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => $user_name . ":" . $password,
];
curl_setopt_array($curl,$option);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
// チケットのステータスに応じてChatworkの絵文字を付ける
switch ($result['fields']['status']['id']) {
// 解決済み
case 5:
$mark = '(F)';
break;
// クローズ
case 6:
$mark = '(coffee)';
break;
// オープン
default:
$mark = '(*)';
break;
}
// プロジェクトIDによってチャットワークの通知先を決定
switch($result['fields']['project']['id']) {
case 10100:
$room_id = "room_id1";
break;
case 10400:
$room_id = "room_id2";
break;
default:
$room_id = "";
break;
}
// 本文を適当に結合。[info]とかはchatwork用のタグ。
$mes_body = "[info][title](" . $mark . $result['fields']['status']['name'] . ")" . $result['key'] . "\:\ " . $result['fields']['summary'] . "(Reporter\:\ " . $result['fields']['reporter']['displayName'] . ")[/title]URL\:\ " . $base_url . "/browse/" . $result['key'] . "[/info]";
// 何故か()があると上手くChatworkへ通知が飛ばなかったためエスケープ。
// きっともっといいやり方がある。
$mes_body=str_replace("(", "\(", $mes_body);
$mes_body=str_replace("(", "\(", $mes_body);
$mes_body=str_replace(")", "\)", $mes_body);
$mes_body=str_replace(")", "\)", $mes_body);
// チャットワークへ投げる処理。
// チャットワークに限らず、適当なチャットサービスのAPIにメッセージボディとか指定して投げればOK。
// とりあえずダミーの関数を書いておいた。
send_chat_service($room_id, $mes_body);
Reference
이 문제에 관하여(php에서 JIRA의 Webhook을 받고 업데이트 알림을 Chatwork에 던지기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hsmt777/items/3cbe73461a68b862d097텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)