Merge Request에서의 Terraform 통합
Infrastructure as Code(IaC) 변경 사항 주변의 협업은 코드 변경과 예상되는 인프라 변경을 확인하고 승인해야합니다. GitLab은 Merge Request 페이지를 사용하여 Terraform 코드 변경 및 그 예상 효과 주변의 협업을 지원하는 솔루션을 제공합니다. 이렇게 함으로써 사용자들은 IaC 워크플로우를 간소화시키기 위해 사용자 정의 도구를 만들거나 제3자 솔루션에 의존할 필요가 없습니다.
Merge Request에 테라폼 계획 정보 출력
GitLab 테라폼 보고서 Artifact를 사용하면 terraform plan
실행에서 나온 세부 정보를 Merge Request 위젯에서 직접 확인할 수 있으며, 테라폼이 생성, 수정 또는 제거하는 리소스에 대한 통계를 볼 수 있습니다.
plan.json
또는 plan.cache
파일에 암호, 액세스 토큰 또는 인증서와 같은 민감한 데이터가 포함된 경우, 계획 출력을 암호화하거나 프로젝트 가시성 설정을 수정해야합니다. 또한 public pipelines를 비활성화하고 artifact의 public flag를 false로 설정 (public: false
)해야합니다. 이 설정은 artifact가 GitLab 관리자 및 적어도 기록자 역할을 가진 프로젝트 멤버에게만 접근 가능하도록 보장합니다.테라폼 보고서 artifact 구성
GitLab은 Terraform과 통합 및 OpenTofu와 통합하여 CI/CD 템플릿 및 컴포넌트를 사용하여 GitLab 관리 테라폼 상태를 사용하고 Merge Request에서 테라폼 변경 사항을 표시합니다.
자동으로 테라폼 보고서 artifact 구성
Terraform CI/CD 템플릿 또는 OpenTofu CI/CD 컴포넌트 중 하나를 사용하여 plan
작업에서 테라폼 보고서 artifact를 자동으로 구성해야합니다.
매뉴얼으로 테라폼 보고서 artifact 구성
빠른 설정을 위해 미리 빌드된 이미지를 사용하고 gitlab-terraform
및 gitlab-tofu
도우미에 의존해야합니다.
GitLab 테라폼 보고서 artifact를 매뉴얼으로 구성하려면:
-
간단히 말해서, 몇 가지 재사용 가능한 변수를 정의하여 이러한 파일들을 여러 번 참조할 수 있도록합니다:
variables: PLAN: plan.cache PLAN_JSON: plan.json
-
가벼우며 유연한 명령줄 JSON 프로세서인
jq
를 설치합니다. -
terraform plan
출력에서 추출하려는 정보를 파싱하는 특정jq
명령에 대한 별칭을 만듭니다:before_script: - apk --no-cache add jq - alias convert_report="jq -r '([.resource_changes[]?.change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'"
Bash를 사용하는 배포(예: Ubuntu)에서는 비대화식 모드에서alias
문이 확장되지 않습니다. 파이프 라인이convert_report: command not found
오류로 실패하는 경우, 명령을 명시적으로 활성화하기 위해shopt
명령을 스크립트에 추가할 수 있습니다:before_script: - shopt -s expand_aliases - alias convert_report="jq -r '([.resource_changes[]?.change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'"
-
terraform plan
및terraform show
를 실행하고 해당 출력을 파이프하여 관련 부분을PLAN_JSON
로 변환하는 스크립트를 정의합니다. 이 JSON은 GitLab 테라폼 보고서 artifact를 생성하는 데 사용됩니다. 테라폼 보고서는 테라폼tfplan.json
파일을 얻습니다. 수집된 테라폼 계획 보고서는 artifact로 GitLab에 업로드되며 Merge Request에서 표시됩니다.plan: stage: build script: - terraform plan -out=$PLAN - terraform show --json $PLAN | convert_report > $PLAN_JSON artifacts: reports: terraform: $PLAN_JSON
-
파이프라인을 실행하면 다음과 같이 Merge Request 위젯이 표시됩니다:
-
위젯의 전체 로그 보기 버튼을 선택하면 파이프라인 로그에 표시된 계획 출력으로 직접 이동할 수 있습니다: