dotnet-add-ci について
既存の.NETリポジトリにCI/CDのスターターワークフローを追加するスキルです。GitHub ActionsまたはAzure DevOpsの手掛かりを検出し、ビルド、テスト、任意のパッケージ作成を行うテンプレートを生成します。
主な機能
- 01GitHub ActionsまたはAzure DevOpsの検出
- 02ビルドとテストのスターターワークフロー生成
- 03NuGetパックと成果物のステップ追加
- 04Windows専用プロジェクト向けの例
- 05ローカルでのワークフロー検証手順
活用シーン
- 01.NETリポジトリへの初期CI追加
- 02ビルドとテストのパイプライン作成
- 03ライブラリプロジェクトのNuGetパック
- 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 公開
- コンテナーイメージのビルド
- コードカバレッジのレポートと適用