diff --git a/pipelines/terraform.yml b/pipelines/terraform.yml new file mode 100644 index 0000000..52f0ae4 --- /dev/null +++ b/pipelines/terraform.yml @@ -0,0 +1,69 @@ +stages: + - plan + - apply + - destroy + +include: + - project: 'developerdurp/yml' + ref: main + file: + - 'jobs/terraform.yml' + +workflow: + rules: + - if: $CI_COMMIT_BRANCH + changes: + - terraform/** + +format: + stage: .pre + allow_failure: false + extends: .terraform_fmt + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: always + - when: never + +validate: + stage: .pre + allow_failure: false + extends: .terraform_validate + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: always + - when: never + +plan: + stage: plan + variables: + ARGUMENTS: -var-file=terraform.tfvars + allow_failure: false + extends: .terraform_plan + needs: ["validate","format"] + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: always + - when: never + +apply: + stage: apply + variables: + ARGUMENTS: -var-file=terraform.tfvars + allow_failure: false + extends: .terraform_apply + rules: + - if: $CI_PIPELINE_SOURCE == "schedule" + when: never + - if: '$CI_COMMIT_BRANCH == "main"' + when: always + - when: never + +destroy: + stage: destroy + variables: + ARGUMENTS: -var-file=terraform.tfvars + allow_failure: false + extends: .terraform_destroy + needs: ["apply"] + rules: + - when: manual \ No newline at end of file diff --git a/scripts/cd-workdir.sh b/scripts/cd-workdir.sh new file mode 100644 index 0000000..1b49327 --- /dev/null +++ b/scripts/cd-workdir.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +#%%MULTILINE_YAML_START +#change directory +cd $WORKDIR \ No newline at end of file diff --git a/templates/terraform.tpl.yml b/templates/terraform.tpl.yml index be3f6de..593d6eb 100644 --- a/templates/terraform.tpl.yml +++ b/templates/terraform.tpl.yml @@ -3,7 +3,10 @@ name: registry.durp.info/hashicorp/terraform:light #name: hashicorp/terraform:light entrypoint: [""] + variables: + WORKDIR: $CI_PROJECT_DIR/terraform script: + - ./scripts/cd-workdir.sh - ./scripts/terraform-fmt.sh .terraform_validate: @@ -12,8 +15,10 @@ #name: hashicorp/terraform:light entrypoint: [""] variables: + WORKDIR: $CI_PROJECT_DIR/terraform GITLAB_TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${CI_PROJECT_NAME} script: + - ./scripts/cd-workdir.sh - ./scripts/terraform-init.sh - ./scripts/terraform-validate.sh @@ -23,10 +28,12 @@ #name: hashicorp/terraform:light entrypoint: [""] variables: + WORKDIR: $CI_PROJECT_DIR/terraform PLAN: plan.tfplan JSON_PLAN_FILE: tfplan.json GITLAB_TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${CI_PROJECT_NAME} script: + - ./scripts/cd-workdir.sh - ./scripts/terraform-init.sh - ./scripts/terraform-plan.sh artifacts: @@ -40,8 +47,10 @@ #name: hashicorp/terraform:light entrypoint: [""] variables: + WORKDIR: $CI_PROJECT_DIR/terraform GITLAB_TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${CI_PROJECT_NAME} script: + - ./scripts/cd-workdir.sh - ./scripts/terraform-init.sh - ./scripts/terraform-apply.sh @@ -51,8 +60,9 @@ #name: hashicorp/terraform:light entrypoint: [""] variables: + WORKDIR: $CI_PROJECT_DIR/terraform GITLAB_TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${CI_PROJECT_NAME} - WORKDIR: $CI_PROJECT_DIR script: + - ./scripts/cd-workdir.sh - ./scripts/terraform-init.sh - ./scripts/terraform-destroy.sh \ No newline at end of file