Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

GitHub Actionsを使いこなせ!/Get Started GitHub Actions

GitHub Actionsを使いこなせ!/Get Started GitHub Actions

OCHaCafe Season7 #3の資料です.

oracle4engineer

August 09, 2023
Tweet

Video

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Copyright © 2023, Oracle and/or its affiliates. 2 1. GitHub

    Actionsって何者︖ 2. GitHub Actionsの構成要素と基本的な使い⽅ 3. GitHub Actionsの応⽤ 4. デモ 5. まとめ Agenda
  2. Copyright © 2023, Oracle and/or its affiliates. 3 ⾃⼰紹介 仁井⽥

    拓也 • ⽇本オラクル株式会社 • ソリューション・アーキテクト部 • AppDev/Container/FaaS/(a little)ML… • Oracle Cloud Hangout Caféメンバー/Oracle Groundbreakers Advocate • 前職は某SIer • Oracle歴/Cloud Native歴︓4年強 • ジブリ⼤好き • 今回もちゃんとネタあります…!! @takuya_0301
  3. Copyright © 2023, Oracle and/or its affiliates. 5 システムやアプリケーション開発でのワークフローといえば・・・ CI/CD(継続的インテグレーション/デリバリ)

    GitHub Actionsの世界に⼊る前に・・・ CI/CD環境を整備することで、早期バグの発⾒による品質向上、検証時間の短縮によるリリーススピード向上、開発者 が開発に集中できる環境でより良い開発サイクルを実現 ソースコード更新 アプリケーションビルド ユニットテスト コンテナイメージビルド コンテナイメージ 脆弱性スキャン コンテナイメージ レジストリ格納 コンテナアプリケーション開発を例としたCI作業(ジョブorタスク) ワークフロー
  4. Copyright © 2023, Oracle and/or its affiliates. 6 CI/CD最新事情 keyword:

    CIOps, GitOps, Argo Family、TEKTON… 資料︓https://onl.sc/jhW22pV 動画︓https://youtu.be/K62nFSvHo60 過去のOCHaCafe回 ワークフローツールで楽々Job管理 keyword: Argo Workflows, Apache Airflow… 資料︓https://onl.sc/2K9RiJt 動画︓https://youtu.be/flVGZhPOFWQ
  5. Copyright © 2023, Oracle and/or its affiliates. 7 GitHub Actions

    • GitHub社によって運営されているソフトウェア開発 プラットフォームであるGitHubが提供 • ビルド、テスト、デプロイなどのパイプラインを⾃動化 できるCI/CDのプラットフォーム • CI/CDのパイプライン例 • リポジトリに対するPull Request(PR)作成をト リガーしてテスト • マージされたPull Request(PR)を本番環境に デプロイ • CI/CDに直接関わらないワークフローも対応 • リポジトリで新しいissueが作成されるたびに適 切なラベルを追加 ワークフロー、CI/CDツールの⼀つ。”GitHub Actions”
  6. Copyright © 2023, Oracle and/or its affiliates. 8 • GitHubに組み込まれているため、GitHubユーザに対する⾯倒な設定が不要

    • ただし、CI/CDパイプラインで実⾏する内容によってはクレデンシャルなどの追加設定は必要 • GitHub上のあらゆるイベントに対応し、パイプラインをトリガー可能 • あるレポジトリで作成したワークフローを他のレポジトリで再利⽤可能 • 無償枠が結構広い GitHub Actionsの特⻑ ・ ・ ・ ・ バージョン管理にGitHubを利用しているなら使わない理由はない!! 一緒に 「完全に理解」しましょう…!!
  7. Copyright © 2023, Oracle and/or its affiliates. 9 OCIチュートリアルやOCI活⽤資料集でも使ってます…!! Jekyllのビルド、GitHub

    Pagesへのデプロイ、developブランチ更新時の⾃動Pull Request作成、社内メンバーのレ ビューワーの⾃動割り当て…etc 今⽇のトピック、GitHub Actions…実は…
  8. Copyright © 2023, Oracle and/or its affiliates. 11 構成コンポーネント •

    イベント • ワークフローの実⾏をトリガーするアクティビティ • GitHub内の特定のイベントでなくてもスケ ジュールや⼿動実⾏も含む • ワークフロー • レポジトリ内の”.github/workflows”で定義さ れる⼀連のジョブの実⾏ • ジョブ • GitHub Actionsの実体。ワークフロー内の⼀ 連のステップ(処理)。シェルスクリプトやアクション (後述)を順番に実⾏ GitHub Actionsの基本(1) イベント ワークフロー ジョブ1 ステップ1 Run Script Run Script ステップ2 Run Script Run Script ・・・ ・ ・ ・ ・ ・ ・
  9. Copyright © 2023, Oracle and/or its affiliates. 12 ジョブを実⾏するためのコンポーネント •

    アクション • GitHub Actions⽤のアプリケーション • 複雑で頻繁に繰り返される処理の実⾏を再利 ⽤可能にしたもの • GitHub Marketplaceから取得したり、独⾃のア クションを作成(後述)することも可能 • ランナー • ワークフロー実⾏時に起動するサーバ • 1度に1つのジョブを実⾏ • Linux(Ubuntu)、Windows、macOS、セルフ ホスト可能なランナーもあり(後述) GitHub Actionsの基本(2) イベント ワークフロー ジョブ1 ステップ1 Run Script Run Action ステップ2 Run Script Run Action ・・・ ・ ・ ・ ・ ・ ・ ランナー1
  10. Copyright © 2023, Oracle and/or its affiliates. 13 基本を踏まえて簡単にワークフローの定義 ワークフロー

    イベント ランナー アクション ジョブ(複数可、並列実行可) デモ ソースコード
  11. Copyright © 2023, Oracle and/or its affiliates. 14 基本を踏まえて簡単にワークフローの定義 ランナー

    アクション ワークフロー イベント ジョブ(複数可、並列実行可) ここを解説します…!!
  12. Copyright © 2023, Oracle and/or its affiliates. 15 GitHub Actionsのトリガーにできるイベント

    • レポジトリ/ブランチへのプッシュ • プルリクエスト • Issueの起票やDiscussionの作成 • パッケージ(成果物、コンテナイメージなど)の公開 • 特定のリリースタグで絞ることも可能 • スケジュール実⾏ • GitHub API/CLI、UIでの実⾏(⼿動) イベント ・ ・ ・ ここをもう少し掘り下げます..!!
  13. Copyright © 2023, Oracle and/or its affiliates. 16 イベントの定義のしかた 先ほどのデモ

    on: [trigger-event]: [conditions] [trigger-event] • レポジトリ/ブランチへのPush: “push” • プルリクエスト: “pull_request” • スケジュール実行: “schedule” • 手動実行: “workflow_dispatch” [conditions] • レポジトリ/ブランチへのPush: ブランチ名やファイルパス • プルリクエスト: プルリクエストのアクティビティやブランチ名 • スケジュール実行: cron式 • 手動実行: 実行時の引数
  14. Copyright © 2023, Oracle and/or its affiliates. 17 レポジトリ/ブランチへのプッシュによるイベント 先ほどのデモ

    on: push: branches: - main mainブランチへの プッシュがトリガー 他にこんなのもOK on: push: branches: - main - release/** on: push: branches: - main paths - **.js on: push: tags: - v1.**
  15. Copyright © 2023, Oracle and/or its affiliates. 18 プルリクエストによるイベント 先ほどのデモ

    on: pull_request: types: - [opened] プルリクエストの 作成をトリガー 他にこんなのもOK on: pull_request : types : - [opened, reopened] on: pull_request : types : - [opened] branches: - release/** ”release/”で始まる ブランチへのプルリクエ ストの作成をトリガー
  16. Copyright © 2023, Oracle and/or its affiliates. 19 スケジュールによるイベント 先ほどのデモ

    on: schedule: - cron: '30 5,17 * * *' 5:30と17:30(UTC、 現状は変更不可)にト リガー
  17. Copyright © 2023, Oracle and/or its affiliates. 20 ⼿動実⾏によるイベント 先ほどのデモ

    on: workflow_dispatch: inputs: tags: description: ’Test scenario tags’ required: false type: boolean environment type: manual 手動実行がトリガー 実行時の引数を指定可能 (オプション) UIではこんな インタフェースが 表示されます 実 行
  18. Copyright © 2023, Oracle and/or its affiliates. 21 基本を踏まえて簡単にワークフローの定義 ランナー

    アクション ワークフロー イベント ジョブ(複数可、並列実行可) ここを解説します…!!
  19. Copyright © 2023, Oracle and/or its affiliates. 22 ランナー 指定できるのは以下。

    • Windows or Linux(Ubuntu) • 2コア(x86_64)/7GB RAM/14GB SSD • “windows-latest”,”ubuntu-latest”など • macOS • 3コア/14GB RAM/14GB SSD • “macos-latest”, “macos-12”など • macOS XL • 12コア/30GB RAM/14GB SSD • “macos-latest-xl”, “macos-12-xl”など larger runners(Windows/Linuxのみ) • GitHubはより大きなスペックを提供 • 4コア~64コア/16~256GB RAM/150~2040GB SSD • Ubuntuでは、標準提供のランナーとは違い、Android SDK ツールでのハード ウェアアクセラレーションが有効になっている • より大きなランナーでは自動スケールの設定やGitHubが提供する静的IPアドレ スプール(範囲)からのIP割り当てにより、利用者側のFirewallの設定も可能
  20. Copyright © 2023, Oracle and/or its affiliates. 23 セルフホステッドランナー •

    GitHub Actionsからジョブを実⾏するためのデプロイ、 管理ツール、HW、OS、ミドルウェアなどをユーザ⾃⾝ で細かく制御可能 • 以下のようなユースケースに最適 • より⼤規模なジョブを実⾏するための処理能⼒を 満たすためのハードウェア構成 • ローカルネットワークでのソフトウェアのインストール • GitHubが提供していないOSが利⽤可能 • オンプレミスのBM/VMやクラウド上のコンピュートイン スタンスを利⽤可能 • インスタンス上にセルフホステッドランナー⽤のエージェ ントを起動(インストールコマンドはGitHub側で提供) ランナーとセルフホステッドランナーの違い 【参考】セルフホステッドランナー ランナー セルフ ホステッドランナー OS、パッケージなど 自動更新 エージェントの自動更新 のみ メンテナンス GitHub ユーザ責任 インスタンス 都度作成 状態保持(常時起動) 料金 無償枠あり インスタンスのコスト有
  21. Copyright © 2023, Oracle and/or its affiliates. 24 基本を踏まえて簡単にワークフローの定義 ランナー

    アクション ワークフロー イベント ジョブ(複数可、並列実行可) ここを解説します…!!
  22. Copyright © 2023, Oracle and/or its affiliates. 25 アクション •

    GitHub Actions⽤のカスタムアプリケーション • 複雑であったり頻繁に必要とされる処理を再利⽤ 可能 • GitHub Actionsの具体例 • GitレポジトリのPull • クラウドプロバイダーに対する認証 • 各種⾔語環境のセットアップなど • GitHub Marketplaceに再利⽤可能なアクションが 豊富に存在 • 約20,000弱(2023/8時点)のアクションが公開 • CIに利⽤できる便利なツールやミドルウェア製品 と連携可能なツールなどがある アクション
  23. Copyright © 2023, Oracle and/or its affiliates. 26 カスタムアクション •

    GitHub APIやサードパーティAPIなどの⽅法でカスタムコードを実装 • 例) npmモジュールの公開、SMSアラートの送信 • 実装したカスタムアクションは組織内で共有したり、GitHub Marketplaceで公開可能 • アクションを全てのユーザと共有するにはレポジトリをパブリックにすることが必須 • アクションの実⾏⽅法はランナー上もしくはDockerコンテナ • Node.jsの場合はGitHub Actions Toolkitで提供しているtoolkitを利⽤すると開発効率アップ!! カスタムアクション
  24. Copyright © 2023, Oracle and/or its affiliates. 27 パラレル実⾏ •

    GitHub Actionsのジョブはデフォルトでパラレル実⾏ • ”needs”フィールドに先⾏するジョブを⼀つずつ書いていけばシーケンシャルに実⾏ • 複数のジョブを並列実⾏する場合はそれぞれの後発ジョブに先⾏ジョブを指定(fork) • ”needs”フィールドに先⾏するジョブを指定することでジョブを待ち合わせ(join) 【参考】パラレル実⾏と待ち合わせ Build TestA TestB Deploy
  25. Copyright © 2023, Oracle and/or its affiliates. 28 おさらいデモ ランナー

    アクション ワークフロー トリガーイベント ジョブ(複数可、並列実行可) デモ ソースコード
  26. Copyright © 2023, Oracle and/or its affiliates. 29 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ 後半でやっていきます…!!
  27. Copyright © 2023, Oracle and/or its affiliates. 31 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略
  28. Copyright © 2023, Oracle and/or its affiliates. 32 マトリクス戦略 •

    1つのジョブ定義で変数の組み合わせに基づいて複数のジョブ実⾏を⾃動的に作成 ex) 複数の⾔語バージョンでのテスト、複数OSでのテストなど マトリクス戦略 1次元マトリクス 多次元マトリクス OS2パターン × Goバージョン3パターン をパラレルに実行
  29. Copyright © 2023, Oracle and/or its affiliates. 33 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache
  30. Copyright © 2023, Oracle and/or its affiliates. 34 GitHub Artifact

    • ジョブの完了後の以下の成果物をGitHub上のスト レージに永続化 • ログファイルやコアダンプ • テスト結果、スクリーンショット • バイナリ • 永続化した成果物は同じワークフロー内の別のジョ ブと共有可能 • 各成果物はデフォルトで90⽇間保存(カスタマイズ 可能) • 成果物のアップロードやダウンロードには専⽤の Actionを利⽤ GitHub Artifacts
  31. Copyright © 2023, Oracle and/or its affiliates. 35 Cache •

    Maven、Gradle、npm、Yarnなどのパッケージツール やコンテナビルドによって⽣成されたローカルキャッシュを 保持 • GitHubホステッドランナーはステートレスな起動の ため、キャッシュなどの保持は不可 • Cacheを利⽤することにより、GitHub Actionsを実⾏ する時間を短縮可能 • 専⽤のcacheアクションを利⽤ • 7⽇以上利⽤されていないキャッシュは⾃動的に削除 • ユーザが⼿動でキャッシュを削除することも可能 • キャッシュはブランチごとに分離 • あるブランチからは⾃ブランチ、デフォルトブランチや マージ元のブランチのみのキャッシュを利⽤可能 Cache Keyを元にキャッシュを検索。 ヒットしなければ restore-keysで順に検索 ”cache-hit”(boolean)によって キャッシュヒット有無を確認し、 任意の処理を実行可能
  32. Copyright © 2023, Oracle and/or its affiliates. 36 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache Reusable Workflow
  33. Copyright © 2023, Oracle and/or its affiliates. 37 Reusable Workflows

    • あるワークフローから別のワークフローを呼び出すこと が可能 • アクションと同様に同様の処理の重複を回避 • 利⽤する側のワークフローは”呼び出し元ワークフ ロー”と呼ぶ • 1つの”呼び出し元ワークフロー”から複数の Reusable Workflowsを呼ぶことも可能 • 呼び出されたReusable Workflowsは”呼び出 し元ワークフロー”の⼀部のように振る舞う • Reusable Workflowsから別のReusable Workflowsを呼び出すことも可能 • 最⼤4つの階層まで Reusable Workflows Reusable Workflowsの証 変数などを 渡すことも可能
  34. Copyright © 2023, Oracle and/or its affiliates. 38 Required Workflows(β版)

    • Organization内のレポジトリでPull Requestが作成された際に強制的に実⾏されるワークフロー • 組織全体のCI/CDポリシーを実装可能 • Required Workflowsが成功するまではPull Requestのマージはブロック • Reusable Workflowsとは別の仕組み • Reusable Workflowは”他のワークフローから呼び出し” • Required Workflowsは”Organization管理者によって適⽤” • ユースケース例 • 脆弱性チェック、コードの静的解析、CI/CDの標準化 • 専⽤のレポジトリを作成 • “.github/workflows”以外のフォルダにワークフロー定義を配置可能 【参考】Required Workflows
  35. Copyright © 2023, Oracle and/or its affiliates. 39 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache Reusable Workflow サービスコンテナ
  36. Copyright © 2023, Oracle and/or its affiliates. 40 サービスコンテナ •

    ワークフロー内でジョブが必要とするサービスをホストするためのDockerコン テナ • データベースを構築したり、キャッシュストアを構築したり… • ワークフロー内のそれぞれのジョブに対して設定 • ジョブが完了した時点でDockerコンテナは破棄 • Linuxのランナーのみ対応 • サービスコンテナへのアクセスは「ジョブをコンテナ内で実⾏する」パターンと 「ジョブをランナー上で直接実⾏する」パターンで異なる • ジョブをコンテナ内で実⾏している(後述)場合はラベル名をホストとして アクセス可能(ラベル名を利⽤してアクセス) • ジョブをランナー上で直接実⾏している場合はlocalhost:<port>でア クセス(ポートフォワードを利⽤してアクセス) サービスコンテナ
  37. Copyright © 2023, Oracle and/or its affiliates. 41 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache Reusable Workflow サービスコンテナ Actions Runner Controller
  38. Copyright © 2023, Oracle and/or its affiliates. 42 Actions Runner

    Controller(ARC) • GitHub Actionsのセルフホステッドランナーを管理およびスケーリングするKubernetes Operator • レポジトリ、Organizationで実⾏中のワークフロー数に基づいてスケール • 各Podがランナーとして動作 • Helmでインストール可能 • スケール範囲や認証情報などを指定 • Kubernetesクラスターとしては以下を明⽰的にサポート • Azure Kubernetes Service(AKS) • minikube、kind • Openshiftは未サポート(ドキュメントに明記) • 認証⽅式はGitHub AppsかPersonal Access Token(PAT) • それぞれのクレデンシャルをHelm chartの”values.yaml”かKubernetes Secretとして指定 • 独⾃ランナーのコンテナイメージをユーザが作成することが可能(ベースイメージあり) Actions Runner Controller(ARC) HelmやManifestで指 定したラベルを指定
  39. Copyright © 2023, Oracle and/or its affiliates. 43 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache Reusable Workflow サービスコンテナ Actions Runner Controller GitHub Actions Toolkit
  40. Copyright © 2023, Oracle and/or its affiliates. 44 GitHub Actions

    Toolkit • https://github.com/actions/toolkit • カスタムアクションを実⾏するためのフレームワーク • 以下のライブラリを提供(⼀部) • actions/core -> ⼊出⼒、ロギング、Secretや 環境変数の提供 • actions/cache -> 依存関係やビルド結果の キャッシュ機能の提供 • Dockerコンテナとして利⽤することも可能 • コンテナイメージのビルドなどが発⽣するため、ラ ンナー上で直接アクションを実⾏する⽅が⾼速 • GitHub Marketplaceで公開可能 • ”action.yml”というアクションのメタデータファイル も⼀緒に公開(アクションの⼊出⼒など) GitHub Actions Toolkit
  41. Copyright © 2023, Oracle and/or its affiliates. 45 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどうすれば…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifact/Cache Reusable Workflow サービスコンテナ Actions Runner Controller GitHub Actions Toolkit GitHub Packages/Secrets
  42. Copyright © 2023, Oracle and/or its affiliates. 46 GitHub Packages

    • ソフトウェアパッケージのホスティングサービス • プライベート/パブリックいずれも利⽤可能 • GitHub ActionsをはじめとしてGitHub API、 webhookなどから利⽤することも可能 • npm、RubyGems、Maven、Gradle、 Dockerなどに対するパッケージレジストリが利 ⽤可能 • GitHub Packagesが提供するコンテナレジスト リは”https://ghcr.io”で利⽤可能 • 認証はGITHUB_TOKENかParsonal Access Token(PAT)を利⽤ GitHub Packages
  43. Copyright © 2023, Oracle and/or its affiliates. 47 Secrets •

    Organization、レポジトリ、環境変数に作成するク レデンシャルなどの機密性の⾼い変数を管理する仕 組み • 変数を暗号化して提供 • Organizationに対して作成したSecretはアク セスポリシーを利⽤して制御することが可能 • 複数のレポジトリでSecretを共有可能 • シークレットの作成はUIから簡単に作成可能 • GitHub Actionsなどの実⾏ログにシークレットが含 まれる場合、その内容を⾃動的に削除 • 最⼤で1000のOrganizationシークレット、100のリ ポジトリシークレット、100の環境変数シークレットを 格納可能 Secrets
  44. Copyright © 2023, Oracle and/or its affiliates. 48 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどうすれば…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache Reusable Workflow サービスコンテナ Actions Runner Controller GitHub Actions Toolkit GitHub Packages/Secrets
  45. Copyright © 2023, Oracle and/or its affiliates. 50 • ランナーって常に⼀つの環境しか選択できない??

    CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどうすれば…?? 今回のデモで利⽤する機能 マトリクス戦略 GitHub Artifacts/Cache Reusable Workflow サービスコンテナ Actions Runner Controller GitHub Actions Toolkit GitHub Packages/Secrets
  46. Copyright © 2023, Oracle and/or its affiliates. 51 今回のデモアプリ環境 OCI

    Region Availability Domain 1 Fault Domain 1 Fault Domain 2 Fault Domain 3 VCN LB Subnet 10.0.20.0/24 K8s API Subnet 10.0.0.0/28 Node Subnet 10.0.10.0/24 Container Engine for Kubernetes Worker Nodes Service Gateway Internet Gateway NAT Gateway MySQL Database System ARC on OKE…!! デモ ソースコード GitHub Packages GitHub Actions pull pull polling Push polling
  47. Copyright © 2023, Oracle and/or its affiliates. 52 今回のワークフロー GoアプリとNext.jsアプリの起動

    Goは3バージョンでのマトリクス戦略でテスト MySQLをサービスコンテナとして起動しE2Eテスト GoアプリとNext.jsアプリのコンテナビルド ビルド時はDocker Buildxを利用したCacheを利用 コンテナのPush先はGitHub Packages(GHCR) 専用のアクションを利用したOKEデプロイ OCIのクレデンシャルはGitHub Secretsを利用 Reusable Workflowでの呼び出し OKE上のPodをランナーとして利用(Actions Runner Controller) デモ ソースコード
  48. Copyright © 2023, Oracle and/or its affiliates. 53 OCI •

    OCI CLI、OCIR、OKEに関するアクション • https://github.com/oracle-actions AWS • ECR、ECSなどのアクション多数 • https://github.com/aws-actions • 2023/7/7にCode BuildでGitHub Actionsの利⽤がサポート • https://aws.amazon.com/jp/about-aws/whats-new/2023/07/aws-codebuild-github-actions/ Azure • Azure Functions、Azure Machine Learningなどのアクション多数 • https://learn.microsoft.com/ja-jp/azure/developer/github/github-actions Google Cloud • Cloud Storage、 Cloud Runなどのアクション多数 • https://github.com/google-github-actions 【参考】GitHub Actionsから各種クラウドサービスの操作
  49. Copyright © 2023, Oracle and/or its affiliates. 54 act •

    https://github.com/nektos/act • Dockerをローカルで起動して実⾏する仕組み • Linuxの場合はDocker Engine、デスクトップの場合はDocker Desktopなどが必要 • Podmanはサポートしていない • 実装はGo 【参考】ローカルでのGitHub Actionsのテスト – act –
  50. Copyright © 2023, Oracle and/or its affiliates. 56 GitHub Actions

    • ソースコード管理プラットフォームのデファクト・スタンダードであるGitHubが提供するCI/CDツール • 任意のイベントを契機に複数のスクリプトやアクションなどのジョブを実⾏し、ワークフローを実⾏可能 • 各ジョブの実⾏基盤はGitHubがホスティングするものとユーザ⾃⾝がホスティングするセルフホステッドランナーが存在 • ワークフローの定義によってはスケジュールや⼿動で実⾏することも可能 GitHub Actionsをさらに使いこなすために • CIの成果物やビルドの⾼速化を実現する⼿段の⼀つであるGitHub Artifact/Cache • 作成したワークフローを容易に再利⽤するための仕組みであるReusable Workflow • CI内でテストなどを実⾏する際にデータベースなどを気軽に構築できる仕組み、サービスコンテナ • GitHub Actionsでビルドした成果物やクレデンシャルな情報を管理するためのGitHub Packages/Secrets まとめ
  51. Copyright © 2023, Oracle and/or its affiliates. 57 ドキュメント •

    https://docs.github.com/ja/actions 書籍 • Automating Workflows with GitHub Actions • https://www.packtpub.com/product/automating-workflows-with-github-actions/9781800560406 • Learning GitHub Actions for DevOps CI/CD • https://learning.oreilly.com/videos/learning-github-actions/9781837639137/ • Learning GitHub Actions(Early Release) • https://learning.oreilly.com/library/view/learning-github-actions/9781098131067/ ソースコード • https://github.com/oracle-japan/ochacafe-github-actions 参考資料