使用Cake定义版本并将项目推送到Github和MyGet

时间:2017-03-11 15:46:48

标签: github asp.net-core cakebuild myget

我正在使用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 个答案:

答案 0 :(得分:2)

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

    我通常不使用Cake将更改推送回源控件存储库。相反,我在源代码控制存储库中提交的提交会导致我的构建被触发,通常使用某种形式的Continuous Integration Server,如AppVeyor或TeamCity。这样,您询问的提交消息将始终由用户知道,因为他们正在进行提交,并将知道已更改的内容。通过使用这种方法,存储库中没有自动提交,个人而言,我认为应该如此。

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