파일명 오타주의보
.gitlab-ci.yml
파일 생성stages:
- Test and Lint
- Build and Push
- Staging Plan
- Staging Apply
- Production Plan
- Production Apply
- Destroy
Test and Lint:
stage: Test and Lint
script:
- echo "Test and Lint"
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^(master|production)$/ || $CI_COMMIT_BRANCH =~ /^(master|production)$/'
Validate Terraform:
stage: Test and Lint
script:
- echo "Validate Terraform"
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^(master|production)$/ || $CI_COMMIT_BRANCH =~ /^(master|production)$/'
Build and Push:
stage: Build and Push
script:
- echo "Build and Push Docker Image"
rules:
- if: '$CI_COMMIT_BRANCH =~ /^(master|production)$/'
Staging Plan:
stage: Staging Plan
script:
- echo "Run Terraform Plan for Staging"
rules:
- if: '$CI_COMMIT_BRANCH =~ /^(master|production)$/'
Staging Apply:
stage: Staging Apply
script:
- echo "Run Terraform Apply for Staging"
rules:
- if: '$CI_COMMIT_BRANCH =~ /^(master|production)$/'
Production Plan:
stage: Production Plan
script:
- echo "Run Terraform Plan for Production"
rules:
- if: '$CI_COMMIT_BRANCH == "production"'
Production Apply:
stage: Production Apply
script:
- echo "Run Terraform Apply for Production"
rules:
- if: '$CI_COMMIT_BRANCH == "production"'
Staging Destroy:
stage: Destroy
script:
- echo "Run Terraform Destroy for Staging"
rules:
- if: '$CI_COMMIT_BRANCH =~ /^(master|production)$/'
when: manual
Production Destroy:
stage: Destroy
script:
- echo "Run Terraform Destroy for Production"
rules:
- if: '$CI_COMMIT_BRANCH == "production"'
when: manual
stages:
- Test and Lint
- Build and Push
- Staging Plan
- Staging Apply
- Production Plan
- Production Apply
- Destroy
사용자가 직접 stage들을 정의한다.
크게 7가지의 stage들을 구성했다.
우리는 현재 gitlab기반의 ci/cd를 구상하고 있다.
파이프라인을 구축할 때, 트리거
를 염두에 둬야 한다.
"어떤 순간에 또는 어떤 시점
에 이러이러한 이벤트
를 자동으로 진행했으면 좋겠다."
따라서,
(1)에서 크게 구분한 7가지의 stage마다
그 규칙(=시점)을 지정하는 것은 당연하면서도 자연스럽다.
Test and Lint:
stage: Test and Lint
script:
- echo "Test and Lint"
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^(master|production)$/ || $CI_COMMIT_BRANCH =~ /^(master|production)$/'
stage
: Test and Lint
라고 다시 언급하고 있다.
헷갈릴 수도 있는 것이
가장 맨위의 Test and Lint 가 중복 아니냐 라고 할 수도 있지만,
이건 메타언어(메타태그)로 보면 된다.
즉,
Stage for test and lint:
stage: Test and Lint
script:
- echo "Test and Lint~~!"
와 같이 작성해도 된다.
$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
은
머지 리퀘스트를 요청한 브랜치 이름을 의미한다.
/^(master|production)%/
바로 그 브랜치가 master 또는 production인 순간을 의미한다.
$CI_COMMIT_BRANCH
remote 레포에 머지가 된 직후의 브랜치를 의미한다.
이때 역시, /^(master|production)$/
바로 그 브랜치가 master 또는 production인 순간을 의미한다.
좀 더 자연스럽게 설명하면
이 두 경우에 "정의한 이벤트를 진행하고 싶다"
고 하는 것이다.