首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用特定参数指定任务(“A”).IsDependantOn(“B”)

如何使用特定参数指定任务(“A”).IsDependantOn(“B”)
EN

Stack Overflow用户
提问于 2018-12-30 04:12:18
回答 3查看 377关注 0票数 1

我正在使用Cakebuild来定义一个标准的任务依赖:

代码语言:javascript
复制
var env = Argument("env", "DEV");

//… many tasks 

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

我希望"Run-Integration-Tests“依赖于"Build”,特别是带有"UAT“的"env”参数(因此,如果没有传递,则将其设置为"UAT“)。有可能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-30 04:50:19

您可以向任务添加条件:

代码语言:javascript
复制
var env = Argument("env", "DEV");

Task("Run-Integration-Tests")
    .WithCriteria(env == "UAT")
    .IsDependentOn("Build")
    .Does(() => { ... })

只有当env设置为"UAT“时,才会运行Run-Integration-Tests任务。

票数 3
EN

Stack Overflow用户

发布于 2018-12-30 05:09:56

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

代码语言:javascript
复制
var IntegrationTask = Task("Run-Integration-Tests")
    .Does(() =>
{
    NUnit("./src/**/bin/release/*.Tests.dll");
});

然后,在脚本中的其他位置执行以下操作:

代码语言:javascript
复制
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

即:

代码语言:javascript
复制
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");
    }
}
票数 5
EN

Stack Overflow用户

发布于 2018-12-30 05:06:19

我做了一个有条件替换变量的方法。

代码语言:javascript
复制
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");
        });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53973018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档