GitLab Terraform 헬퍼

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
caution
Terraform CI/CD 템플릿은 폐지되며 GitLab 18.0에서 제거될 예정입니다. 자세한 정보는 폐지 공지를 참조하십시오.

GitLab은 GitLab 관리 Terraform State와의 통합을 쉽게하기 위해 두 가지 헬퍼를 제공합니다.

  • gitlab-terraform 스크립트는 terraform 명령어의 래퍼입니다.
  • terraform-images 컨테이너 이미지는 gitlab-terraform 스크립트와 terraform 자체를 포함합니다.

두 헬퍼는 Terraform Images 프로젝트에서 유지보수됩니다.

gitlab-terraform

gitlab-terraform 스크립트는 terraform 명령어의 래퍼입니다.

CI/CD 파이프라인에서 gitlab-terraform을 실행하여 GitLab 관리 Terraform State 백엔드에 연결하는 데 필요한 환경 변수를 설정할 수 있습니다.

헬퍼 스크립트의 소스(실행하지 말고)

gitlab-terraform 스크립트가 소스로 사용될 때 환경을 구성하지만 실제로 terraform을 실행하지는 않습니다. 환경을 준비하거나 대체 도구인 terragrunt와 같은 추가 단계를 수행해야 하는 경우에 스크립트를 소스로 사용할 수 있습니다.

스크립트를 소스로 사용하려면 다음을 실행하십시오:

source $(which gitlab-terraform)

BusyBox와 같은 일부 쉘은 다른 스크립트가 귀하의 스크립트를 소스로 지원하지 않습니다. 자세한 정보는 이 Stack Overflow 스레드를 참조하십시오. 이 문제를 해결하려면 bash, zsh 또는 ksh를 사용하거나 셸에서 직접 gitlab-terraform를 소스로 사용해야 합니다.

명령어

다음 명령어를 사용하여 gitlab-terraform을 실행할 수 있습니다.

명령어 명령행 전달? 암시적 init? 설명
gitlab-terraform apply terraform apply를 실행합니다.
gitlab-terraform destroy terraform destroy를 실행합니다.
gitlab-terraform fmt 아니요 check 모드에서 terraform fmt를 실행합니다.
gitlab-terraform init 해당 없음 terraform init를 실행합니다.
gitlab-terraform plan terraform plan을 실행하고 plan.cache 파일을 생성합니다.
gitlab-terraform plan-json 아니요 아니요 plan.cache 파일을 MR integration을 위한 GitLab Terraform 보고서로 변환합니다.
gitlab-terraform validate 백엔드 없이 예 terraform validate를 실행합니다.
gitlab-terraform -- <cmd> 아니요 래핑되었더라도 terraform <cmd>을 실행합니다.
gitlab-terraform <cmd> 아니요 숨겨진 명령어가 아닌 경우 terraform <cmd>를 실행합니다.

일반 변수

gitlab-terraform을 실행할 때 다음 변수가 구성됩니다.

변수 기본값 설명
TF_ROOT 설정되지 않음 Terraform 구성의 루트입니다. 설정된 경우 Terraform -chdir 인수 값으로 사용됩니다. 모든 읽고 쓴 파일은 지정된 구성 루트로 상대적입니다.
TF_CLI_CONFIG_FILE $HOME/.terraformrc Terraform 구성 파일의 위치입니다.
TF_IN_AUTOMATION true Terraform 명령어가 자동화되었음을 나타내는 데 true로 설정합니다.
TF_GITLAB_SOURCED false gitlab-terraform소스로 사용된 경우에 true로 설정합니다.
TF_PLAN_CACHE $TF_ROOT/plan.cache 또는 $PWD/plan.cache plan 캐시 파일의 위치입니다. TF_ROOT가 설정되어 있지 않으면 해당 경로는 현재 작업 디렉터리($PWD)를 기준으로 상대적입니다.
TF_PLAN_JSON $TF_ROOT/plan.json 또는 $PWD/plan.json MR integration을 위한 plan JSON 파일의 위치입니다. TF_ROOT가 설정되어 있지 않으면 해당 경로는 현재 작업 디렉터리($PWD)를 기준으로 상대적입니다.
DEBUG_OUTPUT "false" "true"로 설정되면 모든 문이 set -x로 기록됩니다.

GitLab 관리 Terraform state 변수

gitlab-terraform을 실행할 때 다음 변수가 구성됩니다.

변수 기본값 설명
TF_STATE_NAME 설정되지 않음 TF_ADDRESS가 설정되지 않고 TF_STATE_NAME이 제공되면, TF_STATE_NAME의 값이 GitLab 관리 Terraform State 이름으로 사용됩니다.
TF_ADDRESS $TF_STATE_NAME의 Terraform State API URL TF_HTTP_ADDRESS에 대한 기본값으로 사용됩니다. 기본적으로 TF_STATE_NAMEGitLab 관리 Terraform State 이름으로 사용합니다.
TF_USERNAME $GITLAB_USER_LOGIN 또는 TF_PASSWORD가 설정되지 않은 경우 gitlab-ci-token TF_HTTP_USERNAME에 대한 기본값으로 사용됩니다.
TF_PASSWORD $CI_JOB_TOKEN TF_HTTP_PASSWORD에 대한 기본값으로 사용됩니다.
TF_HTTP_ADDRESS $TF_ADDRESS Terraform 백엔드에 대한 주소입니다.
TF_HTTP_LOCK_ADDRESS $TF_ADDRESS/lock Terraform 백엔드 잠금 엔드포인트에 대한 주소입니다.
TF_HTTP_LOCK_METHOD POST Terraform 백엔드 잠금 엔드포인트에 사용할 메서드입니다.
TF_HTTP_UNLOCK_ADDRESS $TF_ADDRESS/lock Terraform 백엔드 잠금 해제 엔드포인트에 대한 주소입니다.
TF_HTTP_UNLOCK_METHOD DELETE Terraform 백엔드 잠금 해제 엔드포인트에 사용할 메서드입니다.
TF_HTTP_USERNAME $TF_USERNAME Terraform 백엔드와의 인증을 위한 사용자 이름입니다.
TF_HTTP_PASSWORD $TF_PASSWORD Terraform 백엔드와의 인증을 위한 비밀번호입니다.
TF_HTTP_RETRY_WAIT_MIN 5 Terraform 백엔드로의 HTTP 요청 시도 간격의 최소 시간(초)입니다.

명령 변수

gitlab-terraform를 실행할 때, 다음과 같은 변수들이 구성됩니다.

변수 기본값 설명
TF_IMPLICIT_INIT true true인 경우, 필요한 래핑된 명령 앞에서 암시적 terraform init이 실행됩니다.
TF_INIT_NO_RECONFIGURE false true인 경우, -reconfigure 없이 암시적 terraform init이 실행됩니다.
TF_INIT_FLAGS Not set 추가적인 terraform init 플래그들.

Terraform 입력 변수

gitlab-terraform를 실행할 때, 다음과 같은 Terraform 입력 변수들이 자동으로 설정됩니다. 기본 값에 대한 자세한 정보는 사전 정의된 변수를 참조하십시오.

변수 기본값
TF_VAR_CI_JOB_ID $CI_JOB_ID
TF_VAR_CI_COMMIT_SHA $CI_COMMIT_SHA
TF_VAR_CI_JOB_STAGE $CI_JOB_STAGE
TF_VAR_CI_PROJECT_ID $CI_PROJECT_ID
TF_VAR_CI_PROJECT_NAME $CI_PROJECT_NAME
TF_VAR_CI_PROJECT_NAMESPACE $CI_PROJECT_NAMESPACE
TF_VAR_CI_PROJECT_PATH $CI_PROJECT_PATH
TF_VAR_CI_PROJECT_URL $CI_PROJECT_URL

Terraform 이미지

gitlab-terraform 도우미 스크립트와 terraform 자체는 컨테이너 이미지에서 제공됩니다 registry.gitlab.com/gitlab-org/terraform-images/ 아래에서 이러한 이미지를 사용하여 통합을 구성하고 관리할 수 있습니다.

다음 이미지들이 제공됩니다:

이미지 이름 태그 설명
stable latest 최신 terraform-images 릴리스가 최신 Terraform 릴리스와 함께 번들로 제공됩니다.
releases/$TERRAFORM_VERSION latest 특정 Terraform 릴리스와 번들로 제공된 최신 terraform-images 릴리스입니다.
releases/$TERRAFORM_VERSION $TERRAFORM_IMAGES_VERSION 특정 Terraform 릴리스와 번들로 제공된 특정 terraform-images 릴리스입니다.

지원되는 조합에 대해서는 the terraform-images container registry를 참조하십시오.

관련 주제