Рубрики
Uncategorized

Как настроить тестовые отчеты CodeBuild в трубопроводах CDK (C #)

Я так рад снова войти в письменность — у нас было несколько сложных месяцев: нам пришлось самоинсультировать … Теги от AWS, CDK, DEVOPS.

Я так рад снова войти в писать — у нас было несколько сложных месяцев: нам было несколько раз вытеснить, вся семья была болела жалубью, а наш сын проходит через ужасные двое. Таким образом, блог, переговоры и работа по профессиональному развитию должны были быть нанесены на Backburner.

У меня наконец у меня было некоторое время, чтобы закончить написание этого блога по поводу трубопроводов CDK, которые я работал, вероятно, с начала года. Я пытался выяснить, как сделать тестовые отчеты CodeBuild работать с трубопроводами CDK. На прошлой неделе, когда я вернулся к этому и снова начал работать над этим, я увидел, что API, который использовался в предварительном просмотре разработчика, был обновлен (дополнительная информация об этом здесь ). И теперь похоже, что проще втулка в отчетах, которые будут использоваться с этой конструкцией высокого уровня. Пока старая API все еще используется, я сосредоточусь на новом API.

Целью этого сообщения в блоге — продемонстрировать наброс отчетов о тестировании CodeBuild в трубопроводах CDK для C #.

Я написал простой .NET Основное приложение, которое возвращает день недели, когда вы проходите на дату в строке запроса. Есть также пара тестов Xunit:

public class UnitTests
{
    [Fact]
    public void DateInPast_ReturnsCorrectResult()
    {
        var controller = new HomeController();
        var date = new DateTime(1983, 2, 3);
        var expected = $"{String.Format("{0:d}", date)} was Thursday";
        var actual = controller.Get(date) as OkObjectResult;
        Assert.Equal(expected, actual.Value);
    }

    [Fact]
    public void DateInFuture_ReturnsCorrectResult()
    {
        var controller = new HomeController();
        var date = new DateTime(2033, 12, 9);
        var expected = $"{String.Format("{0:d}", date)} will be Friday";            
        var actual = controller.Get(date) as OkObjectResult;
        Assert.Equal(expected, actual.Value);
    }
}

Дерево файла выглядит так:

Для задачи создания отчетов о тестировании CodeBuild только без фактического развертывания приложения мы будем работать только с Cdkpipelinespipelinestack.cs Отказ В моем случае это был файл, созданный автоматически на cdk init И он будет содержать основной трубопровод.

Во-первых, прежде чем мы построим трубопровод, нам нужно создать соединение с нашим репо GitHub и получить его ARN. Я написал сообщение об этом А пока обратно — AWS CDK Adventure Part 2: Трубопроводы CDK и GitHub Fun

namespace CdkPipelines
{
    public class CdkPipelinesPipelineStack : Stack
    {
        internal CdkPipelinesPipelineStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
        {
            var connectionArn = "arn:aws:codestar-connections:eu-west-1:01234567890:connection/12ae43b8-923e-4a01-ba4e-274454669859";
        }
    }
}

Затем мы создаем группу отчетов:

var reportGroup = new ReportGroup(this, "MyReports", new ReportGroupProps
{
    ReportGroupName = "MyReports"
});

После этого мы используем Кодовая обработка построить в Амазонка Cdk.pipelines пространство имен для создания трубопровода. Если мы не хотели иметь никаких сообщенийковых сообщений, мы настроили бы трубопровод, как так:

var pipeline = new Amazon.CDK.Pipelines.CodePipeline(this, "WhatDayOfWeekPipeline", new CodePipelineProps
{
    PipelineName = "WhatDayOfWeekPipeline",
    SelfMutation = false,
    Synth = new ShellStep("synth", new ShellStepProps()
    {
        Input = CodePipelineSource.Connection("OksanaH/CDKPipelines", "main", new ConnectionSourceOptions()
        {
            ConnectionArn = connectionArn
        }),
        InstallCommands = new string[] { "npm install -g aws-cdk" },
        Commands = new string[] { 
            "cd App", "dotnet restore WhatDayOfWeekTests/WhatDayOfWeekTests.csproj",
            "dotnet test -c release WhatDayOfWeekTests/WhatDayOfWeekTests.csproj --logger trx --results-directory ./testresults",
            "cd ..", 
            "cdk synth" }
    })
});

Один из CodePipipelineProps это Спликтность : При установке на ложь, это вполне удобно при выполнении работ по разработке — вы можете просто запустить CDK развертывает И ваши локальные изменения в трубопроводе будут развернуты в обход репо GitHub.

Синтез Свойство используется для настройки трубопровода, чтобы потянуть из репо GitHub, а также запустить команды, необходимые для создания облачной сборки.

Для того, чтобы настроить отчеты, нам нужно настроить проект CodeBuild, и это можно сделать с помощью CodeBuildstep класс вместо Shellstep. . CodeBuildstepprops Класс, в свою очередь, имеет Partialbuildspec Собственность, которое мы можем использовать для определения отчетов. Отчеты часть A buildspec.yml Файл обычно выглядит так:

version: 0.2
phases:
  ...

reports:
  XUnitTestResults:
    file-format: VisualStudioTrx
    files:
      - '**/*'
    base-directory: './testresults'

В CDK для C # значение Partialbuildspec. должен быть создан, используя Словарь И бит отчетов переведен на CDK ниже:

var reports = new Dictionary()
{                
    {
        "reports", new Dictionary()
        {
            {
                reportGroup.ReportGroupArn, new Dictionary()
                {
                    { "file-format", "VisualStudioTrx" },
                    { "files", "**/*" },
                    { "base-directory", "App/testresults" }
                }
            }
        }
    }
};

Другая вещь, которая должна быть создана, чтобы иметь возможность работать с помощью кодовых тестовых отчетов, является политикой, в противном случае вы можете увидеть такую ошибку, когда вы пытаетесь развернуть стек:

Политика позволяет нескольким действиям, связанным с отчетом о созданной, которую мы создали:

var policyProps = new PolicyStatementProps()
{
    Actions = new string[] { 
        "codebuild:CreateReportGroup",
        "codebuild:CreateReport",
        "codebuild:UpdateReport",
        "codebuild:BatchPutTestCases",
        "codebuild:BatchPutCodeCoverages" 
    },
    Effect = Effect.ALLOW,
    Resources = new string[] { reportGroup.ReportGroupArn }
};

Далее мы можем определить необходимые CodeBuildstepprops Чтобы настроить отчеты:

var step = new CodeBuildStep("Synth", new CodeBuildStepProps
{
    Input = CodePipelineSource.Connection("OksanaH/CDKPipelines", "main", new ConnectionSourceOptions()
    {
        ConnectionArn = connectionArn
    }),
    PrimaryOutputDirectory = "cdk.out",
    InstallCommands = new string[] { "npm install -g aws-cdk" },
    Commands = new string[] { 
        "cd App", 
        "dotnet restore WhatDayOfWeekTests/WhatDayOfWeekTests.csproj",                        
        "dotnet test -c release WhatDayOfWeekTests/WhatDayOfWeekTests.csproj --logger trx --results-directory ./testresults",
        "cd ..",
        "cdk synth"  
    },
    PartialBuildSpec = BuildSpec.FromObject(reports),
    RolePolicyStatements = new PolicyStatement[] { new PolicyStatement(policyProps) }
});

Теперь, что осталось сделать, это использовать CodeBuildstep Как ценность Синтез имущество:

var pipeline = new Amazon.CDK.Pipelines.CodePipeline(this, "WhatDayOfWeekPipeline", new CodePipelineProps
{
    PipelineName = "WhatDayOfWeekPipeline",
    Synth = step
}

После этого мы можем совершить изменения, бегать CDK развертывает И проверьте тестовый отчет CodeBuild в консоли: Красивый!

Полезные ссылки:

Оригинал: «https://dev.to/aws-builders/how-to-set-up-codebuild-test-reports-in-cdk-pipelines-c-465p»