Slide 1

Slide 1 text

#cicd2023 GitHub Actionsと"仲良くなる"ための練習方法 2023/03/20 CI/CD Conference 2023 Yuta Matsumura © 2023 Yuta Matsumura.

Slide 2

Slide 2 text

#cicd2023 松村 優大 (Yuta Matsumura) Currently working for © 2023 Yuta Matsumura. Chief Technical Architect C#, PHP, Azure, GitHub が好き Microsoft MVP (Developer Technologies) #fukuten #devblogradio の中の人 @tsubakimoto_s

Slide 3

Slide 3 text

#cicd2023 これからお話しすること 1. ソフトウェア開発ライフサイクルにおける定型作業 2. GitHub Actions の使い方 3. GitHub Actions の学び方の課題 4. nektos/act でのローカル練習環境 5. 練習環境のアップグレード © 2023 Yuta Matsumura.

Slide 4

Slide 4 text

#cicd2023 こういう方にオススメです • GitHub Actions を勉強中・これから勉強する方 • GitHub Actions を使って CI/CD の構築をしている方 • GitHub Actions の検証に四苦八苦している方 • GitHub Actions と仲良くなりたい方 © 2023 Yuta Matsumura.

Slide 5

Slide 5 text

#cicd2023 ソフトウェア開発ライフサイクルに おける定型作業 © 2023 Yuta Matsumura.

Slide 6

Slide 6 text

#cicd2023 ソフトウェア開発ライフサイクル Software Development Life Cycle Plan Develop Deliver Operate https://learn.microsoft.com/en-us/devops/what-is-devops SDLC © 2023 Yuta Matsumura.

Slide 7

Slide 7 text

#cicd2023 ソフトウェア開発ライフサイクル Software Development Life Cycle Plan Code Build Test Release Deploy Operate Monitor https://learn.microsoft.com/en-us/devops/what-is-devops SDLC © 2023 Yuta Matsumura.

Slide 8

Slide 8 text

#cicd2023 SDLC における定型作業 (ワークフロー) 定型作業を手作業ではなく自動化を行うことで、 開発者が開発に割く時間を少しでも増やすようにしましょう。 © 2023 Yuta Matsumura. ビジネスワークフロー クラウドワークフロー SDLC ワークフロー GitHub Actions Power Automate Azure Logic Apps

Slide 9

Slide 9 text

#cicd2023 © 2023 Yuta Matsumura. Azure DevOps (Azure Pipelines) GitHub (GitHub Actions)

Slide 10

Slide 10 text

#cicd2023 GitHub Actions の使い方 © 2023 Yuta Matsumura.

Slide 11

Slide 11 text

#cicd2023 自動化されたワークフロー • YAML ファイル形式 • GitHub と完全統合 • GitHub 上のイベントをトリガー • ライブログと視覚化された実行結果 • 2種のランナー (GitHub-hosted, Self-hosted) • シークレット構成可能 © 2023 Yuta Matsumura. GitHub Actions

Slide 12

Slide 12 text

#cicd2023 GitHub Actions の構成 © 2023 Yuta Matsumura. イベント ワークフロー ジョブ1 ジョブ2 ステップ1 アクション ステップ2 アクション ステップ1 アクション ランナー1 アクション実行 実行ログ ランナー2 アクション実行 実行ログ

Slide 13

Slide 13 text

#cicd2023 GitHub Actions の構成 © 2023 Yuta Matsumura. イベント • 手動実行 • リポジトリに関する操作 • 各機能に関する操作 (Issue, Pull Request, Projects, etc) • スケジュール

Slide 14

Slide 14 text

#cicd2023 GitHub Actions の構成 © 2023 Yuta Matsumura. イベント ワークフロー ジョブ1 ジョブ2 ステップ1 アクション ステップ2 アクション ステップ1 アクション ランナー1 アクション実行 実行ログ ランナー2 アクション実行 実行ログ

Slide 15

Slide 15 text

#cicd2023 GitHub Actions の構成 © 2023 Yuta Matsumura. ランナー1 アクション実行 実行ログ ランナー2 アクション実行 実行ログ GitHub-hosted runner OS: Ubuntu, Windows, macOS https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners https://docs.github.com/ja/actions/hosting-your-own-runners/about-self-hosted-runners Self-hosted runner ローカルやクラウドに構築

Slide 16

Slide 16 text

#cicd2023 #cicd2023 © 2023 Yuta Matsumura. イベント ジョブ ランナー ステップ アクション

Slide 17

Slide 17 text

#cicd2023 GitHub Actions は CI/CD だけではない CI/CD は GitHub Actions で実現できる作業のひとつです。 GitHub という開発環境を最大限活用するために、 ちょっとしたことからワークフローにしてみましょう。 © 2023 Yuta Matsumura.

Slide 18

Slide 18 text

#cicd2023 練習してみよう © 2023 Yuta Matsumura.

Slide 19

Slide 19 text

#cicd2023 GitHub Actions の料金 © 2023 Yuta Matsumura. https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions • パブリックリポジトリ:無料 • プライベートリポジトリ:無料枠あり 製品 ストレージ 分 (月間) GitHub Free 500MB 2,000 GitHub Pro 1GB 3,000 GitHub Free for Organization 500MB 2,000 GitHub Team 2GB 3,000 GitHub Enterprise Cloud 50GB 50,000

Slide 20

Slide 20 text

#cicd2023 GitHub Actions の料金 (GitHub-hosted runner) © 2023 Yuta Matsumura. https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions OS ごとに時間の消費速度が異なります。 x1 x2 x10 Linux Windows macOS

Slide 21

Slide 21 text

#cicd2023 Public Repo x GitHub-hosted runner x Linux =👍 © 2023 Yuta Matsumura.

Slide 22

Slide 22 text

#cicd2023 © 2023 Yuta Matsumura.

Slide 23

Slide 23 text

#cicd2023 とはいえ毎回 サイトで試すのツライ © 2023 Yuta Matsumura.

Slide 24

Slide 24 text

#cicd2023 GitHub Actions の学び方の課題 © 2023 Yuta Matsumura.

Slide 25

Slide 25 text

#cicd2023 GitHub Actions の学び方の課題 • コミットや UI 操作をしないと動作確認できない • ワークフロー内部のデータが分かりにくい • YAML が複数あるときのトリガー制御が大変 • ブラウザで作業することが大変 © 2023 Yuta Matsumura. イベント ワークフロー アクション

Slide 26

Slide 26 text

#cicd2023 2022年12月… © 2023 Yuta Matsumura.

Slide 27

Slide 27 text

#cicd2023 © 2023 Yuta Matsumura.

Slide 28

Slide 28 text

#cicd2023 つらさをぶつけました Q. Actions を試すのは (前述のように)大変だ A. nektos/act という オープンソースがあるよ © 2023 Yuta Matsumura.

Slide 29

Slide 29 text

#cicd2023 nektos/act でのローカル練習環境 © 2023 Yuta Matsumura.

Slide 30

Slide 30 text

#cicd2023 nektos/act とは GitHub Actions のローカル実行ツールです。 https://github.com/nektos/act リポジトリに変更を加えることなく、ワークフローの実行を 行うことができます。 ※ Docker (Desktop or Engine) が必要です。 © 2023 Yuta Matsumura.

Slide 31

Slide 31 text

#cicd2023 nektos/act 用のコンテナーイメージ ランナーとして使用するコンテナーイメージが用意されてい ます。サイズは3種類あります。(Large, Medium, Micro) ※ 非サポート:Windows, macOS © 2023 Yuta Matsumura. 種類 イメージ サイズ Ubuntu ver Large catthehacker/ubuntu:full-latest +20GB 20.04, 18.04 Medium catthehacker/ubuntu:act-latest ~500MB 22.04, 20.04, 18.04 Micro node:16-buster-slim < 200MB 22.04, 20.04, 18.04 https://github.com/nektos/act#runners

Slide 32

Slide 32 text

#cicd2023 .github/workflows にあるワークフローを表示します $ act --list Stage Job ID Job name Workflow name Workflow file Events 0 greet Greet Hello world hello-world.yml push ワークフローの一覧表示 © 2023 Yuta Matsumura.

Slide 33

Slide 33 text

#cicd2023 特定イベントのワークフローを表示します $ act push --list Stage Job ID Job name Workflow name Workflow file Events 0 greet Greet Hello world hello-world.yml push ワークフローの一覧表示 © 2023 Yuta Matsumura.

Slide 34

Slide 34 text

#cicd2023 該当するジョブを持つワークフローを表示します $ act --job greet --list Stage Job ID Job name Workflow name Workflow file Events 0 greet Greet Hello world hello-world.yml push ワークフローの一覧表示 © 2023 Yuta Matsumura.

Slide 35

Slide 35 text

#cicd2023 指定したジョブを実行します。 $ act # イベント `push` を実行 $ act pull_request # イベント `pull_request` を実行 $ act --job greet # `greet` ジョブを実行 $ act --input name=yuta # 入力値を指定して実行 $ act --eventpath payload.json # イベント内容を指定して実行 $ act --secret name=yuta # シークレットを指定して実行 $ act --secret-file .secrets # シークレットをファイル指定して実行 ジョブの実行 © 2023 Yuta Matsumura.

Slide 36

Slide 36 text

#cicd2023 --artifact-server-path で保管先を指定します ※ actions/upload-artifact, actions/download-artifact など $ act --artifact-server-path /tmp/artifacts アーティファクトを使用する © 2023 Yuta Matsumura. https://qiita.com/nagayaoh/items/d5cff83929452b790164

Slide 37

Slide 37 text

#cicd2023 © 2023 Yuta Matsumura.

Slide 38

Slide 38 text

#cicd2023 nektos/act で練習できる範囲 © 2023 Yuta Matsumura. リポジトリ内で完結 するなら不都合ない コンテナー リポジトリに関する部分

Slide 39

Slide 39 text

#cicd2023 • GitHub Actions での実環境 • nektos/act での検証環境 1つの YAML 内で環境を区別 するには、コンテキスト内の actor の値で判別可能です。 ▼ コンテキストを見るためのダンプ ▼ コンテキストの内容 { actor: nektos/act, ... } ▼ ワークフローの条件式 nektos/act で実行していることを識別する © 2023 Yuta Matsumura.

Slide 40

Slide 40 text

#cicd2023 注意点 • github.com にまつわるイベントは試すことができません ▶ Issue, Pull Request, Discussions, Projects, etc • permissions を用いたアクションは制限があります ▶ Actions からクラウドリソースへの OIDC など • キャッシュはサポートされていません CI 部分に限った練習はとてもやりやすい印象 © 2023 Yuta Matsumura.

Slide 41

Slide 41 text

#cicd2023 Dev Containers で nektos/act を使う 練習環境をサクっと作りましょう © 2023 Yuta Matsumura.

Slide 42

Slide 42 text

#cicd2023 Dev Containers 開発環境としてのコンテナーを準備することができます。 Visual Studio Code + 拡張機能パック + devcontainer.json ▶ nektos/act の Dev Containers 定義を作成します © 2023 Yuta Matsumura. https://code.visualstudio.com/docs/devcontainers/containers

Slide 43

Slide 43 text

#cicd2023 #cicd2023 © 2023 Yuta Matsumura.

Slide 44

Slide 44 text

#cicd2023 #cicd2023 © 2023 Yuta Matsumura. https://github.com/tsubakimoto/cicd-conference-sample/blob/main/.devcontainer/devcontainer.json VS Code で開く Reopen in Container Dev Containers 起動 .devcontainer/devcontainer.json

Slide 45

Slide 45 text

#cicd2023 © 2023 Yuta Matsumura.

Slide 46

Slide 46 text

#cicd2023 GitHub Codespaces © 2023 Yuta Matsumura.

Slide 47

Slide 47 text

#cicd2023 GitHub Codespaces GitHub 上にホストされる仮想マシンを使用して、 オンライン上に開発環境を構築することができます。 devcontainer.json をリポジトリに保管している場合、 devcontainer.json の構成がセットアップされます。 © 2023 Yuta Matsumura.

Slide 48

Slide 48 text

#cicd2023 GitHub Codespaces の無料枠 © 2023 Yuta Matsumura. https://docs.github.com/ja/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces

Slide 49

Slide 49 text

#cicd2023 GitHub Codespaces のマシン種別と価格 © 2023 Yuta Matsumura. https://docs.github.com/ja/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces

Slide 50

Slide 50 text

#cicd2023 GitHub Codespaces のセキュリティ • 分離された仮想マシンや仮想ネットワーク • Codespace にアクセスできるのは作成者のみ • 外部からのアクセス不可 • ポートフォワーディング機能 • シークレット管理 © 2023 Yuta Matsumura. https://docs.github.com/ja/codespaces/codespaces-reference/security-in-github-codespaces

Slide 51

Slide 51 text

#cicd2023 Codespace のパーソナライズ © 2023 Yuta Matsumura. https://docs.github.com/ja/codespaces/customizing-your-codespace/personalizing-github-codespaces-for-your-account VSCode 設定の同期 dotfiles リポジトリの反映

Slide 52

Slide 52 text

#cicd2023 © 2023 Yuta Matsumura. ブラウザだけで Actions の練習ができる!

Slide 53

Slide 53 text

#cicd2023 まとめ • GitHub Actions の練習にほとんどお金はかかりません • ローカル環境を整えることも大事です • Dev Containers や GitHub Codespaces を使うことで 環境を問わず練習を行うことができます • ワークフローを増やし、開発ライフサイクルを より良いものにしましょう © 2023 Yuta Matsumura.

Slide 54

Slide 54 text

#cicd2023 ご清聴ありがとうございました © 2023 Yuta Matsumura.