mcpField
D
dotnet-add-ci

dotnet-add-ci

github.com/wshaddix云与 DevOps8674 次安装35 周前更新
代码仓库

关于 dotnet-add-ci

为现有 .NET 仓库添加 CI/CD 入门工作流的技能。它根据仓库标记识别 GitHub Actions 或 Azure DevOps,并生成构建、测试及可选打包流程,范围仅限入门模板。

主要功能

  1. 01识别 GitHub Actions 或 Azure DevOps
  2. 02生成构建和测试入门工作流
  3. 03添加 NuGet 打包与制品步骤
  4. 04提供仅限 Windows 项目的示例调整
  5. 05提供本地工作流验证步骤

适用场景

  1. 01为 .NET 仓库添加初始 CI
  2. 02创建构建和测试流水线
  3. 03将库项目打包为 NuGet
  4. 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 模式下构建,以启用 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 发布
  • 容器映像构建
  • 代码覆盖率报告与强制执行

参考资料

评论

支持 Markdown