GitHubActionsで構築した自動化の仕組み

595 Views

September 04, 23

スライド概要

profile-image

よろしくお願いいたします!

関連スライド

各ページのテキスト
1.

GitHubActionsで構築した自動化の仕組み インフラ技術勉強会 #4 https://infra365.connpass.com/event/286297/ 2023年9月3日 奈良 貴充

2.

INDEX 目次 1. 自己紹介 2. ワークフローといえば 3. GitHubActionsの基本 4. 構築した自動化の仕組み ~概要~ 5. 構築した自動化の仕組み ~backend~ 6. 導入してみて 7. 最後に

3.

1. 自己紹介 名前: 奈良貴充 奈良 貴充 所属: 凸版印刷株式会社 DXデザイン事業部ICT開発センター 役割: 新規サービス立ち上げを中心にシステム開発業務に従事。 システム開発に関連するアーキテクチャ検討から、 設計・開発・テスト・リリースまで一通りを担当。 好きなもの:漫画、特にジョジョ。アニメ、特にガンダムなどロボット系 © TOPPAN INC. 3

4.

2. ワークフローといえば システムやアプリケーション開発でのワークフローと言えば、、、 CI/CD(継続的インテグレーション/デリバリー) ソースコード 更新 ビルド ユニットテスト コンテナイメージ ビルド コンテナイメージ 脆弱性スキャン コンテナイメージ レジストリ格納 コンテナアプリケーション開発を例 CI/CD環境を整えることにより、早期バグ発見による品質向上、リリーススピード向上が見込まれ 開発者が開発に集中でき、より良い開発サイクルを実現 © TOPPAN INC. 4

5.

2. ワークフローといえば CI/CDツールの一つ、『GitHubActions』 GitHubActions • GitHub社によって運営されているソフトウェア開発プラットフォーム • ビルド、テスト、デプロイなどパイプラインを自動化できるCI/CDのプラットフォーム • リポジトリに対するPull Request(PR)作成をトリガーにテスト • MergeされたPull Request(PR)をトリガーに本番環境へデプロイ • CI/CDに直接かかわらないワークフローも対応 • 新たなissue起票されるたびにラベル追加など 特徴 • GitHubに組み込まれているため、GitHubユーザーに対する面倒な設定が不要 • GitHub上のあらゆるイベントに対応可能 • リポジトリ間でワークフローの再利用が可能 • 無償枠が広い GitHubを利用しているならば、使わない理由はない!! © TOPPAN INC. 5

6.

3. GitHubActionsの基本 基本構造 イベント • ワークフローの実行をトリガーするアクティビティ • GitHub内の特定のイベントでなくても スケジュールや手動実行も含む イベント ワークフロー ワークフロー • レポジトリ内の”.github/workflows”で定義される 一連のジョブの実行 ジョブ • GitHubActionsの実体 • ワークフロー内の一連の処理、シェルスクリプトやアクションを実行 ジョブ1 ランナー ステップ1 Run Scriptジョブ1 Run Script Run Action Run Action ・・・ ・・・ ・・・ © TOPPAN INC. ステップ1 6

7.

3. GitHubActionsの基本 ジョブを実行するためのコンポーネント ランナー • ワークフロー実行時に起動するサーバー • 1度に1つのジョブを実行 • Linux(Ubuntu)、Windows、macOS、 セルフホスト可能なランナーもあり アクション • GitHubActionsで実行される処理やコマンド • 複雑で頻繁に繰り返される処理を再利用可能にしたもの • GitHub Marketplaceから取得したり、 独自のアクションを作成することも可能 イベント ワークフロー ジョブ1 ランナー ステップ1 Run Scriptジョブ1 Run Script Run Action Run Action ・・・ ・・・ ・・・ © TOPPAN INC. ステップ1 7

8.

3. GitHubActionsの基本 基本をふまえ、ワークフローの定義 ※以下、サンプル。Linux環境でechoコマンドを実行して、Hello World!と表示するだけ name: Sample on: push: branches: - master jobs: hello-world: runs-on: ubuntu-latest ランナー steps: - name: execute echo command run: echo "Hello World!" © TOPPAN INC. イベント ワークフロー ジョブ(複数、並列実行可) アクション 8

9.

4. 構築した自動化の仕組み ~概要~ AWS環境へのデプロイ/テストを自動化 • IaC(terraform)/backend/frontend/lambda AWSリソース GitHubActions ソース コード デプロイ Pull Request S3 (フロントエンド用) Merge ユニットテスト テスト 結果 ECR (コンテナイメージ) S3 (lambda用) © TOPPAN INC. 9

10.

4. 構築した自動化の仕組み ~概要~ 導入効果:作業工数削減 • コンテナアプリケーション例に導入前後比較 GitHubActions導入前 GitHubActions導入後 1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 単体テスト(テストコード)実施 作業用ブランチにPush 特定のブランチに対してPull Request 特定のブランチにMerge コンテナイメージビルド (cliなど利用し)AWSへデプロイ 単体テスト(テストコード)実施 作業用ブランチにPush 特定のブランチに対してPull Request 特定のブランチにMerge コンテナイメージビルド (cliなど利用し)AWSへデプロイ 自動化 テスト 結果 © TOPPAN INC. 自動化 テスト 結果 10

11.

5. 構築した自動化の仕組み ~backend~ 以下についてもう少し詳細に深ぼってお話します。 • backend -> 自動テスト -> (AWSへ)自動デプロイ © TOPPAN INC. 11

12.

5. 構築した自動化の仕組み ~backend~ ワークフロー(yaml)ファイルとGitHubActions実行画面 ワークフロー(yaml)ファイル(抜粋) GitHubActions実行画面 name: backend-deploy # ワークフローの名前 on: push: # pushイベントをトリガー指定 branches: # トリガーとなるブランチ指定 - develop # 対象ブランチ env: # AWS認証用の情報を設定 AWS_REGION: "ap-northeast-1" jobs: deploy: # ワークフロー内のジョブグループ。ジョブidを”deploy”と定義 runs-on: ubuntu-latest # ジョブ実行のマシンタイプ。Ubuntuを指定 permissions: #ワークフロー実行時に必要なGITHUB_TOKEN steps: # ジョブ内で実行するタスクのグループ - name: Checkout # レポジトリのチェックアウト - name: Configure AWS # AWS 認証 - name: Prepare unit test # Unit Test 準備 - name: Execute unit test # Unit Test 実行 - name: Login to Amazon ECR # ECRへログイン # イメージをbuild/push - name: Build, tag, and push image to Amazon ECR # Task DefinitionのImage URIを更新 - name: Fill in the new image ID in the Amazon ECS task definition - name: Deploy Amazon ECS task definition # Task Definitionを更新 © TOPPAN INC. 12

13.

5. 構築した自動化の仕組み ~backend~ AWS上のデプロイ前後比較 デプロイ前 デプロイ後 © TOPPAN INC. 13

14.

6. 導入してみて 導入効果 • • • • ※1:GitHub Artifactという機能で実現可能 デプロイ作業を自動化したことが作業負荷軽減、作業ミス防止に直結 ※2:slack連携で実現可能 テストエビデンスを残すことが可能(※1) リグレッションテストも兼ねることが可能 slack連携可能なので、本番環境へのデプロイは『slack通知→承諾』をトリガーにワークフロー実行可能(※2) 注意事項 • プログラム+テストコード(テストデータ含む)も実装する必要がある • 特に異常系のテストコード(テストデータ)の考慮が大変 • 手動でテストコード実施した際に、NGだが問題無いため、テストとしてはOKとする場合もGitHubActionsは考慮されない (NGでエラーになる) 使いどころ • ライフサイクルによって使い方を変える • IaC(terraform):環境複製(コンソールからdev環境を検証しつつ構築、IaCでstg環境/prod環境再現など) • Frontend:初期開発時は自動テストは導入せず、自動テスト導入は画面数が増えた場合orリグレッションテストを目的として使用 © TOPPAN INC. やはりGitHubActionsは使った方が良い!! 14

15.

7. 最後に 一緒にプロダクトを作っていくメンバーを積極的に募集中です! © TOPPAN INC. 15