代码之家  ›  专栏  ›  技术社区  ›  Ivan Koshelev

如何指定任务(“A”).IsDependanton(“B”)及特定参数

  •  1
  • Ivan Koshelev  · 技术社区  · 7 年前

    我使用cakebuild定义标准任务依赖项:

    var env = Argument("env", "DEV");
    
    //… many tasks 
    
    Task("Run-Integration-Tests")
            .IsDependentOn("Build")
            .Does(() =>
        {
            NUnit("./src/**/bin/release/*.Tests.dll");
        });
    

    我希望“运行集成测试”依赖于“构建”,特别是“uat”的“env”参数(如果未通过,则设置为“uat”)。有可能吗?

    3 回复  |  直到 7 年前
        1
  •  3
  •   Christian Held    7 年前

    var env = Argument("env", "DEV");
    
    Task("Run-Integration-Tests")
        .WithCriteria(env == "UAT)
        .IsDependentOn("Build")
        .Does(() => { ... })
    

    Run-Integration-Tests env

        2
  •  4
  •   Gary Ewan Park    7 年前

    可以在执行脚本之前操纵cake使用的有向无环图(dag)。这可以通过将任务定义为变量,然后根据需要调用任务的方法来完成。例如:

    var IntegrationTask = Task("Run-Integration-Tests")
        .Does(() =>
    {
        NUnit("./src/**/bin/release/*.Tests.dll");
    });
    

    if(env == "UAT")
    {
        IntegrationTask.IsDependentOn("Build");
    }
    

    Cake.Recipe 根据正在构建的项目类型来操作DAG。这里可以看到一个例子:

    https://github.com/cake-contrib/Cake.Recipe/blob/develop/Cake.Recipe/Content/build.cake#L549-L590

    private static void SetupTasks(bool isDotNetCoreBuild)
    {
        var prefix = isDotNetCoreBuild ? "DotNetCore-" : "";
        BuildParameters.Tasks.CreateNuGetPackagesTask.IsDependentOn(prefix + "Build");
        BuildParameters.Tasks.CreateChocolateyPackagesTask.IsDependentOn(prefix + "Build");
        BuildParameters.Tasks.TestTask.IsDependentOn(prefix + "Build");
        BuildParameters.Tasks.DupFinderTask.IsDependentOn(prefix + "Build");
        BuildParameters.Tasks.InspectCodeTask.IsDependentOn(prefix + "Build");
        BuildParameters.Tasks.PackageTask.IsDependentOn("Analyze");
        BuildParameters.Tasks.PackageTask.IsDependentOn("Test");
        BuildParameters.Tasks.PackageTask.IsDependentOn("Create-NuGet-Packages");
        BuildParameters.Tasks.PackageTask.IsDependentOn("Create-Chocolatey-Packages");
        BuildParameters.Tasks.UploadCodecovReportTask.IsDependentOn("Test");
        BuildParameters.Tasks.UploadCoverallsReportTask.IsDependentOn("Test");
        BuildParameters.Tasks.AppVeyorTask.IsDependentOn("Upload-Coverage-Report");
        BuildParameters.Tasks.AppVeyorTask.IsDependentOn("Publish-Chocolatey-Packages");
        BuildParameters.Tasks.InstallReportGeneratorTask.IsDependentOn(prefix + "Build");
    
        if (!isDotNetCoreBuild)
        {
            if (BuildParameters.TransifexEnabled)
            {
                BuildParameters.Tasks.BuildTask.IsDependentOn("Transifex-Pull-Translations");
            }
            BuildParameters.Tasks.TestTask.IsDependentOn("Test-NUnit");
            BuildParameters.Tasks.TestTask.IsDependentOn("Test-xUnit");
            BuildParameters.Tasks.TestTask.IsDependentOn("Test-MSTest");
            BuildParameters.Tasks.TestTask.IsDependentOn("Test-VSTest");
            BuildParameters.Tasks.TestTask.IsDependentOn("Test-Fixie");
            BuildParameters.Tasks.InstallOpenCoverTask.IsDependentOn("Install-ReportUnit");
        }
        else
        {
            if (BuildParameters.TransifexEnabled)
            {
                BuildParameters.Tasks.DotNetCoreBuildTask.IsDependentOn("Transifex-Pull-Translations");
            }
            BuildParameters.Tasks.TestTask.IsDependentOn(prefix + "Test");
            BuildParameters.Tasks.InstallOpenCoverTask.IsDependentOn("Install-ReportGenerator");
            BuildParameters.Tasks.PackageTask.IsDependentOn(prefix + "Pack");
        }
    }
    
        3
  •  1
  •   Ivan Koshelev    7 年前

    void ArgumentIfTask<T>(string taskName, ref T argument, string argumentName, T argumentValue)
    {
        if(Argument("target", "Default") != taskName)
        {
            return;
        }
    
        argument = Argument(argumentName, argumentValue);
    }
    
    var env = Argument("env", "DEV");
    
    //… many tasks 
    
    ArgumentIfTask("Run-Integration-Tests", ref env, "env", "UAT");
    Task("Run-Integration-Tests")
        .IsDependentOn("Build")
        .Does(() =>
            {
                NUnit("./src/**/bin/release/*.Tests.dll");
            });
    
    推荐文章