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

GitHub Actionsと"仲良くなる"ための練習方法

GitHub Actionsと"仲良くなる"ための練習方法

Yuta Matsumura

March 20, 2023
Tweet

More Decks by Yuta Matsumura

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  7. #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.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. #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
    ローカルやクラウドに構築

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  19. #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

    View full-size slide

  20. #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

    View full-size slide

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

    View full-size slide

  22. #cicd2023
    © 2023 Yuta Matsumura.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  27. #cicd2023
    © 2023 Yuta Matsumura.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  31. #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

    View full-size slide

  32. #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.

    View full-size slide

  33. #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.

    View full-size slide

  34. #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.

    View full-size slide

  35. #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.

    View full-size slide

  36. #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

    View full-size slide

  37. #cicd2023
    © 2023 Yuta Matsumura.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  43. #cicd2023
    #cicd2023
    © 2023 Yuta Matsumura.

    View full-size slide

  44. #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

    View full-size slide

  45. #cicd2023
    © 2023 Yuta Matsumura.

    View full-size slide

  46. #cicd2023
    GitHub Codespaces
    © 2023 Yuta Matsumura.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide