【问题标题】:Create a task sequence in Cakebuild在 Cakebuild 中创建任务序列
【发布时间】:2017-11-07 18:26:05
【问题描述】:

我正在使用 Cake 0.23.0,很高兴看到任务依赖项已扩展。不幸的是,似乎即使是最新版本也不能解决我的问题。 还是我做错了什么?

我想要达到的目标

  • 假设我定义了多个平台(例如 x86 或 x64)相同的任务
  • 我想定义一个构建序列,它首先为平台 x86 执行所有任务。完成后,应执行初始化任务,将平台设置为 x64,然后执行与 x86 相同的任务。
  • 示例序列: 任务初始化 x86 -> 任务 A -> 任务 B -> 任务 C -> 任务初始化 x64 -> 任务 A -> 任务 B -> 任务 C

当前行为 结果序列是 任务初始化 x86 -> 任务 A -> 任务 B -> 任务 C -> 任务初始化 x64

Cake 似乎只尊重任务依赖一次。我已经定义它如下所示:

Task("Compile-All-Platforms")
  .IsDependentOn("Init-86")  
  .IsDependentOn("A")
  .IsDependentOn("B")
  .IsDependentOn("C")
  .IsDependentOn("Init-x64")
  .IsDependentOn("A")
  .IsDependentOn("B")
  .IsDependentOn("C");

【问题讨论】:

    标签: c# cakebuild


    【解决方案1】:

    如果您想分两步构建,最简单的做法是将 A、B 和 C 的构建逻辑封装在辅助函数中,然后将它们包装在 x86 或 x64 任务中。这里的想法是利用 Cake 能够为您创建的依赖关系树,而不是在 Compile-All 中写下所有依赖关系。实际上,这就是您要使用构建编排器的主要原因。

    当然,这是使它适用于 3 个任务和 2 个平台的简单方法。一个更具可扩展性的解决方案是创建和添加一个接受“平台”参数并构建 N 个项目的帮助脚本。

    请注意,下面的代码仅显示了如何完成您的要求,但需要通过适当的 WithCriteria 指令进行改进。如果按原样进行,您将无法仅构建 x64。

    Task("Compile-x86"){ 
        BuildA(); 
        BuildB(); 
        BuildC();
     }; 
    
     Task("Init-x64")
        .IsDependentOn("Compile-x86"){ 
        //Your init code goes here 
     }; 
    
     Task("Compile-x64")
        .IsDependentOn("Init-x64"){ 
        BuildA(); 
        BuildB();
        BuildC();
     }; 
    
     Task("Compile-All-Platforms")
     .IsDependentOn("Compile-x64");
    

    【讨论】:

    • 你好雷诺,谢谢你的回答。我想我可以尽量减少任务和功能的数量。基本上这些功能可以完成我需要的工作。我建议改进文档,因为对我来说,在遇到麻烦之前还不清楚 C# Make 的行为是这样的。
    • ...另一个重要的事情应该在新手文档中更好地突出显示:如果您在具有定义如“IsDependentOn...”的依赖项的任务中使用“WithCriteria”,则任务将尽管未满足受抚养人的标准,但仍会执行。一旦你知道这一点,你就可以处理它。
    • 您可以在cakebuild.net 提交您的 cmets,因为我不是 Cake 贡献者。话虽如此,如果您的构建步骤足够复杂,您可以(应该?)使用 Cake 扩展模块来封装每个构建步骤。您可以在一个方法中调用它两次,并在调用之间更改配置。但是你会得到一个单一的构建脚本,虽然我很确定你最好有更多的步骤,利用任务依赖。请注意,我们不知道您系统的实际复杂性,这个答案理所当然地认为您有 3 个项目和 2 个目标平台。
    • 我已经合并了一些Task,现在解决方案简单多了,看看是否更符合您的要求
    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多