2022/12/06開催の「3社合同PHP勉強会!CTOが語る事業とPHPの向き合い方【BASE/Cake.jp/コネヒト】」における LT 資料です。
https://connehito.connpass.com/event/266703/
もっと快適に!デプロイフロー改善への道!2022/12/06TOC
View Slide
自己紹介- TOC(とっしー)- コネヒト株式会社- バックエンドエンジニア- 主にPHP- 趣味でGo- (宣伝)Let's Go Talkもやってます- Twitter: @toc_toc05
今日話すこと● Github Actions を用いてデプロイフローをちょっと便利にした話○ アイデアとして使えそうなものがあれば嬉しい○ デプロイフローで利用できそうな actions も紹介話さないこと● Github Actions の仕組み、書き方● PHP
前提:当時のデプロイフローご紹介
● Web 側のプロダクトは Github Flow を採用● PR が Approve されたら マージ→自動デプロイ当時のデプロイフローmaster は常にリリースレディ
具体的にはhttps://github.com/Connehito/gdp を使っているよデプロイ宣言マージ(dev デプロイ) デプロイ成功通知dev 環境確認タグを打つ(gdp deploy)(prod デプロイ)デプロイ成功通知prod 環境確認リリースノート作成と利用終了宣言(gdp publish)※「dev」環境は一般的に言うステージング環境を指しています。
どこに課題があったのか?
具体的にはhttps://github.com/Connehito/gdp を使っているよデプロイ宣言マージ(dev デプロイ) デプロイ成功通知dev 環境確認タグを打つ(gdp deploy)(prod デプロイ)デプロイ成功通知prod 環境確認リリースノート作成と利用終了宣言(gdp publish)※「dev」環境は一般的に言うステージング環境を指しています。● 誰かがリリースで使っているかを目視で確認○ 「あ、使っていたんですね!」みたいなことが起きていた○ いろんなリポジトリが混在+フリーテキストで書き方も統一されてない
具体的にはhttps://github.com/Connehito/gdp を使っているよデプロイ宣言マージ(dev デプロイ) デプロイ成功通知dev 環境確認タグを打つ(gdp deploy)(prod デプロイ)デプロイ成功通知prod 環境確認リリースノート作成と利用終了宣言(gdp publish)※「dev」環境は一般的に言うステージング環境を指しています。● デプロイが終わっているかを都度確認しなければいけない○ 別作業していてデプロイ忘れることもしばしば
もっと便利にできそうだ...!
改善ポイント● 誰かがリリースで使っているかを目視で確認○ 使ってるかを一眼で判断したい■ できれば気にしないでリリースしたい○ 間違ってリリースしても自動でストップしたい● デプロイが終わっているかを都度確認しなければいけない○ 終わったらメンション欲しい
改善案イシューだ!
改善案:デプロイを管理するイシューを作成する
改善案:デプロイを管理するイシューを作成するラベルやログからデプロイ中なのかをひと目で確認Github コメントでメンションする
他にも嬉しい● デプロイログがリポジトリに集約される● 手動でコメントも残せるからドキュメント代わりになりそう
どう実現したのか
どう実現したのか● コメントをつける actions を利用○ https://github.com/peter-evans/create-or-update-comment● 自動でラベルをつけ外しする actions を作成○ ラベルがついてたらデプロイストップも可能○ https://github.com/Connehito/deploying-marker-with-issue
コメントをつける actions を利用env:DEPLOYMENT_RECORD_ISSUE_NUMBER: 1234jobs:build:runs-on: ubuntu-lateststeps:- name: Set ref link for notificationid: set_linkrun: |if [[ "${GITHUB_REF_TYPE}" == "branch" ]]; thenecho "::set-output name=REF_LINK::[${GITHUB_SHA:0:8}](https://github.com/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA})"elif [[ "${GITHUB_REF_TYPE}" == "tag" ]]; thenecho "::set-outputname=REF_LINK::[${GITHUB_REF_NAME}](https://github.com/${GITHUB_REPOSITORY}/releases/tag/${GITHUB_REF_NAME})"fi- name: Create commentuses: peter-evans/[email protected]with:issue-number: ${{ env.DEPLOYMENT_RECORD_ISSUE_NUMBER }}body: |@${{ github.actor }}${{ steps.set_link.outputs.REF_LINK }} によるdevデプロイを開始します。コミットへのリンク作成イシューにコメントする
自動でラベルをつけ外しする 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 # 既にラベルが付いている場合は、他のデプロイが進行中と判断できるためエラーにするイシューを指定ラベルがついていたらデプロイを中止するかどうかを指定
現状の運用模様
これが...デプロイ宣言マージ(dev デプロイ) デプロイ成功通知dev 環境確認タグを打つ(gdp deploy)(prod デプロイ)デプロイ成功通知prod 環境確認リリースノート作成と利用終了宣言(gdp publish)
こう!マージ(dev デプロイ)デプロイ成功通知dev 環境確認タグを打つ(gdp deploy)(prod デプロイ)デプロイ成功通知prod 環境確認リリースノート作成(gdp publish)
まだまだ課題感● 慣習の名残で宣言する人としない人が混在● イレギュラー対応全員できる?● もっとスムーズにできそうじゃない?
今後の展望● デプロイフローを github に集約させたい○ https://github.com/Songmu/tagpr/tree/v1.0.0■ リリース用のpull requestを自動作成■ マージされたら自動でタグを打つ
こうなったらイケてるかもマージ(prod デプロイ)デプロイ成功通知dev 環境確認デプロイ成功通知prod 環境確認リリース用PRが自動作成マージ(dev デプロイ)
改善の道はまだまだ続く...
他にも色々改善してましたhttps://tech.connehito.com/entry/2022/09/13/094045
ご清聴ありがとうございました!