Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

改善案 イシューだ!

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

どう実現したのか

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

コメントをつける 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/create-or-update-comment@v2 with: issue-number: ${{ env.DEPLOYMENT_RECORD_ISSUE_NUMBER }} body: | @${{ github.actor }} ${{ steps.set_link.outputs.REF_LINK }} によるdevデプロイを開始します。 コミットへのリンク作成 イシューにコメントする

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

現状の運用模様

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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