mcpField
D
dotnet-add-ci

dotnet-add-ci

github.com/wshaddixクラウド・DevOps8674 回インストール35 週間前に更新
リポジトリ

dotnet-add-ci について

既存の.NETリポジトリにCI/CDのスターターワークフローを追加するスキルです。GitHub ActionsまたはAzure DevOpsの手掛かりを検出し、ビルド、テスト、任意のパッケージ作成を行うテンプレートを生成します。

主な機能

  1. 01GitHub ActionsまたはAzure DevOpsの検出
  2. 02ビルドとテストのスターターワークフロー生成
  3. 03NuGetパックと成果物のステップ追加
  4. 04Windows専用プロジェクト向けの例
  5. 05ローカルでのワークフロー検証手順

活用シーン

  1. 01.NETリポジトリへの初期CI追加
  2. 02ビルドとテストのパイプライン作成
  3. 03ライブラリプロジェクトのNuGetパック
  4. 04Windowsワークロード向けのスターターパイプライン調整

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wshaddix/dotnet-skills --skill dotnet-add-ci

インストール後、Claude Code で/dotnet-add-ciを入力して読み込まれたか確認します。

詳細

dotnet-add-ci

既存の .NET プロジェクトに、CI/CD のスターターワークフローを追加します。ホスティングプラットフォーム(GitHub Actions または Azure DevOps)を検出し、ビルド、テスト、パックに適したスターターワークフローを生成します。

対象範囲: このスキルが提供するのはスターターテンプレートのみです。再利用可能なワークフローの合成、マトリックスビルド、デプロイパイプライン、リリース自動化、環境の昇格など、高度な CI/CD パターンについては、[skill:dotnet-gha-patterns]、[skill:dotnet-ado-patterns]、および関連する CI/CD 詳細スキルを参照してください。

前提条件: ワークフローで使用する SDK バージョンを特定するため、先に [skill:dotnet-version-detection] を実行してください。ソリューションの構成を把握するには、[skill:dotnet-project-analysis] を実行してください。

相互参照: ビルドプロパティの配置については [skill:dotnet-project-structure] を、これらのワークフローでビルドするプロジェクト構成の生成については [skill:dotnet-scaffold-project] を参照してください。


プラットフォームの検出

既存のリポジトリの指標から CI プラットフォームを検出します。

指標プラットフォーム
.github/ ディレクトリが存在するGitHub Actions
azure-pipelines.yml が存在するAzure DevOps
.github/workflows/ に YAML ファイルがあるGitHub Actions(設定済み)
どちらも存在しない対象プラットフォームをユーザーに確認する

GitHub Actions のスターターワークフロー

.github/workflows/build.yml を作成します。

name: Build and Test

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

permissions:
  contents: read

env:
  DOTNET_NOLOGO: true
  DOTNET_CLI_TELEMETRY_OPTOUT: true
  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          global-json-file: global.json

      - name: Restore
        run: dotnet restore --locked-mode

      - name: Build
        run: dotnet build --no-restore -c Release

      - name: Test
        run: dotnet test --no-build -c Release --logger trx --results-directory TestResults

      - name: Upload test results
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: test-results
          path: TestResults/**/*.trx
主な判断の説明
  • global-json-file — リポジトリの global.json を使って、指定された SDK バージョンをインストールします。プロジェクトに global.json がない場合は、dotnet-version: '10.0.x'(または適切なバージョン)に置き換えてください。
  • --locked-mode — packages.lock.json ファイルを確実に使用し、最新でない場合は失敗させます。プロジェクトでロックファイルを使用していない場合は、通常の dotnet restore に置き換えてください。
  • -c Release — Release モードでビルドし、ContinuousIntegrationBuild が有効になるようにします。
  • permissions: contents: read — 最小権限の原則に従います。
  • 環境変数 — ログに出力される .NET CLI のノイズを抑制します。
NuGet パックの追加(ライブラリ)

NuGet に公開するプロジェクトでは、パックのステップを追加します。

      - name: Pack
        run: dotnet pack --no-build -c Release -o artifacts

      - name: Upload packages
        uses: actions/upload-artifact@v4
        with:
          name: nuget-packages
          path: artifacts/*.nupkg

Azure DevOps のスターターパイプライン

リポジトリのルートに azure-pipelines.yml を作成します。

trigger:
  branches:
    include:
      - main

pr:
  branches:
    include:
      - main

pool:
  vmImage: 'ubuntu-latest'

variables:
  DOTNET_NOLOGO: true
  DOTNET_CLI_TELEMETRY_OPTOUT: true
  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
  buildConfiguration: 'Release'

steps:
  - task: UseDotNet@2
    displayName: 'Setup .NET SDK'
    inputs:
      useGlobalJson: true

  - script: dotnet restore --locked-mode
    displayName: 'Restore'

  - script: dotnet build --no-restore -c $(buildConfiguration)
    displayName: 'Build'

  - task: DotNetCoreCLI@2
    displayName: 'Test'
    inputs:
      command: 'test'
      arguments: '--no-build -c $(buildConfiguration) --logger trx'
      publishTestResults: true
NuGet パックの追加(ライブラリ)
  - script: dotnet pack --no-build -c $(buildConfiguration) -o $(Build.ArtifactStagingDirectory)
    displayName: 'Pack'

  - task: PublishBuildArtifacts@1
    displayName: 'Publish NuGet packages'
    inputs:
      pathToPublish: '$(Build.ArtifactStagingDirectory)'
      artifactName: 'nuget-packages'

スターターワークフローの調整

複数の TFM を対象とするプロジェクト

プロジェクトが複数の TFM を対象としている場合、既定のワークフローは変更せずに使用できます。dotnet build と dotnet test がすべての TFM を自動的に処理するため、スターターでマトリックスは不要です。

Windows 専用プロジェクト(MAUI、WPF、WinForms)

ランナーを変更します。

# GitHub Actions
runs-on: windows-latest

# Azure DevOps
pool:
  vmImage: 'windows-latest'
ソリューションフィルター

リポジトリに複数のソリューションがある場合や、ソリューションフィルターを使用している場合:

      - name: Build
        run: dotnet build MyApp.slnf --no-restore -c Release

検証

ワークフローを追加した後、ローカルで検証します。

# GitHub Actions — validate YAML syntax
# Install: gh extension install moritztomasi/gh-workflow-validator
gh workflow-validator .github/workflows/build.yml

# Or simply verify the build steps work locally
dotnet restore --locked-mode
dotnet build --no-restore -c Release
dotnet test --no-build -c Release

ブランチをプッシュし、PR を開いてワークフローを実行します。


次のステップ

このスターターでは、ビルド、テスト、パックを扱います。高度なシナリオについては、CI/CD 詳細スキルを参照してください。

  • 再利用可能な複合アクションとワークフローテンプレート
  • OS/TFM の組み合わせを対象とするマトリックスビルド
  • 環境ゲートを備えたデプロイパイプライン
  • 署名付きの NuGet 公開
  • コンテナーイメージのビルド
  • コードカバレッジのレポートと適用

参考資料

コメント