# PublishToNuget **Repository Path**: apq/PublishToNuget ## Basic Information - **Project Name**: PublishToNuget - **Description**: 构建一个Docker镜像,镜像提供以下功能: 编译.net代码、打包为Nuget包、发布到Nuget - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-20 - **Last Updated**: 2025-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # .NET NuGet 通用打包发布 Docker 镜像 一个通用的 Docker 镜像,用于自动拉取任意 .NET 项目仓库、打包 NuGet 包并发布到 NuGet 源。 ## 特性 - 支持任意 .NET 项目(包含 .csproj 或 .sln) - 基于 .NET 9 SDK,向下兼容 net6.0/net7.0/net8.0/net9.0 - 支持指定 Git 分支或标签 - 支持私有 Git 仓库(HTTPS 用户名密码 或 SSH 密钥) - 支持自定义 NuGet 源 - 可选择仅打包或打包并发布 ## 构建镜像 ```bash docker build -t amwpfiqvy/publish-to-nuget . ``` ## 使用方法 ### 仅打包(不发布) ```bash docker run --rm \ -e GIT_REPO_URL=https://github.com/your-username/your-project.git \ -e SKIP_PUBLISH=true \ -v $(pwd)/output:/build/output \ amwpfiqvy/publish-to-nuget ``` ### 打包并发布 ```bash docker run --rm \ -e GIT_REPO_URL=https://github.com/your-username/your-project.git \ -e NUGET_API_KEY=your-nuget-api-key \ amwpfiqvy/publish-to-nuget ``` ### 指定标签版本 ```bash docker run --rm \ -e GIT_REPO_URL=https://github.com/your-username/your-project.git \ -e GIT_TAG=v1.0.0 \ -e NUGET_API_KEY=your-nuget-api-key \ amwpfiqvy/publish-to-nuget ``` ### 指定分支 ```bash docker run --rm \ -e GIT_REPO_URL=https://github.com/your-username/your-project.git \ -e GIT_BRANCH=develop \ -e NUGET_API_KEY=your-nuget-api-key \ amwpfiqvy/publish-to-nuget ``` ### 私有仓库(HTTPS 方式) 使用用户名和密码/访问令牌: ```bash docker run --rm \ -e GIT_REPO_URL=https://gitee.com/your-username/private-project.git \ -e GIT_USERNAME=your-username \ -e GIT_PASSWORD=your-password-or-token \ -e NUGET_API_KEY=your-nuget-api-key \ amwpfiqvy/publish-to-nuget ``` ### 私有仓库(SSH 方式) 使用 SSH 密钥(支持 `git@` 格式地址): ```bash docker run --rm \ -e GIT_REPO_URL=git@gitee.com:your-username/private-project.git \ -e GIT_SSH_KEY="$(cat ~/.ssh/id_rsa)" \ -e NUGET_API_KEY=your-nuget-api-key \ amwpfiqvy/publish-to-nuget ``` ### 发布到私有 NuGet 源 ```bash docker run --rm \ -e GIT_REPO_URL=https://github.com/your-username/your-project.git \ -e NUGET_API_KEY=your-api-key \ -e NUGET_SOURCE=https://your-private-nuget-server/v3/index.json \ amwpfiqvy/publish-to-nuget ``` ## 环境变量 | 变量名 | 必需 | 默认值 | 说明 | |--------|------|--------|------| | GIT_REPO_URL | 是 | - | Git 仓库地址(支持 `https://` 和 `git@` 格式) | | GIT_BRANCH | 否 | master | Git 分支名称 | | GIT_TAG | 否 | - | Git 标签(优先于分支) | | GIT_USERNAME | 否 | - | Git 用户名(用于 HTTPS 私有仓库) | | GIT_PASSWORD | 否 | - | Git 密码或访问令牌(用于 HTTPS 私有仓库) | | GIT_SSH_KEY | 否 | - | SSH 私钥内容(用于 `git@` 格式的仓库地址) | | NUGET_API_KEY | 发布时必需 | - | NuGet API Key | | NUGET_SOURCE | 否 | https://api.nuget.org/v3/index.json | NuGet 源地址 | | SKIP_PUBLISH | 否 | false | 设置为 true 则跳过发布 | ## CI/CD 集成示例 ### Gitee 流水线 ```yaml steps: - step: build@docker name: build_and_push displayName: 打包并发布NuGet image: your-registry/amwpfiqvy/publish-to-nuget:latest env: GIT_REPO_URL: ${GITEE_REPO_URL} GIT_TAG: ${GITEE_TAG} NUGET_API_KEY: ${NUGET_API_KEY} ``` ### GitHub Actions ```yaml jobs: publish: runs-on: ubuntu-latest steps: - name: Publish NuGet Package run: | docker run --rm \ -e GIT_REPO_URL=${{ github.server_url }}/${{ github.repository }}.git \ -e GIT_TAG=${{ github.ref_name }} \ -e NUGET_API_KEY=${{ secrets.NUGET_API_KEY }} \ amwpfiqvy/publish-to-nuget ``` ### GitLab CI ```yaml publish: image: docker:latest services: - docker:dind script: - docker run --rm -e GIT_REPO_URL=${CI_REPOSITORY_URL} -e GIT_TAG=${CI_COMMIT_TAG} -e NUGET_API_KEY=${NUGET_API_KEY} amwpfiqvy/publish-to-nuget only: - tags ``` ## 输出目录 打包生成的 `.nupkg` 和 `.snupkg` 文件位于容器内的 `/build/output` 目录。 如需保留打包文件,可挂载本地目录: ```bash -v $(pwd)/output:/build/output ``` ## 许可证 MIT License