Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GitHub Actionsを使いこなせ!/Get Started GitHub Actions
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
oracle4engineer
PRO
August 09, 2023
Video
Technology
11k
31
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHub Actionsを使いこなせ!/Get Started GitHub Actions
OCHaCafe Season7 #3
の資料です.
oracle4engineer
PRO
August 09, 2023
Video
More Decks by oracle4engineer
See All by oracle4engineer
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
Deep Data Security 機能解説
oracle4engineer
PRO
2
300
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
1
620
Oracle AI Databaseデータベース・サービスのメンテナンス(BaseDB/ExaDB-D/ExaDB-XS)
oracle4engineer
PRO
4
1.9k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.6k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2.2k
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3.2k
CrossplaneによるCloud Native Control Plane
oracle4engineer
PRO
0
130
Other Decks in Technology
See All in Technology
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
260
穢れた技術選定について
watany
12
2.3k
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
110
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
880
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
150
SRE Lounge Hiroshimaへの招待
grimoh
0
670
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
740
知らん間に、回ってる
ming_ayami
0
610
公式ドキュメントの歩き方etc
coco_se
0
110
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
640
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
230
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
150
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
260
Side Projects
sachag
455
43k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
940
Deep Space Network (abreviated)
tonyrice
0
220
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
260
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Scaling GitHub
holman
464
140k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
It's Worth the Effort
3n
188
29k
New Earth Scene 8
popppiees
3
2.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Transcript
GitHub Actionsを使いこなせ!! CI/CDツールの決定版をマスターしよう!! Takuya Niita Oracle Corporation Japan Aug 09,
2023 Oracle Cloud Hangout Café – Season 7 #3
Copyright © 2023, Oracle and/or its affiliates. 2 1. GitHub
Actionsって何者︖ 2. GitHub Actionsの構成要素と基本的な使い⽅ 3. GitHub Actionsの応⽤ 4. デモ 5. まとめ Agenda
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
Copyright © 2023, Oracle and/or its affiliates. 4 GitHub Actionsって何者︖
Oracle Cloud Hangout Café – Season 7 #3
Copyright © 2023, Oracle and/or its affiliates. 5 システムやアプリケーション開発でのワークフローといえば・・・ CI/CD(継続的インテグレーション/デリバリ)
GitHub Actionsの世界に⼊る前に・・・ CI/CD環境を整備することで、早期バグの発⾒による品質向上、検証時間の短縮によるリリーススピード向上、開発者 が開発に集中できる環境でより良い開発サイクルを実現 ソースコード更新 アプリケーションビルド ユニットテスト コンテナイメージビルド コンテナイメージ 脆弱性スキャン コンテナイメージ レジストリ格納 コンテナアプリケーション開発を例としたCI作業(ジョブorタスク) ワークフロー
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
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”
Copyright © 2023, Oracle and/or its affiliates. 8 • GitHubに組み込まれているため、GitHubユーザに対する⾯倒な設定が不要
• ただし、CI/CDパイプラインで実⾏する内容によってはクレデンシャルなどの追加設定は必要 • GitHub上のあらゆるイベントに対応し、パイプラインをトリガー可能 • あるレポジトリで作成したワークフローを他のレポジトリで再利⽤可能 • 無償枠が結構広い GitHub Actionsの特⻑ ・ ・ ・ ・ バージョン管理にGitHubを利用しているなら使わない理由はない!! 一緒に 「完全に理解」しましょう…!!
Copyright © 2023, Oracle and/or its affiliates. 9 OCIチュートリアルやOCI活⽤資料集でも使ってます…!! Jekyllのビルド、GitHub
Pagesへのデプロイ、developブランチ更新時の⾃動Pull Request作成、社内メンバーのレ ビューワーの⾃動割り当て…etc 今⽇のトピック、GitHub Actions…実は…
Copyright © 2023, Oracle and/or its affiliates. 10 GitHub Actionsの構成要素と基本的な使い⽅
Oracle Cloud Hangout Café – Season 7 #3
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 ・・・ ・ ・ ・ ・ ・ ・
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
Copyright © 2023, Oracle and/or its affiliates. 13 基本を踏まえて簡単にワークフローの定義 ワークフロー
イベント ランナー アクション ジョブ(複数可、並列実行可) デモ ソースコード
Copyright © 2023, Oracle and/or its affiliates. 14 基本を踏まえて簡単にワークフローの定義 ランナー
アクション ワークフロー イベント ジョブ(複数可、並列実行可) ここを解説します…!!
Copyright © 2023, Oracle and/or its affiliates. 15 GitHub Actionsのトリガーにできるイベント
• レポジトリ/ブランチへのプッシュ • プルリクエスト • Issueの起票やDiscussionの作成 • パッケージ(成果物、コンテナイメージなど)の公開 • 特定のリリースタグで絞ることも可能 • スケジュール実⾏ • GitHub API/CLI、UIでの実⾏(⼿動) イベント ・ ・ ・ ここをもう少し掘り下げます..!!
Copyright © 2023, Oracle and/or its affiliates. 16 イベントの定義のしかた 先ほどのデモ
on: [trigger-event]: [conditions] [trigger-event] • レポジトリ/ブランチへのPush: “push” • プルリクエスト: “pull_request” • スケジュール実行: “schedule” • 手動実行: “workflow_dispatch” [conditions] • レポジトリ/ブランチへのPush: ブランチ名やファイルパス • プルリクエスト: プルリクエストのアクティビティやブランチ名 • スケジュール実行: cron式 • 手動実行: 実行時の引数
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.**
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/”で始まる ブランチへのプルリクエ ストの作成をトリガー
Copyright © 2023, Oracle and/or its affiliates. 19 スケジュールによるイベント 先ほどのデモ
on: schedule: - cron: '30 5,17 * * *' 5:30と17:30(UTC、 現状は変更不可)にト リガー
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ではこんな インタフェースが 表示されます 実 行
Copyright © 2023, Oracle and/or its affiliates. 21 基本を踏まえて簡単にワークフローの定義 ランナー
アクション ワークフロー イベント ジョブ(複数可、並列実行可) ここを解説します…!!
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の設定も可能
Copyright © 2023, Oracle and/or its affiliates. 23 セルフホステッドランナー •
GitHub Actionsからジョブを実⾏するためのデプロイ、 管理ツール、HW、OS、ミドルウェアなどをユーザ⾃⾝ で細かく制御可能 • 以下のようなユースケースに最適 • より⼤規模なジョブを実⾏するための処理能⼒を 満たすためのハードウェア構成 • ローカルネットワークでのソフトウェアのインストール • GitHubが提供していないOSが利⽤可能 • オンプレミスのBM/VMやクラウド上のコンピュートイン スタンスを利⽤可能 • インスタンス上にセルフホステッドランナー⽤のエージェ ントを起動(インストールコマンドはGitHub側で提供) ランナーとセルフホステッドランナーの違い 【参考】セルフホステッドランナー ランナー セルフ ホステッドランナー OS、パッケージなど 自動更新 エージェントの自動更新 のみ メンテナンス GitHub ユーザ責任 インスタンス 都度作成 状態保持(常時起動) 料金 無償枠あり インスタンスのコスト有
Copyright © 2023, Oracle and/or its affiliates. 24 基本を踏まえて簡単にワークフローの定義 ランナー
アクション ワークフロー イベント ジョブ(複数可、並列実行可) ここを解説します…!!
Copyright © 2023, Oracle and/or its affiliates. 25 アクション •
GitHub Actions⽤のカスタムアプリケーション • 複雑であったり頻繁に必要とされる処理を再利⽤ 可能 • GitHub Actionsの具体例 • GitレポジトリのPull • クラウドプロバイダーに対する認証 • 各種⾔語環境のセットアップなど • GitHub Marketplaceに再利⽤可能なアクションが 豊富に存在 • 約20,000弱(2023/8時点)のアクションが公開 • CIに利⽤できる便利なツールやミドルウェア製品 と連携可能なツールなどがある アクション
Copyright © 2023, Oracle and/or its affiliates. 26 カスタムアクション •
GitHub APIやサードパーティAPIなどの⽅法でカスタムコードを実装 • 例) npmモジュールの公開、SMSアラートの送信 • 実装したカスタムアクションは組織内で共有したり、GitHub Marketplaceで公開可能 • アクションを全てのユーザと共有するにはレポジトリをパブリックにすることが必須 • アクションの実⾏⽅法はランナー上もしくはDockerコンテナ • Node.jsの場合はGitHub Actions Toolkitで提供しているtoolkitを利⽤すると開発効率アップ!! カスタムアクション
Copyright © 2023, Oracle and/or its affiliates. 27 パラレル実⾏ •
GitHub Actionsのジョブはデフォルトでパラレル実⾏ • ”needs”フィールドに先⾏するジョブを⼀つずつ書いていけばシーケンシャルに実⾏ • 複数のジョブを並列実⾏する場合はそれぞれの後発ジョブに先⾏ジョブを指定(fork) • ”needs”フィールドに先⾏するジョブを指定することでジョブを待ち合わせ(join) 【参考】パラレル実⾏と待ち合わせ Build TestA TestB Deploy
Copyright © 2023, Oracle and/or its affiliates. 28 おさらいデモ ランナー
アクション ワークフロー トリガーイベント ジョブ(複数可、並列実行可) デモ ソースコード
Copyright © 2023, Oracle and/or its affiliates. 29 • ランナーって常に⼀つの環境しか選択できない??
CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ 後半でやっていきます…!!
Copyright © 2023, Oracle and/or its affiliates. 30 GitHub Actionsの応⽤
Oracle Cloud Hangout Café – Season 7 #3
Copyright © 2023, Oracle and/or its affiliates. 31 • ランナーって常に⼀つの環境しか選択できない??
CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略
Copyright © 2023, Oracle and/or its affiliates. 32 マトリクス戦略 •
1つのジョブ定義で変数の組み合わせに基づいて複数のジョブ実⾏を⾃動的に作成 ex) 複数の⾔語バージョンでのテスト、複数OSでのテストなど マトリクス戦略 1次元マトリクス 多次元マトリクス OS2パターン × Goバージョン3パターン をパラレルに実行
Copyright © 2023, Oracle and/or its affiliates. 33 • ランナーって常に⼀つの環境しか選択できない??
CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache
Copyright © 2023, Oracle and/or its affiliates. 34 GitHub Artifact
• ジョブの完了後の以下の成果物をGitHub上のスト レージに永続化 • ログファイルやコアダンプ • テスト結果、スクリーンショット • バイナリ • 永続化した成果物は同じワークフロー内の別のジョ ブと共有可能 • 各成果物はデフォルトで90⽇間保存(カスタマイズ 可能) • 成果物のアップロードやダウンロードには専⽤の Actionを利⽤ GitHub Artifacts
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)によって キャッシュヒット有無を確認し、 任意の処理を実行可能
Copyright © 2023, Oracle and/or its affiliates. 36 • ランナーって常に⼀つの環境しか選択できない??
CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache Reusable Workflow
Copyright © 2023, Oracle and/or its affiliates. 37 Reusable Workflows
• あるワークフローから別のワークフローを呼び出すこと が可能 • アクションと同様に同様の処理の重複を回避 • 利⽤する側のワークフローは”呼び出し元ワークフ ロー”と呼ぶ • 1つの”呼び出し元ワークフロー”から複数の Reusable Workflowsを呼ぶことも可能 • 呼び出されたReusable Workflowsは”呼び出 し元ワークフロー”の⼀部のように振る舞う • Reusable Workflowsから別のReusable Workflowsを呼び出すことも可能 • 最⼤4つの階層まで Reusable Workflows Reusable Workflowsの証 変数などを 渡すことも可能
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
Copyright © 2023, Oracle and/or its affiliates. 39 • ランナーって常に⼀つの環境しか選択できない??
CIを複数パターンで実⾏したい時は…?? • CIを回す時に成果物の保存やキャッシュ機構的なものはないの…?? • ワークフローを再利⽤したいときはYAMLファイルをコピーするしかないの…?? • CIでデータベースを⽴ててテストできたりするの…?? • セルフホステッドランナーはKubernetesでも動作するらしいけど…?? • カスタムアクション、何となくわかったけど、実際どうやって実装すればいいの…?? • GitHub Actionsでビルドした成果物やクレデンシャルな情報はどこで管理すればいいの…?? GitHub Actionsをさらに使いこなすために・・・ マトリクス戦略 GitHub Artifacts/Cache Reusable Workflow サービスコンテナ
Copyright © 2023, Oracle and/or its affiliates. 40 サービスコンテナ •
ワークフロー内でジョブが必要とするサービスをホストするためのDockerコン テナ • データベースを構築したり、キャッシュストアを構築したり… • ワークフロー内のそれぞれのジョブに対して設定 • ジョブが完了した時点でDockerコンテナは破棄 • Linuxのランナーのみ対応 • サービスコンテナへのアクセスは「ジョブをコンテナ内で実⾏する」パターンと 「ジョブをランナー上で直接実⾏する」パターンで異なる • ジョブをコンテナ内で実⾏している(後述)場合はラベル名をホストとして アクセス可能(ラベル名を利⽤してアクセス) • ジョブをランナー上で直接実⾏している場合はlocalhost:<port>でア クセス(ポートフォワードを利⽤してアクセス) サービスコンテナ
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
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で指 定したラベルを指定
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
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
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
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
Copyright © 2023, Oracle and/or its affiliates. 47 Secrets •
Organization、レポジトリ、環境変数に作成するク レデンシャルなどの機密性の⾼い変数を管理する仕 組み • 変数を暗号化して提供 • Organizationに対して作成したSecretはアク セスポリシーを利⽤して制御することが可能 • 複数のレポジトリでSecretを共有可能 • シークレットの作成はUIから簡単に作成可能 • GitHub Actionsなどの実⾏ログにシークレットが含 まれる場合、その内容を⾃動的に削除 • 最⼤で1000のOrganizationシークレット、100のリ ポジトリシークレット、100の環境変数シークレットを 格納可能 Secrets
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
Copyright © 2023, Oracle and/or its affiliates. 49 デモ Oracle
Cloud Hangout Café – Season 7 #3
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
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
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) デモ ソースコード
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から各種クラウドサービスの操作
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 –
Copyright © 2023, Oracle and/or its affiliates. 55 まとめ Oracle
Cloud Hangout Café – Season 7 #3
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 まとめ
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 参考資料
None