关于 dotnet-add-ci
为现有 .NET 仓库添加 CI/CD 入门工作流的技能。它根据仓库标记识别 GitHub Actions 或 Azure DevOps,并生成构建、测试及可选打包流程,范围仅限入门模板。
主要功能
- 01识别 GitHub Actions 或 Azure DevOps
- 02生成构建和测试入门工作流
- 03添加 NuGet 打包与制品步骤
- 04提供仅限 Windows 项目的示例调整
- 05提供本地工作流验证步骤
适用场景
- 01为 .NET 仓库添加初始 CI
- 02创建构建和测试流水线
- 03将库项目打包为 NuGet
- 04为 Windows 工作负载调整入门流水线
安装
复制下面的命令,在终端中运行。
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 深度技能。
**前置条件:**先运行 [skill:dotnet-version-detection],确定工作流所需的 SDK 版本。运行 [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 模式下构建,以启用ContinuousIntegrationBuildpermissions: 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 发布
- 容器映像构建
- 代码覆盖率报告与强制执行