Я так рад снова войти в писать — у нас было несколько сложных месяцев: нам было несколько раз вытеснить, вся семья была болела жалубью, а наш сын проходит через ужасные двое. Таким образом, блог, переговоры и работа по профессиональному развитию должны были быть нанесены на 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»