Как указать Task ("A"). IsDependantOn ("B") с конкретными аргументами - PullRequest
0 голосов
/ 29 декабря 2018

Я использую Cakebuild для определения стандартной зависимости задачи:

var env = Argument("env", "DEV");

//… many tasks 

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

Я бы хотел, чтобы "Run-Integration-Tests" зависел от "Build", в частности с аргументом "env" для "UAT" (поэтому он установлен на "UAT", если не прошел).Является ли это возможным?

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Я сделал метод для подстановки переменной условно.

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");
        });
0 голосов
/ 30 декабря 2018

Возможно манипулировать направленным ациклическим графом (DAG), который Cake использует перед выполнением сценария.Это можно сделать, определив задачу как переменную, а затем вызвав методы задачи по мере необходимости.Например:

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");
    }
}
0 голосов
/ 29 декабря 2018

Вы можете добавить критерии к задаче:

var env = Argument("env", "DEV");

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

будет запускать задачи Run-Integration-Tests, только если для env установлено значение "UAT".

...