1

我正在使用 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。

4

1 回答 1

2
  1. 对于这类事情,我使用了GitVersionMagicChunks的组合,两者都有可用的蛋糕别名。Gitversion 用于断言 repo 的版本号,MagicChunks 用于更新 xml、json 文件等的不同部分。
  2. 你能确切地确认你在这里的意思吗?您是在谈论将更改提交回 GitHub 存储库吗?如果是这样,您可能想看看Cake.Git 插件。或者,如果您正在谈论将文件推送到 GitHub 版本,您可能需要查看 GitReleaseManager 别名。
  3. 获得 NuGet 包后,您应该能够使用NuGetPush别名将包推送到 MyGet。您将需要设置 NuGetPushSettings 类的Source属性。

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

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

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

于 2017-03-12T10:29:50.327 回答