Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP + GitHub + Azure Functions = ?

sakuragawa
February 28, 2017

PHP + GitHub + Azure Functions = ?

sakuragawa

February 28, 2017
Tweet

More Decks by sakuragawa

Other Decks in Programming

Transcript

  1. PHP + GitHub + Azure Functions = ?

    View full-size slide

  2. 自己紹介
    株式会社Fusic マネージャー
    技術開発部 基盤ユニット
    櫻川 幸三
    https://github.com/kozo
    https://github.com/fusic
    http://qiita.com/kozo
    http://qiita.com/organizations/fusic
    http://fusic-kiban.hatenablog.com/
    2

    View full-size slide

  3. 3
    PHP?GitHub?Azure?
    何をしたいの?

    View full-size slide

  4. 5
    で、どうやって作るの?

    View full-size slide

  5. 6
    実はものすごく簡単

    View full-size slide

  6. 作り方の流れ
    1. GitHubアプリケーションの設定
    2. OAuth認証
    3. WebHookの設定
    4. GitHubAPIの実行
    7

    View full-size slide

  7. GitHubアプリケーションの設定
    8
    [GitHub] - [Settings] - [OAuth applications] - [Register a new application]

    View full-size slide

  8. GitHubアプリケーションの設定
    9
    ※Client ID、Client Secretを控えておく

    View full-size slide

  9. 作り方の流れ
    1. GitHubアプリケーションの設定
    2. OAuth認証
    3. WebHookの設定
    4. GitHubAPIの実行
    10

    View full-size slide

  10. 2. OAuth認証1
    11
    https://github.com/login/oauth/authorize?
    client_id={Client ID}&scope=repo,admin:repo_hook
    - client_id : アプリケーションの作成をしたときに取得したもの
    - scope : 取得したい権限(複数ある場合はカンマで区切る)
    - repo : ソースコードへのread,write、ステータス、コメント等
    - admin:repo_hook : read,write,delete等のHook用
    ※scopeは最低限を設定するようにする

    View full-size slide

  11. 2. OAuth認証1
    12
    「Authorize application」ボタンをクリックすることで、
    アプリ作成したときに入力した「callback url」に戻ってくる。

    View full-size slide

  12. 2. OAuth認証2
    13
    http://example.com/oauths/callback?code={コード}
    - code : GitHubからcallback URLにコードが戻ってくる

    View full-size slide

  13. 2. OAuth認証3
    14
    https://github.com/login/oauth/access_token?
    code={コード}&
    client_id={Client ID}&
    client_secret={Client Secret}
    - code : GitHubからcallback URLに戻ってきたコード
    - client_id : GitHubのアプリ作成で控えておいたClinet ID
    - client_secret : GitHubのアプリ作成で控えておいたClient Secret
    URLを作成したら、file_get_contents等を利用してURLをたたくと、
    AccessTokenが取得できる。
    AccessTokenを利用して、GitHub APIを実行します。

    View full-size slide

  14. 15
    これで準備完了

    View full-size slide

  15. 3. Web Hookの設定
    16
    /repos/{:owner}/{:repo}/hooks
    $data = [
    'name' => 'web',
    "active" => true,
    "events" => [
    "push",
    "pull_request"
    ],
    "config" => [
    "url" => "https://gitfusic.azurewebsites.net/api/hook2",
    "content_type" => "json"
    ]
    ];
    APIを実行して、Hookの設定を行う。
    ※プルリク作成、pushしたタイミングでHookする等
    JSON化してPOSTする
    - events : hookしたい処理
    - url : hookしたときに実行されたいURL

    View full-size slide

  16. 3. GitHub APIの実行
    17
    /repos/{:owner}/{:repo}/statuses/{:sha}
    $data = [
    'state' => 'success',
    "target_url" => "https://example.com/build/status",
    "description" => "いいコード書いたね!",
    "context" => "LGTM!!"
    ];
    APIを実行することで、ステータスを切り替える。
    JSON化してPOSTする
    - status : “pending”,“success”,“error”,“failure”のいづれかを指定
    - sha : hookしたときにGitHubからPOSTで飛んでくる

    View full-size slide

  17. 3. その他API
    18
    /repos/{:owner}/{:repo}/issues/{:num}/comments
    - プルリクにコメントをつける
    /repos/{:owner}/{:repo}/issues/{:num}/assignees
    -プルリクのアサインを追加する
    /repos/{:owner}/{:repo}/labels
    /repos/{:owner}/{:repo}/issues/{:num}/labels
    - ラベルの作成・追加する

    View full-size slide

  18. 3. API注意点
    19
    - User-Agentにアプリケーションの名前を設定する
    - ヘッダーにAccessTokenを設定する

    View full-size slide

  19. 他にも色々できそう
    - リポジトリを作成したときに、自動でラベルを
    作成しておく。
    - プルリク作ったタイミングで、アサインやラベ
    ルを自動で登録しておく。
    - いいね!の数をランキングする
    20

    View full-size slide

  20. 21
    で、Azureはどうなん?

    View full-size slide

  21. 24
    URLを作る
    ファイルを修正 ファイルをアップ

    View full-size slide

  22. Azure Functions注意点
    - echo等標準出力はすべてログに出力される
    - レスポンスを返すには以下を利用する
    - file_put_contents(getenv('res'), json_encode($resList));
    - リクエストを受け取るには以下を利用する
    - $post = file_get_contents(getenv('req'));
    - $_POST等は利用できない
    25

    View full-size slide

  23. ご清聴ありがとうございました
    Fusicはテクノロジーが
    好きなエンジニアを募集しています
    https://fusic.github.io 26

    View full-size slide