InfoGrab DocsInfoGrab Docs

머지 리퀘스트에서의 OpenTofu 통합

요약

Infrastructure as Code(IaC) 변경사항을 두고 협업하려면 코드 변경사항과 예상되는 인프라 변경사항을 모두 검토하고 승인해야 합니다. GitLab Terraform/OpenTofu Report 아티팩트를 사용하면 tofu plan 실행의 세부 정보를 머지 리퀘스트 위젯에 직접 노출할 수 있으며, 이를 통해 OpenTofu가 생성, 수정, 삭제하는 리소스의 통계를 확인할 수 있습니다.

Infrastructure as Code(IaC) 변경사항을 두고 협업하려면 코드 변경사항과 예상되는 인프라 변경사항을 모두 검토하고 승인해야 합니다. GitLab은 머지 리퀘스트 페이지를 통해 OpenTofu 코드 변경사항과 그 예상 효과를 함께 검토할 수 있는 방법을 제공합니다. 따라서 IaC 워크플로를 간소화하려고 별도의 도구를 만들거나 서드파티 솔루션에 의존할 필요가 없습니다.

머지 리퀘스트에 OpenTofu Plan 정보 출력#

GitLab Terraform/OpenTofu Report 아티팩트를 사용하면 tofu plan 실행의 세부 정보를 머지 리퀘스트 위젯에 직접 노출할 수 있으며, 이를 통해 OpenTofu가 생성, 수정, 삭제하는 리소스의 통계를 확인할 수 있습니다.

Warning

다른 job 아티팩트와 마찬가지로 OpenTofu 플랜 데이터는 리포지터리에서 Guest 권한을 가진 사용자라면 누구나 볼 수 있습니다. OpenTofu와 GitLab 모두 기본적으로 플랜 파일을 암호화하지 않습니다. OpenTofu plan.json 또는 plan.cache 파일에 비밀번호, 액세스 토큰, 인증서와 같은 민감한 데이터가 포함된다면 플랜 출력을 암호화하거나 프로젝트 가시성 설정을 변경해야 합니다. 또한 공개 파이프라인을 비활성화하고 아티팩트의 공개 플래그를 false로 설정해야 합니다(public: false). 이 설정을 적용하면 GitLab 관리자와 Reporter, Developer, Maintainer, Owner 권한을 가진 프로젝트 멤버만 아티팩트에 액세스할 수 있습니다.

OpenTofu 보고서 아티팩트 구성#

GitLab은 OpenTofu CI/CD 컴포넌트를 통해 OpenTofu와 통합됩니다. 이 컴포넌트는 GitLab이 관리하는 OpenTofu 상태를 사용해 머지 리퀘스트에 OpenTofu 변경사항을 표시합니다.

OpenTofu 보고서 아티팩트 자동 구성#

plan job에서 OpenTofu 보고서 아티팩트를 자동으로 구성하는 OpenTofu CI/CD 컴포넌트를 사용합니다.

OpenTofu 보고서 아티팩트 수동 구성#

빠르게 설정하려면 사전 빌드된 이미지를 사용자 지정하고 gitlab-tofu 헬퍼를 활용합니다.

GitLab OpenTofu Report 아티팩트를 수동으로 구성하는 방법은 다음과 같습니다.

  1. 해당 파일들을 여러 번 참조할 수 있도록 재사용 가능한 변수를 정의합니다.

    variables:
      PLAN: plan.cache
      PLAN_JSON: plan.json
    
  2. 가볍고 유연한 커맨드라인 JSON 프로세서인 jq를 설치합니다.

  3. tofu 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)}'"
    

    [!note] 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)}'"
    
  4. tofu plan과 tofu show를 실행하는 script를 정의합니다. 이 명령들은 출력을 파이프로 넘겨 필요한 부분을 저장 변수 PLAN_JSON으로 변환합니다. 이 JSON은 GitLab OpenTofu Report 아티팩트를 만드는 데 사용됩니다. OpenTofu 보고서는 OpenTofu tfplan.json 파일을 가져옵니다. 수집된 OpenTofu 플랜 보고서는 아티팩트로 GitLab에 업로드되어 머지 리퀘스트에 표시됩니다.

    plan:
      stage: build
      script:
        - terraform plan -out=$PLAN
        - terraform show -json $PLAN | convert_report > $PLAN_JSON
      artifacts:
        reports:
          terraform: $PLAN_JSON
    
  5. 파이프라인을 실행하면 머지 리퀘스트에 다음과 같은 위젯이 표시됩니다.

    merge request Terraform widget

    [!note] 위젯이 보고하는 변경 수의 최대치는 액션마다 999,999입니다. 이 제한은 표시 목적에만 적용되며, 더 많은 리소스를 변경하는 플랜도 의도한 대로 적용할 수 있습니다.

  6. 위젯에서 View Full Log를 선택해 파이프라인 로그에 있는 플랜 출력으로 이동합니다.

    Terraform plan logs

머지 리퀘스트에서의 OpenTofu 통합

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

Infrastructure as Code(IaC) 변경사항을 두고 협업하려면 코드 변경사항과 예상되는 인프라 변경사항을 모두 검토하고 승인해야 합니다. GitLab Terraform/OpenTofu Report 아티팩트를 사용하면 tofu plan 실행의 세부 정보를 머지 리퀘스트 위젯에 직접 노출할 수 있으며, 이를 통해 OpenTofu가 생성, 수정, 삭제하는 리소스의 통계를 확인할 수 있습니다.

Infrastructure as Code(IaC) 변경사항을 두고 협업하려면 코드 변경사항과 예상되는 인프라 변경사항을 모두 검토하고 승인해야 합니다. GitLab은 머지 리퀘스트 페이지를 통해 OpenTofu 코드 변경사항과 그 예상 효과를 함께 검토할 수 있는 방법을 제공합니다. 따라서 IaC 워크플로를 간소화하려고 별도의 도구를 만들거나 서드파티 솔루션에 의존할 필요가 없습니다.

머지 리퀘스트에 OpenTofu Plan 정보 출력#

GitLab Terraform/OpenTofu Report 아티팩트를 사용하면 tofu plan 실행의 세부 정보를 머지 리퀘스트 위젯에 직접 노출할 수 있으며, 이를 통해 OpenTofu가 생성, 수정, 삭제하는 리소스의 통계를 확인할 수 있습니다.

Warning

다른 job 아티팩트와 마찬가지로 OpenTofu 플랜 데이터는 리포지터리에서 Guest 권한을 가진 사용자라면 누구나 볼 수 있습니다. OpenTofu와 GitLab 모두 기본적으로 플랜 파일을 암호화하지 않습니다. OpenTofu plan.json 또는 plan.cache 파일에 비밀번호, 액세스 토큰, 인증서와 같은 민감한 데이터가 포함된다면 플랜 출력을 암호화하거나 프로젝트 가시성 설정을 변경해야 합니다. 또한 공개 파이프라인을 비활성화하고 아티팩트의 공개 플래그를 false로 설정해야 합니다(public: false). 이 설정을 적용하면 GitLab 관리자와 Reporter, Developer, Maintainer, Owner 권한을 가진 프로젝트 멤버만 아티팩트에 액세스할 수 있습니다.

OpenTofu 보고서 아티팩트 구성#

GitLab은 OpenTofu CI/CD 컴포넌트를 통해 OpenTofu와 통합됩니다. 이 컴포넌트는 GitLab이 관리하는 OpenTofu 상태를 사용해 머지 리퀘스트에 OpenTofu 변경사항을 표시합니다.

OpenTofu 보고서 아티팩트 자동 구성#

plan job에서 OpenTofu 보고서 아티팩트를 자동으로 구성하는 OpenTofu CI/CD 컴포넌트를 사용합니다.

OpenTofu 보고서 아티팩트 수동 구성#

빠르게 설정하려면 사전 빌드된 이미지를 사용자 지정하고 gitlab-tofu 헬퍼를 활용합니다.

GitLab OpenTofu Report 아티팩트를 수동으로 구성하는 방법은 다음과 같습니다.

  1. 해당 파일들을 여러 번 참조할 수 있도록 재사용 가능한 변수를 정의합니다.

    variables:
      PLAN: plan.cache
      PLAN_JSON: plan.json
    
  2. 가볍고 유연한 커맨드라인 JSON 프로세서인 jq를 설치합니다.

  3. tofu 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)}'"
    

    [!note] 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)}'"
    
  4. tofu plan과 tofu show를 실행하는 script를 정의합니다. 이 명령들은 출력을 파이프로 넘겨 필요한 부분을 저장 변수 PLAN_JSON으로 변환합니다. 이 JSON은 GitLab OpenTofu Report 아티팩트를 만드는 데 사용됩니다. OpenTofu 보고서는 OpenTofu tfplan.json 파일을 가져옵니다. 수집된 OpenTofu 플랜 보고서는 아티팩트로 GitLab에 업로드되어 머지 리퀘스트에 표시됩니다.

    plan:
      stage: build
      script:
        - terraform plan -out=$PLAN
        - terraform show -json $PLAN | convert_report > $PLAN_JSON
      artifacts:
        reports:
          terraform: $PLAN_JSON
    
  5. 파이프라인을 실행하면 머지 리퀘스트에 다음과 같은 위젯이 표시됩니다.

    merge request Terraform widget

    [!note] 위젯이 보고하는 변경 수의 최대치는 액션마다 999,999입니다. 이 제한은 표시 목적에만 적용되며, 더 많은 리소스를 변경하는 플랜도 의도한 대로 적용할 수 있습니다.

  6. 위젯에서 View Full Log를 선택해 파이프라인 로그에 있는 플랜 출력으로 이동합니다.

    Terraform plan logs