Terraform에서 CodeBuild의 보고 기능을 사용해보기
소개
작년 5월에 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_config
로 NO_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
속성 같은 것이 나오길 바란다.
※실운용상에서는 이 자원을 지우는 것은 별로 없을 것 같기 때문에, 실질 문제 없다고는 생각하지만.
Reference
이 문제에 관하여(Terraform에서 CodeBuild의 보고 기능을 사용해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/neruneruo/items/c10c7983a586f2819bbe
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
「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
}
}
}
data "aws_kms_key" "aws_s3" {
key_id = "alias/aws/s3"
}
보고서를 출력하려면 출력 형식에 맞는 형식으로 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
속성 같은 것이 나오길 바란다.
※실운용상에서는 이 자원을 지우는 것은 별로 없을 것 같기 때문에, 실질 문제 없다고는 생각하지만.
Reference
이 문제에 관하여(Terraform에서 CodeBuild의 보고 기능을 사용해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/neruneruo/items/c10c7983a586f2819bbe
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
참고로 보고서 그룹에 보고서가 남아 있으면
aws_codebuild_report_group
destroy
InvalidInputException: Report group could only be deleted after its reports are deleted
에러가 나오고 지울 수 없다. S3 버킷의
force_destroy
속성 같은 것이 나오길 바란다.※실운용상에서는 이 자원을 지우는 것은 별로 없을 것 같기 때문에, 실질 문제 없다고는 생각하지만.
Reference
이 문제에 관하여(Terraform에서 CodeBuild의 보고 기능을 사용해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/neruneruo/items/c10c7983a586f2819bbe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)