13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

backlogからWebhookでGitHubにissueを登録

Last updated at Posted at 2018-03-07

やりたかったこと

backlogを課題管理に、Githubはエンジニアの内部タスク管理というように、並行利用しています。
backlogでお客さまから依頼が来た際に、手動で内部用のissueを立てていましたが、これを自動化してみました。

構成

図解するほどじゃないですが。
image.png

backlog側

プロジェクト設定->Webhookで、スクリプトのURLを指定
プロジェクトに対する管理者権限がないと、設定できないようです。

フックするスクリプト

飛んできたJSONを処理して、APIをcurlで叩く

案件やリポジトリによって変える場所

const BACKLOG_PROJECT   = "PRJNAME";
const GHE_TOKEN         = "xxxxxxxxxxxxx";
const GHE_ORGANIZATION  = "xx";
const GHE_REPO          = "repository name";
const GHE_URL           = 'https://xxxx.xxx';//GitHub EnterpriseのURLを指定

curlでGithubAPIを叩くところ
今のところ、新規登録時のみに動かしているため、APIのエンドポイントは
POST /repos/:owner/:repo/issues
https://developer.github.com/v3/issues/#create-an-issue

/*
 GHEのAPIを叩く
 */
 $data = [
     'title' => '🔗 backlog - '. $summary,
     'body' => 'from https://[xxxx].backlog.jp/view/' . $projectKey . '-' . $key_id . "\n\n" . $description,//backlogの本文プラスURL
     // 'assignees' => [ 'onuma' ]
 ];
 $header = [
     'Authorization: token '. GHE_TOKEN,  // tokenをヘッダに含める
 ];

//特定のプロジェクトだったら
if( $projectKey === BACKLOG_PROJECT){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, GHE_URL.'/api/v3/repos/'. GHE_ORGANIZATION. '/' . GHE_REPO . '/issues');//apiのエンドポイント
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); // post
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); // jsonデータを送信
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // リクエストにヘッダーを含める
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, true);

    $response = curl_exec($curl);

    $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
    $header = substr($response, 0, $header_size);
    $body = substr($response, $header_size);
    $result = json_decode($body, true);

    curl_close($curl);
}

GitHub側

認証のためのアクセストークンを生成

参考URL

以下を参考にさせていただきました。
https://gist.github.com/hissy/6a114d0d9a85f3338aed
https://qiita.com/re-24/items/bfdd533e5dacecd21a7a
https://developer.github.com/v3/issues/#create-an-issue

今後の展開

サーバが必要なのはちょっと今時っぽくないので、Google のCloud functionsで動かすように
書き換えたいと思ってます。

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?