使用 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。

  1. 对于这类事情,我使用了 GitVersion and MagicChunks 的组合,两者都有可用的蛋糕别名。 Gitversion 用于断言 repo 的版本号,而 MagicChunks 用于更新 xml、json 文件等的不同部分
  2. 你能确认一下你的意思吗?您是在谈论将更改提交回 GitHub 存储库吗?如果是这样,您可能想看看 Cake.Git addin。或者,如果您正在谈论将文件推送到 GitHub 版本,您可能需要查看 GitReleaseManager 别名。
  3. 获得 NuGet 包后,您应该可以使用 NuGetPushSettings class.
  4. NuGetPush alias to push the package to MyGet. You will need to set the Source 属性

根据您的一些评论,我正在稍微更新此答案...

我通常不使用 Cake 将更改推送回源代码控制存储库。相反,我对源代码控制存储库的提交导致我的构建被触发,通常使用某种形式的持续集成服务器,如 AppVeyor 或 TeamCity。这样,您询问的提交消息将始终为用户所知,因为他们正在提交,并且会知道发生了什么变化。通过使用这种方法,不会自动提交到存储库中,我个人认为这应该是这样的。

根据以上所述,您只需要您提到的 Release 目标。作为构建过程的一部分,GitVersion 将断言版本号,并允许您使用该版本号创建 NuGet 包(然后不需要额外提交到存储库)然后您可以推送到 NuGet.org, 和 GitHub.