Terraform에서 CodeBuild의 보고 기능을 사용해보기

10582 단어 TerraformCodeBuildAWS

소개



작년 5월에 CodeBuild의 리포트 기능이 추가되었지만, 자신이 속한 프로젝트에서는 자동 테스트나 커버리지의 리포트는 이미 다른 솔루션을 도입하고 있었기 때문에 그다지 만지지 않았다.
이번, 다른 기사를 쓰는데 있어서, 이 근처의 기능을 시험해 보고 싶어졌으므로, 아울러 사용해 보았다.

또한,이 기사의 전제 지식으로서,
  • CodeBuild 프로젝트를 IaC로 작성했습니다
  • CodeBuild의보고 기능에 대해 자세히 알아보기

  • 것이 전제가 된다.
    ※CodeBuild의 리포트 기능의 개요는 예에 따라 클래스 메소드 선생님를 알기 쉽다.

    필요한 Terraform 리소스



    필요한 리소스는 aws_codebuild_report_group입니다.
    테스트 리포트와 커버리지 리포트에서 출력이 다르기 때문에, type 프로퍼티로 지정을 할 수 있다.

    버릇이있는 것은 name 속성이고 AWS 공식 문서에 따르면,
    「CodeBuildのプロジェクト名」-「Buildspec の reports セクションで指定するグループ名」
    

    라는 이름이 적용되는 것 같다 (변경할 수 있는지는 잘 모른다).
    그런 느낌이므로 다음과 같이 정의한다.
    ################################################################################
    # S3                                                                           #
    ################################################################################
    resource "aws_s3_bucket" "test" {
      bucket        = local.s3_testreport_bucket_name
      acl           = "private"
    }
    
    resource "aws_s3_bucket" "coverage" {
      bucket        = local.s3_coveragereport_bucket_name
      acl           = "private"
    }
    
    ################################################################################
    # CodeBuild                                                                    #
    ################################################################################
    resource "aws_codebuild_report_group" "test" {
      name = "${local.codebuild_project_name}-${local.codebuild_test_reportgroup_name}"
      type = "TEST"
    
      export_config {
        type = "S3"
    
        s3_destination {
          bucket              = aws_s3_bucket.test.id
          encryption_disabled = false
          encryption_key      = data.aws_kms_key.aws_s3.arn
        }
      }
    }
    
    resource "aws_codebuild_report_group" "code_coverage" {
      name = "${local.codebuild_project_name}-${local.codebuild_codecoverage_reportgroup_name}"
      type = "CODE_COVERAGE"
    
      export_config {
        type = "S3"
    
        s3_destination {
          bucket              = aws_s3_bucket.coverage.id
          encryption_disabled = false
          encryption_key      = data.aws_kms_key.aws_s3.arn
        }
      }
    }
    

    그렇게 어려운 일은 없지만, 공식 문서에 따르면,

    Note: the API does not currently allow setting encryption as disabled

    그래서 encryption_disabled를 비활성화 할 수 없습니다.

    그렇다면 KMS가 필요하지만 AWS Managed KMS에서도 괜찮습니다.
    data "aws_kms_key" "aws_s3" {
      key_id = "alias/aws/s3"
    }
    

    느낌으로 S3 버킷용 별칭을 끌어와 설정하자.
    당연히 S3 버킷에 PutObject를 할 수있는 권한을 CodeBuild의 서비스 역할에 부여하는 것을 잊지 마십시오.

    덧붙여서, export_configNO_EXPORT 를 지정하는 것도 가능하지만, 에러가 나왔을 때에 플레인인 파일이 남아 있지 않으면 조사가 곤란하므로, 처음에는 출력해 두는 것을 추천.

    Buildspec에서 지정



    보고서를 출력하려면 출력 형식에 맞는 형식으로 Buildspec에서 파일을 전달해야합니다.
    테스트와 커버리지라면 다음과 같이 둘 다 지정한다.
    reports:
      ${TEST_REPORTGROUP_NAME}:
        files:
          - "report/report.xml"
        file-format: "JUNITXML"
      ${COVERAGE_REPORTGROUP_NAME}:
        files:
          - "report/coverage.xml"
        file-format: "COBERTURAXML"
    

    환경 변수가 되고 있는 부분이, 그룹명이다.
    ↑로 만든 그룹명의 재기록 잊지 않게, CodeBuild 의 환경 변수로 건네주도록 하고 있다.
    ################################################################################
    # CodeBuild                                                                    #
    ################################################################################
    resource "aws_codebuild_project" "test" {
      (中略)
      environment {
        environment_variable {
          name  = "TEST_REPORTGROUP_NAME"
          value = local.codebuild_test_reportgroup_name
        }
        environment_variable {
          name  = "COVERAGE_REPORTGROUP_NAME"
          value = local.codebuild_codecoverage_reportgroup_name
        }
      }
      (後略)
    

    실제로 출력하는 파일의 형식에 대해서는, 언어에 따라서도 다르므로, 각각의 언어에 맞추어 대응해 주었으면 한다.
    자세한 내용은 AWS 공식 문서에 나와 있습니다.

    막상, 움직인다!



    이제 CodeBuild를 실행하면 보고서의 탭에서 다음과 같이 결과를 확인할 수 있습니다.



    게다가 여기에서 리포트로 날아가는 것으로, 다음과 같이 테스트와 커버리지의 리포트를 확인할 수 있다.

    테스트 보고서






    또, 그룹의 톱에 가면, 에러의 추이등도 확인 가능하다.



    커버리지 보고서





    이쪽도 그룹의 톱으로부터 추이의 확인이 가능.



    여담



    참고로 보고서 그룹에 보고서가 남아 있으면 aws_codebuild_report_group destroy
     InvalidInputException: Report group could only be deleted after its reports are deleted
    

    에러가 나오고 지울 수 없다. S3 버킷의 force_destroy 속성 같은 것이 나오길 바란다.
    ※실운용상에서는 이 자원을 지우는 것은 별로 없을 것 같기 때문에, 실질 문제 없다고는 생각하지만.

    좋은 웹페이지 즐겨찾기