语义 -- -- 释放 -- -- 核
| 步骤 | 说明 |
|---|---|
verifyConditions | 验证所提供的插件配置的正确性 . |
prepare | 创建 NuGet 软件包. |
publish | 发布创建的 NuGet 软件包 登记. |
安装
将插件安装为开发依赖
npm i -D @droidsolutions-oss/semantic-release-nuget
使用量
插件可以在 语义释放 配置文件数字 :
{
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@droidsolutions-oss/semantic-release-update-file",
"@semantic-release/npm",
"@droidsolutions-oss/semantic-release-nuget",
[
"@semantic-release/git",
{
"assets": ["package.json", "package-lock.json", "CHANGELOG.md", "Directory.Build.props"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
],
"@semantic-release/gitlab"
]
}
提示: 您可以使用 @droidsolutions-oss/ semantic-release-update-file 互联网档案馆的存檔,存档日期2013-12-02 在工程中更新版本编号的插件或 Directory.Build.props 在创建 NuGet 软件包之前的文件.
配置
NuGet 服务器认证
NuGet 服务器认证为 所需经费 并可以通过 环境变量。 。 。 .
环境变量
| 变量 | 说明 |
|---|---|
NUGET_TOKEN | 您想要发布的 NuGet 服务器的 NuGet 令牌, 创建于 NuGet API 密钥页面。 。 。 . |
CI_SERVER_URL | 如果您想要向您的 GitLab 服务器发布, 需要将此设定为您使用的 GitLab 实例的主 URL 。 在 GitLab CI 运行时, 这已经由 GitLab 设置 . |
CI_PROJECT_ID | 如果您要向您的 GitLab 服务器发布, 这需要设置为您想要发布的工程的 Id 。 在 GitLab CI 中运行时, 这已经设置到项目上 由 GitLab 运行的 pipleine . |
CI_JOB_TOKEN | 如果您想向您的 GitLab 服务器发布, 需要设置此选项 。 在 GitLab CI 运行时, 这已经由 GitLab 设置, 但是它只有在发布给同一项目时才有效. |
选项
| 选项 | 说明 | 默认 |
|---|---|---|
nugetRegistries | 要公布的 NuGet 注册配置列表 . | 见下文 |
nugetRegistries[].type | NuGet 注册类型 。 可能值为 nuget, (中文(简体) ), gitlab_private, (中文(简体) ), github。 。 。 . | nuget |
nugetRegistries[].name | 用于记录和从核子识别的来源名称。 相会. | nuget |
nugetRegistries[].url | NuGet 注册的 URL . | https://api.nuget.org/v3/index.json |
nugetRegistries[].user | 要登录 NuGet 注册的用户 . | |
nugetRegistries[].tokenEnvVar | 包含密码或令牌以对 NuGet 注册进行认证的环境变量的名称 . | NUGET_TOKEN 或者说 CI_JOB_TOKEN 为吉特拉布. |
projectPath | 要打包的项目文件的相对路径 。 也可以是一个包括多个工程的阵列. | |
nugetServer | 折旧,使用核子登记 [].url代替。 NuGet 服务器的URL可以将软件包推向. | https://api.nuget.org/v3/index.json |
includeSymbols | 如果选中的话, 将会创建一个带有调试符号的额外包 . | false |
includeSource | 如果真的源代码将包含在软件包中, 当消费者需要调试您的库时会有所帮助 . | false |
dotnet | 如果不是在 PATH 中可执行的 dotnet 路径 . | dotnet |
publishToGitLab | 折旧,取而代之的是核子登记。 如果选中的话, 软件包也将发布到 GitLab 注册 . | false |
usePackageVersion | 如果真实, 从语义发布的新版本将直接交给 dotnet pack 命令,否则则在 csproj 或者说 Directory.Build.props 用于 NuGet 软件包. | false |
skipPublishToNuget | 折旧,取而代之的是核子登记。 如果选中的话, NuGet 软件包将不会发布到 nugetServer。您可以一起使用这个 publishToGitLab 改为 仅限 将您的软件包发布到 GitLab 注册. | false |
gitlabRegistryProjectId | 可设定将软件包发布到不同的 GitLab 项目 。 仅在 publishToGitLab 被设定为真实. | CI_PROJECT_ID |
gitlabUser | 向单独的GitLab项目出版时需要。 如果使用部署令牌,必须给出令牌名称,在使用个人访问令牌时,必须给出用户名. | gitlab-ci-token |
dotnetVerbosity | 可选字符串传递到多特网包命令作为动词参数. 见 动词参数 用于有效值. |
随着2.1.0配置方法的改变. 现在一个 nugetRegistries 可以给出数组来配置每个应公布的软件包.
空配置将导致此默认配置 :
{
"nugetRegistries": [
{
"name": "nuget",
"url": "https://api.nuget.org/v3/index.json",
"tokenEnvVar": "NUGET_TOKEN",
"type": "nuget"
}
]
}
说明: 如果 publishToGitLab 设置环境变量 CI_SERVER_URL, (中文(简体) ), CI_PROJECT_ID 财务报告和审定财务报表 CI_JOB_TOKEN 必须设定。 如果您在 GitLab CI 中运行, 由 GitLab 自动设定 。 核子注册处的配置将附带如下:
{
"name": "gitlab",
"url": "${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/packages/nuget/index.json",
"tokenEnvVar": "CI_JOB_TOKEN",
"type": "gitlab_private"
}
说明: 如果 skipPublishToNuget 设置此软件包将不会发布到正式的 Nuget 服务器。 这只有结合 publishToGitLab。现在已贬值,您应该通过 nugetRegistries 相会.
说明: 当添加时 国家预防机制插件 更新您的 package.json 设置 npmPublish 改为 false 防止语义释放试图发布国家预防机制的套件.
说明: 当您想要将您的软件包发布到不同的 GitLab 项目时 gitlabRegistryProjectId 确保NUGET TOKEN是一个可以访问它和它的标志 gitlabUser 必须设置给属于该符号的用户.
更多信息见下面的配置示例.
版本
在创建的 NuGet 软件包中,版本的设置有两种方式. 最简单的方式(例如不需要任何额外的配置)是设置 usePackageVersion 真实的。 这将使语义释放被计算为下一个版本成为直接作为论据的版本 dotnet pack 命令(通过 -p:PackageVersion=<version> 参数)。 然而, 您的版本的缺点并没有在您的仓库文件中持续 .
将您的软件包版本化的建议方式是将该版本写入您的项目文件中 。 你可以使用一个 目录. 构建.道具 用于为您仓库中的所有工程设置同一版本的文件。 添加一个 VersionPrefix (或 Version标记并使用 语义发布更新文件插件 在创建软件包之前更新版本。 确保 update-file 插件位于 git 插件在单元格中 plugins 列表并添加项目文件或 Directory.Build.props 到资产清单。 见 实例配置 见下文.
配置示例
简单发布到 nuget.org
你不需要任何配置 只要确保 NUGET_TOKEN 环境变量包含一个发布到nuget.org的有效符号.
如果您想要使用另一个环境变量或只是明确配置它,您可以使用:
{
"nugetRegistries": [
{
"name": "nuget",
"url": "https://api.nuget.org/v3/index.json",
"tokenEnvVar": "NUGET_TOKEN",
"type": "nuget"
}
]
}
发布到当前 GitLab 项目
如果您想要不经特殊许可向当前 GitLab 项目发布, 您可以使用以下最小示例 :
{
"nugetRegistries": [
{
"type": "gitlab_private"
}
]
}
这将从 GitLab CI 设置的变量中解决 GitLab 注册 URL :
${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/packages/nuget/index.json它将设定 tokenEnvVar 改为 CI_JOB_TOKEN 足以向当前项目发布软件包.
发布到不同的 GitLab 项目
如果您想要发布到不同的 GitLab 项目中, 您可能需要一个 GitLab 标记, 并有正确的权利 。 将工程 ID 添加到普通配置中 :
{
"gitlabRegistryProjectId": 123,
"nugetRegistries": [
{
"type": "gitlab_private"
}
]
}
这将从 GitLab CI 设置的变量中解决 GitLab 注册 URL :
${CI_SERVER_URL}/api/v4/projects/123/packages/nuget/index.json它将设定 tokenEnvVar 改为 NUGET_TOKEN 足以向当前项目发布软件包。 您也可以设置 tokenEnvVar 如果您想要使用不同的环境变量,您也可以使用.
发布到 GitHub 软件包
要发布到 GitHub 软件包, 您可以使用 github 类型.
{
"nugetRegistries": [
{
"type": "github"
}
]
}
这将自动解决注册 URL 到 https://nuget.pkg.github.com/${GITHUB_REPOSITORY_OWNER}/index.json。 。 。 .
它会用 GITHUB_TOKEN 用于认证和 GITHUB_ACTOR 作为用户名.
确保你的工作流程 packages: write 允许.
向多个登记处公布
如果您想向不同的注册点发布, 您应该为每个注册点设定符号 EnvVar :
{
"nugetRegistries": [
{
"name": "nuget",
"tokenEnvVar": "NUGET_TOKEN",
"type": "nuget"
},
{
"name": "gitlab_private",
"tokenEnvVar": "CI_JOB_TOKEN",
"type": "gitlab_private"
}
]
}
持久版在目录中的更改. 盖起. 道具
以下是如何使用这个插件构建语义化的NuGet版本包并坚持项目文件中的版本的例子. 添加一个 Directory.Build.props 到您的工程, 取决于您是否想要在同一寄存器的多个工程中共享值, 它可以从工程根到您的 csproj 文件相邻的任何地方 。 此文件可以并且应该包含一些关于您的 NuGet 软件包的元数据 .
说明: 代替此特殊文件, 您也可以直接在您的 csproj 文件中添加这些属性 。 如果您这样做, 请确保您相应更改更新文件插件的路径 .
<Project>
<PropertyGroup>
<Authors>Stefan Ißmer</Authors>
<Description>Library for working with jobs that may be recurring in distributed systems and microservices.</Description>
<Company>DroidSolutions GmbH</Company>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageReleaseNotes>https://github.com/droidsolutions/job-service/blob/main/CHANGELOG.md</PackageReleaseNotes>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<RepositoryUrl>https://github.com/droidsolutions/job-service.git</RepositoryUrl>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<RepositoryType>git</RepositoryType>
<RepositoryBranch>main</RepositoryBranch>
<RepositoryCommit>209982581960ec4e7361ec556e51be4ebbee2052</RepositoryCommit>
<Version>3.0.1</Version>
</PropertyGroup>
</Project>
现在配置语义发布并使用更新文件插件来更新文件中的值. 除了版本,你还可以更新承诺散列等. 参见 更新文件插件文档 对于您可以使用的数值列表.
{
// order of plugins is important, because it is the execution order
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@droidsolutions-oss/semantic-release-update-file", // update version in Directory.Build.props
"@semantic-release/npm", // update package.json
"@droidsolutions-oss/semantic-release-nuget", // create nuget package
[
"@semantic-release/git",
{
"assets": [
"package.json",
"package-lock.json",
"CHANGELOG.md",
"Directory.Build.props", // add updated file to the Semantic Release commit
],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}",
},
],
"@semantic-release/gitlab",
],
"npmPublish": false, // prevent creating NPM package
"nugetRegistries": [
{
"name": "custom-nuget",
"url": "https://nuget.mycomapny.com/v3/index.json", // custom (private) NuGet server, uses NUGET_TOKEN for auth
"type": "nuget",
},
],
"projectPath": [
"src/DroidSolutions.Oss.JobService/DroidSolutions.Oss.JobService.csproj", // path to the project files
],
"includeSymbols": true, // include Debug symbols for easier debugging
"files": [
{
"path": ["Directory.Build.props"], // configure update-file plugin to update fields in Directory.Build.props
"type": "xml",
"replacements": [
{
"key": "Version",
"value": "${nextRelease.version}",
},
{
"key": "RepositoryCommit",
"value": "${CI_COMMIT_SHA}",
},
],
},
],
}
多个软件包
您可以从一个寄存器构建多个 NuGet 软件包 。 要做到这一点,请指定项目的相关路径。 改为
{
"projectPath": "src/DroidSolutions.SemanticVersion/DroidSolutions.SemanticVersion.csproj"
}
你也可以用这样的东西:
{
"projectPath": [
"src/DroidSolutions.Oss.JobService/DroidSolutions.Oss.JobService.csproj",
"src/DroidSolutions.Oss.JobService.EFCore/DroidSolutions.Oss.JobService.EFCore.csproj",
"src/DroidSolutions.Oss.JobService.Postgres/DroidSolutions.Oss.JobService.Postgres.csproj"
]
}