使用 Cake 定义版本并将项目推送到 Github 和 MyGet
Define version and Push project to Github and MyGet using Cake
我正在使用 Cake 构建带有 .csproj 文件的 ASP.NET Core 1.1。我需要将源推送到 Github 并将包发布到 MyGet。目前我有脚本:
String target = Argument<String>("target", "Default");
Task("Clean").Does(() => {
if (DirectoryExists("./build"))
DeleteDirectory("./build", true);
CreateDirectory("./build");
});
Task("Restore").Does(() => {
FilePathCollection projects = GetFiles("./**/*.csproj");
foreach(FilePath project in projects)
DotNetCoreRestore(project.FullPath);
});
Task("Build").IsDependentOn("Clean").IsDependentOn("Restore").Does(() => {
FilePathCollection projects = GetFiles("./**/*.csproj");
foreach(FilePath project in projects)
DotNetCoreBuild(project.FullPath);
});
Task("Test").IsDependentOn("Build").Does(() => {
FilePathCollection projects = GetFiles("./test/**/*.csproj");
foreach(FilePath project in projects)
DotNetCoreTest(project.FullPath);
});
Task("Pack").IsDependentOn("Test").Does(() => {
DotNetCorePack("./src/MyProject.csproj", new DotNetCorePackSettings { OutputDirectory = "./build/MyProject/" });
});
Task("Default").IsDependentOn("Pack");
RunTarget(target);
我怎样才能做到以下几点:
1.根据csproj文件的版本增加修订号;
2.将项目推送到Github;
3. 将包推送到MyGet。
- 对于这类事情,我使用了 GitVersion and MagicChunks 的组合,两者都有可用的蛋糕别名。 Gitversion 用于断言 repo 的版本号,而 MagicChunks 用于更新 xml、json 文件等的不同部分
- 你能确认一下你的意思吗?您是在谈论将更改提交回 GitHub 存储库吗?如果是这样,您可能想看看 Cake.Git addin。或者,如果您正在谈论将文件推送到 GitHub 版本,您可能需要查看 GitReleaseManager 别名。
- 获得 NuGet 包后,您应该可以使用 NuGetPushSettings class.
的 NuGetPush alias to push the package to MyGet. You will need to set the Source 属性
根据您的一些评论,我正在稍微更新此答案...
我通常不使用 Cake 将更改推送回源代码控制存储库。相反,我对源代码控制存储库的提交导致我的构建被触发,通常使用某种形式的持续集成服务器,如 AppVeyor 或 TeamCity。这样,您询问的提交消息将始终为用户所知,因为他们正在提交,并且会知道发生了什么变化。通过使用这种方法,不会自动提交到存储库中,我个人认为这应该是这样的。
根据以上所述,您只需要您提到的 Release 目标。作为构建过程的一部分,GitVersion 将断言版本号,并允许您使用该版本号创建 NuGet 包(然后不需要额外提交到存储库)然后您可以推送到 NuGet.org, 和 GitHub.
我正在使用 Cake 构建带有 .csproj 文件的 ASP.NET Core 1.1。我需要将源推送到 Github 并将包发布到 MyGet。目前我有脚本:
String target = Argument<String>("target", "Default");
Task("Clean").Does(() => {
if (DirectoryExists("./build"))
DeleteDirectory("./build", true);
CreateDirectory("./build");
});
Task("Restore").Does(() => {
FilePathCollection projects = GetFiles("./**/*.csproj");
foreach(FilePath project in projects)
DotNetCoreRestore(project.FullPath);
});
Task("Build").IsDependentOn("Clean").IsDependentOn("Restore").Does(() => {
FilePathCollection projects = GetFiles("./**/*.csproj");
foreach(FilePath project in projects)
DotNetCoreBuild(project.FullPath);
});
Task("Test").IsDependentOn("Build").Does(() => {
FilePathCollection projects = GetFiles("./test/**/*.csproj");
foreach(FilePath project in projects)
DotNetCoreTest(project.FullPath);
});
Task("Pack").IsDependentOn("Test").Does(() => {
DotNetCorePack("./src/MyProject.csproj", new DotNetCorePackSettings { OutputDirectory = "./build/MyProject/" });
});
Task("Default").IsDependentOn("Pack");
RunTarget(target);
我怎样才能做到以下几点:
1.根据csproj文件的版本增加修订号;
2.将项目推送到Github;
3. 将包推送到MyGet。
- 对于这类事情,我使用了 GitVersion and MagicChunks 的组合,两者都有可用的蛋糕别名。 Gitversion 用于断言 repo 的版本号,而 MagicChunks 用于更新 xml、json 文件等的不同部分
- 你能确认一下你的意思吗?您是在谈论将更改提交回 GitHub 存储库吗?如果是这样,您可能想看看 Cake.Git addin。或者,如果您正在谈论将文件推送到 GitHub 版本,您可能需要查看 GitReleaseManager 别名。
- 获得 NuGet 包后,您应该可以使用 NuGetPushSettings class. 的 NuGetPush alias to push the package to MyGet. You will need to set the Source 属性
根据您的一些评论,我正在稍微更新此答案...
我通常不使用 Cake 将更改推送回源代码控制存储库。相反,我对源代码控制存储库的提交导致我的构建被触发,通常使用某种形式的持续集成服务器,如 AppVeyor 或 TeamCity。这样,您询问的提交消息将始终为用户所知,因为他们正在提交,并且会知道发生了什么变化。通过使用这种方法,不会自动提交到存储库中,我个人认为这应该是这样的。
根据以上所述,您只需要您提到的 Release 目标。作为构建过程的一部分,GitVersion 将断言版本号,并允许您使用该版本号创建 NuGet 包(然后不需要额外提交到存储库)然后您可以推送到 NuGet.org, 和 GitHub.