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

もっと快適に! デプロイフロー改善への道!

TOC
December 08, 2022

もっと快適に! デプロイフロー改善への道!

2022/12/06開催の「3社合同PHP勉強会!CTOが語る事業とPHPの向き合い方【BASE/Cake.jp/コネヒト】」における LT 資料です。

https://connehito.connpass.com/event/266703/

TOC

December 08, 2022
Tweet

More Decks by TOC

Other Decks in Technology

Transcript

  1. もっと快適に!
    デプロイフロー改善への道!
    2022/12/06
    TOC

    View Slide

  2. 自己紹介
    - TOC(とっしー)
    - コネヒト株式会社
    - バックエンドエンジニア
    - 主にPHP
    - 趣味でGo
    - (宣伝)Let's Go Talkもやってます
    - Twitter: @toc_toc05

    View Slide

  3. 今日話すこと
    ● Github Actions を用いてデプロイフローをちょっと便利にした話
    ○ アイデアとして使えそうなものがあれば嬉しい
    ○ デプロイフローで利用できそうな actions も紹介
    話さないこと󰢃
    ● Github Actions の仕組み、書き方
    ● PHP

    View Slide

  4. 前提:当時のデプロイフローご紹介

    View Slide

  5. ● Web 側のプロダクトは Github Flow を採用
    ● PR が Approve されたら マージ→自動デプロイ
    当時のデプロイフロー
    master は常に
    リリースレディ

    View Slide

  6. 具体的には
    https://github.com/Connehito/gdp を使っているよ
    デプロイ宣言
    マージ(dev デプロイ) デプロイ成功通知
    dev 環境確認
    タグを打つ(gdp deploy)
    (prod デプロイ)
    デプロイ成功通知
    prod 環境確認
    リリースノート作成と
    利用終了宣言(gdp publish)
    ※「dev」環境は一般的に言うステージング環境を指しています。

    View Slide

  7. どこに課題があったのか?

    View Slide

  8. 具体的には
    https://github.com/Connehito/gdp を使っているよ
    デプロイ宣言
    マージ(dev デプロイ) デプロイ成功通知
    dev 環境確認
    タグを打つ(gdp deploy)
    (prod デプロイ)
    デプロイ成功通知
    prod 環境確認
    リリースノート作成と
    利用終了宣言(gdp publish)
    ※「dev」環境は一般的に言うステージング環境を指しています。
    ● 誰かがリリースで使っているかを目視で確認
    ○ 「あ、使っていたんですね!」みたいなことが起き
    ていた
    ○ いろんなリポジトリが混在+フリーテキストで書き
    方も統一されてない

    View Slide

  9. 具体的には
    https://github.com/Connehito/gdp を使っているよ
    デプロイ宣言
    マージ(dev デプロイ) デプロイ成功通知
    dev 環境確認
    タグを打つ(gdp deploy)
    (prod デプロイ)
    デプロイ成功通知
    prod 環境確認
    リリースノート作成と
    利用終了宣言(gdp publish)
    ※「dev」環境は一般的に言うステージング環境を指しています。
    ● デプロイが終わっているかを都度確認しなければい
    けない
    ○ 別作業していてデプロイ忘れることもしばしば

    View Slide

  10. もっと便利にできそうだ...!

    View Slide

  11. 改善ポイント
    ● 誰かがリリースで使っているかを目視で確認
    ○ 使ってるかを一眼で判断したい
    ■ できれば気にしないでリリースしたい
    ○ 間違ってリリースしても自動でストップしたい
    ● デプロイが終わっているかを都度確認しなければいけない
    ○ 終わったらメンション欲しい

    View Slide

  12. 改善案
    イシューだ!

    View Slide

  13. 改善案:デプロイを管理するイシューを作成する

    View Slide

  14. 改善案:デプロイを管理するイシューを作成する
    ラベルやログからデプロイ中なのかをひと目で確認
    Github コメントでメンションする

    View Slide

  15. 他にも嬉しい
    ● デプロイログがリポジトリに集約される
    ● 手動でコメントも残せるからドキュメント代わりになりそう

    View Slide

  16. どう実現したのか

    View Slide

  17. どう実現したのか
    ● コメントをつける actions を利用
    ○ https://github.com/peter-evans/create-or-update-comment
    ● 自動でラベルをつけ外しする actions を作成
    ○ ラベルがついてたらデプロイストップも可能
    ○ https://github.com/Connehito/deploying-marker-with-issue

    View Slide

  18. コメントをつける actions を利用
    env:
    DEPLOYMENT_RECORD_ISSUE_NUMBER: 1234
    jobs:
    build:
    runs-on: ubuntu-latest
    steps:
    - name: Set ref link for notification
    id: set_link
    run: |
    if [[ "${GITHUB_REF_TYPE}" == "branch" ]]; then
    echo "::set-output name=REF_LINK::[${GITHUB_SHA:0:8}](https://github.com/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA})"
    elif [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then
    echo "::set-output
    name=REF_LINK::[${GITHUB_REF_NAME}](https://github.com/${GITHUB_REPOSITORY}/releases/tag/${GITHUB_REF_NAME})"
    fi
    - name: Create comment
    uses: peter-evans/[email protected]
    with:
    issue-number: ${{ env.DEPLOYMENT_RECORD_ISSUE_NUMBER }}
    body: |
    @${{ github.actor }}
    ${{ steps.set_link.outputs.REF_LINK }} によるdevデプロイを開始します。
    コミットへのリンク作成
    イシューにコメントする

    View Slide

  19. 自動でラベルをつけ外しする actions を作成
    # ラベルをつけて、デプロイ中であることを明示する
    # デプロイ中にエラーなどでラベルが残り、再実行でエラーになる場合は手動でラベルを外す
    - uses: Connehito/[email protected]
    env:
    GITHUB_TOKEN: ${{ github.token }}
    with:
    action: "attach-marker"
    issue-number: ${{ env.DEPLOYMENT_RECORD_ISSUE_NUMBER }}
    exit-with-error: true # 既にラベルが付いている場合は、他のデプロイが進行中と判断できるためエラーにする
    イシューを指定
    ラベルがついていたらデプロイを中
    止するかどうかを指定

    View Slide

  20. 現状の運用模様

    View Slide

  21. これが...
    デプロイ宣言
    マージ(dev デプロイ) デプロイ成功通知
    dev 環境確認
    タグを打つ
    (gdp deploy)
    (prod デプロイ)
    デプロイ成功通知
    prod 環境確認
    リリースノート作成と
    利用終了宣言
    (gdp publish)

    View Slide

  22. こう!
    マージ(dev デプロイ)
    デプロイ成功通知
    dev 環境確認
    タグを打つ
    (gdp deploy)
    (prod デプロイ)
    デプロイ成功通知
    prod 環境確認
    リリースノート作成
    (gdp publish)

    View Slide

  23. まだまだ課題感
    ● 慣習の名残で宣言する人としない人が混在
    ● イレギュラー対応全員できる?
    ● もっとスムーズにできそうじゃない?

    View Slide

  24. 今後の展望
    ● デプロイフローを github に集約させたい
    ○ https://github.com/Songmu/tagpr/tree/v1.0.0
    ■ リリース用のpull requestを自動作成
    ■ マージされたら自動でタグを打つ

    View Slide

  25. こうなったらイケてるかも
    マージ(prod デプロイ)
    デプロイ成功通知
    dev 環境確認
    デプロイ成功通知
    prod 環境確認
    リリース用PRが
    自動作成
    マージ(dev デプロイ)

    View Slide

  26. 改善の道はまだまだ続く...

    View Slide

  27. 他にも色々改善してました
    https://tech.connehito.com/entry/2022/09/13/094045

    View Slide

  28. ご清聴ありがとうございました!

    View Slide