MS_GitHubActions - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

GitHub Actions

概要

  • 2019/11/13 の GitHub Universe の
    タイミングで GitHub Actions v2 が GA になる予定

  • これに向けて、GitHub Actions のバックエンドが
    Azure Pipelines(CI/CD パイプライン を参照)の
    fork 版になったもよう。

詳細

  • GitHub Actions v1 から大きな変更

    • コンセプト(ワークフローから CI/CD を前面に)
    • マルチプラットフォーム対応(Windows と macOS を追加)
    • HCL(HashiCorp 社製の設定言語)から YAML へ。
  • Azure Pipelines(CI/CD パイプライン を参照)と比べ、
    YAML の記述などで異なるところがある。

  • 見方によっては、Azure Pipelines の
    ロックインされてない雰囲気の販売チャネルと言えそう。

補足(この見立てはその後どうなったか): 「Azure Pipelines の
ロックインされていない販売チャネル」という観察は鋭いが、
実際には主従が逆転した

【その後の展開】★
   2019年11月  GitHub Actions v2 GA(原文の時点)
   2020年〜    急速に普及。OSS の CI が
               Travis CI / CircleCI から大量移行
               (Travis CI の無料枠縮小も後押しした)
   現在        【GitHub Actions が事実上の標準】★
               → Microsoft 内部でも
                 .NET / VS Code 等の主要 OSS が採用
               → Azure Pipelines は
                 「既存資産の維持」の色が濃くなった

【アーキテクチャの共通点(原文の指摘どおり)】
   ・ランナー(エージェント)が
     ジョブを取りに行くプル型
   ・YAML でジョブ/ステップを記述
   ・タスク(Actions)を再利用する
   → 実際、GitHub Actions のランナーは
     【Azure Pipelines のエージェントから派生】している ★
【YAML の主な違い】
   Azure Pipelines            GitHub Actions
     trigger:                   on:
     pool: vmImage:             runs-on:
     steps: - task: ...@1       steps: - uses: owner/repo@v4
     variables:                 env:
     $(var)                     ${{ env.VAR }} / ${{ secrets.X }}
     stages / jobs              jobs(needs: で依存を書く)

補足(現在の GitHub Actions で押さえる点): 導入時に効いてくる要点。

【基本構造】★
   .github/workflows/ci.yml

     name: CI
     on:
       push:        { branches: [main] }
       pull_request: {}
       workflow_dispatch: {}      # 手動実行 ★
     jobs:
       build:
         runs-on: ubuntu-latest   # windows-latest / macos-latest
         steps:
           - uses: actions/checkout@v4
           - uses: actions/setup-dotnet@v4
             with: { dotnet-version: '8.0.x' }
           - run: dotnet test --logger trx

【.NET 開発でよく使うもの】
   actions/checkout            … リポジトリ取得
   actions/setup-dotnet        … SDK 導入 ★
   actions/cache               … NuGet キャッシュ
   actions/upload-artifact     … 成果物の保存
   docker/build-push-action    … コンテナのビルド/push
【セキュリティ上の要点】★
 ① 【サード パーティ Action は SHA で固定する】
      uses: foo/bar@a1b2c3d...   (タグは動かされうる)
      → 供給網攻撃の入口になる
 ② 【GITHUB_TOKEN の権限を絞る】
      permissions:
        contents: read           # 既定を read にする ★
 ③ 【pull_request_target を安易に使わない】
      → フォークからの PR に
        シークレットが渡ってしまう典型的な事故 ★
 ④ 【OIDC でクラウドに認証する】
      → 長期のアクセス キーを Secrets に置かず、
        Azure / AWS へ【短命トークン】で認証する
      → 現在の推奨 ★
【コストの注意】
   ・パブリック リポジトリ  → 無料
   ・プライベート           → 無料枠(分単位)を超えると従量
   ・【Windows は 2 倍、macOS は 10 倍】の分数を消費する ★
     → Linux で済む処理は Linux で回す
   ・大量に回すなら【self-hosted runner】
     → ただし【パブリック リポジトリでは使わない】
       (フォークからの PR で任意コードが走る)★

参考

補足(一次情報): 公式ドキュメントは以下。


Tags: 移行, .NET開発, 構成管理ツール, CI, IaC

⚠️ **GitHub.com Fallback** ⚠️