InfoGrab Docs

Auto DevOps를 사용하여 Google Kubernetes Engine에 애플리케이션 배포

요약

이 튜토리얼은 Google Kubernetes Engine(GKE)에 애플리케이션을 배포하는 예시를 통해 Auto DevOps를 시작할 수 있도록 안내합니다. GitLab 기본 Kubernetes 통합을 사용하므로 Google Cloud Platform 콘솔을 사용하여 Kubernetes 클러스터를 수동으로 만들 필요가 없습니다.

이 튜토리얼은 Google Kubernetes Engine(GKE)에 애플리케이션을 배포하는 예시를 통해 Auto DevOps를 시작할 수 있도록 안내합니다.

GitLab 기본 Kubernetes 통합을 사용하므로 Google Cloud Platform 콘솔을 사용하여 Kubernetes 클러스터를 수동으로 만들 필요가 없습니다. GitLab 템플릿에서 만든 애플리케이션을 만들고 배포합니다.

이 지침은 GitLab Self-Managed에서도 작동합니다. 자체 러너가 구성되어 있고 Google OAuth가 활성화되어 있는지 확인하세요.

Google Kubernetes Engine에 프로젝트를 배포하려면 다음 단계를 따르세요:

  1. Google 계정 구성
  2. Kubernetes 클러스터 만들기 및 에이전트 배포
  3. 템플릿에서 새 프로젝트 만들기
  4. 에이전트 구성
  5. Ingress 설치
  6. Auto DevOps 구성
  7. Auto DevOps 활성화 및 파이프라인 실행
  8. 애플리케이션 배포

Google 계정 구성#

Kubernetes 클러스터를 만들어 GitLab 프로젝트에 연결하기 전에 Google Cloud Platform 계정이 필요합니다. Gmail이나 Google Drive에 사용하는 기존 Google 계정으로 로그인하거나 새 계정을 만드세요.

  1. Kubernetes Engine 문서의 "Before you begin" 섹션에 설명된 단계에 따라 필요한 API 및 관련 서비스를 활성화합니다.
  2. Google Cloud Platform에서 청구 계정을 만들었는지 확인합니다.
Note

모든 새 Google Cloud Platform(GCP) 계정은 $300 크레딧을 받으며, Google과의 파트너십을 통해 GitLab은 Google Kubernetes Engine과의 GitLab 통합을 시작하기 위한 새 GCP 계정에 추가로 $200을 제공할 수 있습니다. 이 링크를 따라 크레딧을 신청하세요.

Kubernetes 클러스터 만들기#

Google Kubernetes Engine(GKE)에서 새 클러스터를 만들려면 OpenTofu와 GitLab으로 Google GKE 클러스터 만들기 가이드의 단계에 따라 IaC(Infrastructure as Code) 접근 방식을 사용합니다. 이 가이드에서는 Terraform을 사용하여 GKE 클러스터를 만들고 Kubernetes용 GitLab 에이전트를 설치하는 새 프로젝트를 만들어야 합니다. 이 프로젝트는 Kubernetes용 GitLab 에이전트의 구성이 있는 곳입니다.

템플릿에서 애플리케이션 프로젝트 만들기#

GitLab 프로젝트 템플릿을 사용하여 시작합니다. 이름에서 알 수 있듯이 이러한 프로젝트는 잘 알려진 프레임워크로 구축된 기본적인 애플리케이션을 제공합니다.

Warning

클러스터 관리 프로젝트와 동일한 수준이나 그 하위의 그룹 계층에서 애플리케이션 프로젝트를 만드세요. 그렇지 않으면 에이전트 승인에 실패합니다.

  1. 오른쪽 상단 모서리에서 Create new(+) 및 New project/repository를 선택합니다.
  2. Create from template을 선택합니다.
  3. Ruby on Rails 템플릿을 선택합니다.
  4. 프로젝트 이름을 지정하고 선택적으로 설명을 입력하고 GitLab Ultimate 플랜에서 사용 가능한 기능을 활용할 수 있도록 공개로 설정합니다.
  5. Create project를 선택합니다.

이제 GKE 클러스터에 배포할 애플리케이션 프로젝트가 생겼습니다.

에이전트 구성#

이제 애플리케이션 프로젝트를 배포하는 데 사용할 수 있도록 Kubernetes용 GitLab 에이전트를 구성합니다.

  1. 클러스터를 관리하기 위해 만든 프로젝트로 이동합니다.
  2. 에이전트 구성 파일(.gitlab/agents/<agent-name>/config.yaml)로 이동하여 편집합니다.
  3. ci_access:projects 속성을 구성합니다. 애플리케이션 프로젝트 경로를 id로 사용합니다:
ci_access:
  projects:
    - id: path/to/application-project

Ingress 설치#

클러스터가 실행되면 인터넷에서 애플리케이션으로 트래픽을 라우팅하는 로드 밸런서로 NGINX Ingress Controller를 설치해야 합니다. GitLab 클러스터 관리 프로젝트 템플릿을 통해 또는 Google Cloud Shell을 사용하여 수동으로 NGINX Ingress Controller를 설치합니다:

  1. 클러스터의 세부 정보 페이지로 이동하여 Advanced Settings 탭을 선택합니다.

  2. Google Kubernetes Engine 링크를 선택하여 Google Cloud Console에서 클러스터를 방문합니다.

  3. GKE 클러스터 페이지에서 Connect를 선택한 다음 Run in Cloud Shell을 선택합니다.

  4. Cloud Shell이 시작되면 다음 명령을 실행하여 NGINX Ingress Controller를 설치합니다:

    helm upgrade --install ingress-nginx ingress-nginx \
    --repo https://kubernetes.github.io/ingress-nginx \
    --namespace gitlab-managed-apps --create-namespace
    
    # Check that the ingress controller is installed successfully
    kubectl get service ingress-nginx-controller -n gitlab-managed-apps
    

Auto DevOps 구성#

다음 단계에 따라 Auto DevOps에 필요한 기본 도메인 및 기타 설정을 구성합니다.

  1. NGINX를 설치한 후 몇 분 내에 로드 밸런서가 IP 주소를 얻으면 다음 명령으로 외부 IP 주소를 가져올 수 있습니다:

    kubectl get service ingress-nginx-controller -n gitlab-managed-apps -ojson | jq -r '.status.loadBalancer.ingress[].ip'
    

    네임스페이스를 덮어쓴 경우 gitlab-managed-apps를 교체합니다.

    다음 단계에 필요하므로 이 IP 주소를 복사합니다.

  2. 애플리케이션 프로젝트로 돌아갑니다.

  3. 왼쪽 사이드바에서 Settings > CI/CD를 선택하고 Variables를 펼칩니다.

    • 값으로 애플리케이션 배포 도메인을 사용하여 KUBE_INGRESS_BASE_DOMAIN 키를 추가합니다. 이 예에서는 .nip.io 도메인을 사용합니다.
    • 배포를 대상으로 하는 Kubernetes 네임스페이스 값을 사용하여 KUBE_NAMESPACE 키를 추가합니다. 환경별로 다른 네임스페이스를 사용할 수 있습니다. 환경을 구성하고 환경 범위를 사용합니다.
    • <path/to/agent/project>:<agent-name> 값을 사용하여 KUBE_CONTEXT 키를 추가합니다. 원하는 환경 범위를 선택합니다.
    • Save changes를 선택합니다.

Auto DevOps 활성화 및 파이프라인 실행#

Auto DevOps는 기본적으로 활성화되어 있지만 인스턴스(GitLab Self-Managed 인스턴스의 경우) 및 그룹 모두에 대해 비활성화될 수 있습니다. 비활성화된 경우 다음 단계를 완료하여 Auto DevOps를 활성화합니다:

  1. 상단 바에서 Search or go to를 선택하고 애플리케이션 프로젝트를 찾습니다.

  2. Settings > CI/CD를 선택합니다.

  3. Auto DevOps를 펼칩니다.

  4. 추가 옵션을 표시하려면 Default to Auto DevOps pipeline을 선택합니다.

  5. Deployment strategy에서 기본 브랜치에서 파이프라인이 성공적으로 실행된 후 애플리케이션을 프로덕션에 배포하려는 지속적 배포 전략을 선택합니다.

  6. Save changes를 선택합니다.

  7. Auto DevOps 템플릿을 포함하고 master 브랜치에 변경 사항을 커밋하도록 .gitlab-ci.yml 파일을 편집합니다:

    include:
    - template: Auto-DevOps.gitlab-ci.yml
    

커밋이 파이프라인을 트리거해야 합니다. 다음 섹션에서는 파이프라인의 각 작업이 수행하는 작업을 설명합니다.

애플리케이션 배포#

파이프라인이 실행될 때 어떤 일이 일어나나요?

파이프라인의 작업을 보려면 파이프라인의 상태 배지를 선택합니다. 파이프라인 작업이 실행 중일 때 [status_running] 아이콘이 표시되고, 작업이 완료되면 페이지를 새로 고치지 않고 성공의 경우 [status_success], 실패의 경우 [status_failed]로 업데이트됩니다.

작업은 스테이지로 구분됩니다:

파이프라인 스테이지

  • Build - 애플리케이션이 Docker 이미지를 빌드하고 프로젝트의 컨테이너 레지스트리에 업로드합니다(Auto Build).

  • Test - GitLab은 애플리케이션에 대한 다양한 검사를 실행하지만 테스트 스테이지에서는 test를 제외한 모든 작업이 실패해도 됩니다:

    • test 작업은 언어와 프레임워크를 감지하여 단위 및 통합 테스트를 실행합니다(Auto Test).
    • code_quality 작업은 코드 품질을 확인하며 실패해도 됩니다(Auto Code Quality).
    • container_scanning 작업은 Docker 컨테이너에 취약점이 있는지 확인하며 실패해도 됩니다(자동 컨테이너 스캐닝).
    • dependency_scanning 작업은 애플리케이션에 취약점에 노출된 의존성이 있는지 확인하며 실패해도 됩니다(자동 의존성 스캐닝).
    • -sast 접미사가 있는 작업은 잠재적인 보안 문제를 확인하기 위해 현재 코드에 대한 정적 분석을 실행하며 실패해도 됩니다(Auto SAST).
    • secret-detection 작업은 유출된 시크릿을 확인하며 실패해도 됩니다(자동 시크릿 감지).
  • Review - 기본 브랜치의 파이프라인에는 dast_environment_deploy 작업이 있는 이 스테이지가 포함됩니다. 자세한 내용은 동적 애플리케이션 보안 테스트(DAST)를 참조하세요.

  • Production - 테스트와 검사가 완료되면 애플리케이션이 Kubernetes에 배포됩니다(Auto Deploy).

  • Performance - 배포된 애플리케이션에서 성능 테스트가 실행됩니다(Auto 브라우저 성능 테스트).

  • Cleanup - 기본 브랜치의 파이프라인에는 stop_dast_environment 작업이 있는 이 스테이지가 포함됩니다.

파이프라인을 실행한 후 배포된 웹사이트를 보고 모니터링 방법을 알아봐야 합니다.

프로젝트 모니터링#

애플리케이션을 성공적으로 배포한 후 Operate > Environments로 이동하여 Environments 페이지에서 웹사이트를 보고 상태를 확인할 수 있습니다. 이 페이지에는 배포된 애플리케이션에 대한 세부 정보가 표시되고 오른쪽 열에는 일반적인 환경 작업으로 연결되는 아이콘이 표시됩니다:

환경

  • Open live environment([external-link]) - 프로덕션에 배포된 애플리케이션의 URL을 엽니다.
  • Monitoring([chart]) - Prometheus가 Kubernetes 클러스터에 대한 데이터를 수집하고 메모리 사용량, CPU 사용량 및 지연 시간 면에서 애플리케이션이 미치는 영향을 보여주는 메트릭 페이지를 엽니다.
  • Deploy to([play] [chevron-lg-down]) - 배포할 수 있는 환경 목록을 표시합니다.
  • Terminal([terminal]) - 애플리케이션이 실행 중인 컨테이너 내에서 웹 터미널 세션을 엽니다.
  • Re-deploy to environment([repeat]) - 자세한 내용은 재시도 및 롤백을 참조하세요.
  • Stop environment([stop]) - 자세한 내용은 환경 중지를 참조하세요.

GitLab은 환경 정보 아래에 배포 보드를 표시하며, Kubernetes 클러스터의 포드를 나타내는 정사각형이 상태에 따라 색으로 구분됩니다. 배포 보드의 정사각형 위에 마우스를 올리면 배포 상태가 표시되고, 정사각형을 선택하면 포드의 로그 페이지로 이동합니다.

Note

예시에서는 현재 애플리케이션을 호스팅하는 포드가 하나만 표시되지만 Settings > CI/CD > Variables에서 REPLICAS CI/CD 변수를 정의하여 더 많은 포드를 추가할 수 있습니다.

브랜치 작업#

다음으로 애플리케이션에 콘텐츠를 추가하는 기능 브랜치를 만듭니다:

  1. 프로젝트 저장소에서 다음 파일로 이동합니다: app/views/welcome/index.html.erb. 이 파일에는 단락만 포함되어야 합니다: <p>You're on Rails!</p>.

  2. GitLab Web IDE를 열어 변경합니다.

  3. 파일을 다음과 같이 편집합니다:

    <p>You're on Rails! Powered by GitLab Auto DevOps.</p>
    
  4. 파일을 스테이징합니다. 커밋 메시지를 추가하고 Commit을 선택하여 새 브랜치와 머지 요청을 만듭니다.

    Web IDE 커밋

머지 요청을 제출한 후 GitLab은 앞서 설명한 파이프라인과 그 안의 모든 작업을 실행하며, 기본 브랜치 이외의 브랜치에서만 실행되는 몇 가지 추가 작업도 실행됩니다.

몇 분 후 테스트가 실패하면 변경에 의해 테스트가 '손상'되었음을 의미합니다. 실패한 test 작업을 선택하여 자세한 내용을 확인합니다:

Failure:
WelcomeControllerTest#test_should_get_index [/app/test/controllers/welcome_controller_test.rb:7]:
 expected but was
..
Expected 0 to be >= 1.

bin/rails test test/controllers/welcome_controller_test.rb:4

손상된 테스트를 수정하려면:

  1. 머지 요청으로 돌아갑니다.
  2. 오른쪽 상단 모서리에서 Code를 선택한 다음 Open in Web IDE를 선택합니다.
  3. 왼쪽 파일 디렉토리에서 test/controllers/welcome_controller_test.rb 파일을 찾아 선택하여 엽니다.
  4. 7번째 줄을 You're on Rails! Powered by GitLab Auto DevOps.로 변경합니다.
  5. 왼쪽 사이드바에서 Source Control([merge])을 선택합니다.
  6. 커밋 메시지를 작성하고 Commit을 선택합니다.

머지 요청의 Overview 페이지로 돌아가면 테스트가 통과될 뿐만 아니라 애플리케이션이 리뷰 애플리케이션으로 배포된 것을 볼 수 있습니다. View app [external-link] 버튼을 선택하여 배포된 변경 사항을 볼 수 있습니다.

머지 요청을 병합한 후 GitLab은 기본 브랜치에서 파이프라인을 실행하고 애플리케이션을 프로덕션에 배포합니다.

결론#

이 프로젝트를 구현한 후 Auto DevOps의 기본 사항에 대한 확실한 이해를 얻어야 합니다. GitLab에서 애플리케이션을 빌드하고 테스트하는 것부터 배포하고 모니터링하는 것까지 시작했습니다. 자동화 특성에도 불구하고 Auto DevOps는 워크플로에 맞게 구성하고 사용자 정의할 수 있습니다. 다음은 추가 읽기를 위한 유용한 리소스입니다:

  1. Auto DevOps
  2. 여러 Kubernetes 클러스터
  3. 프로덕션에 점진적 롤아웃
  4. CI/CD 변수로 필요하지 않은 작업 비활성화
  5. 자체 빌드팩을 사용하여 애플리케이션 빌드

Auto DevOps를 사용하여 Google Kubernetes Engine에 애플리케이션 배포

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

이 튜토리얼은 Google Kubernetes Engine(GKE)에 애플리케이션을 배포하는 예시를 통해 Auto DevOps를 시작할 수 있도록 안내합니다. GitLab 기본 Kubernetes 통합을 사용하므로 Google Cloud Platform 콘솔을 사용하여 Kubernetes 클러스터를 수동으로 만들 필요가 없습니다.

이 튜토리얼은 Google Kubernetes Engine(GKE)에 애플리케이션을 배포하는 예시를 통해 Auto DevOps를 시작할 수 있도록 안내합니다.

GitLab 기본 Kubernetes 통합을 사용하므로 Google Cloud Platform 콘솔을 사용하여 Kubernetes 클러스터를 수동으로 만들 필요가 없습니다. GitLab 템플릿에서 만든 애플리케이션을 만들고 배포합니다.

이 지침은 GitLab Self-Managed에서도 작동합니다. 자체 러너가 구성되어 있고 Google OAuth가 활성화되어 있는지 확인하세요.

Google Kubernetes Engine에 프로젝트를 배포하려면 다음 단계를 따르세요:

  1. Google 계정 구성
  2. Kubernetes 클러스터 만들기 및 에이전트 배포
  3. 템플릿에서 새 프로젝트 만들기
  4. 에이전트 구성
  5. Ingress 설치
  6. Auto DevOps 구성
  7. Auto DevOps 활성화 및 파이프라인 실행
  8. 애플리케이션 배포

Google 계정 구성#

Kubernetes 클러스터를 만들어 GitLab 프로젝트에 연결하기 전에 Google Cloud Platform 계정이 필요합니다. Gmail이나 Google Drive에 사용하는 기존 Google 계정으로 로그인하거나 새 계정을 만드세요.

  1. Kubernetes Engine 문서의 "Before you begin" 섹션에 설명된 단계에 따라 필요한 API 및 관련 서비스를 활성화합니다.
  2. Google Cloud Platform에서 청구 계정을 만들었는지 확인합니다.
Note

모든 새 Google Cloud Platform(GCP) 계정은 $300 크레딧을 받으며, Google과의 파트너십을 통해 GitLab은 Google Kubernetes Engine과의 GitLab 통합을 시작하기 위한 새 GCP 계정에 추가로 $200을 제공할 수 있습니다. 이 링크를 따라 크레딧을 신청하세요.

Kubernetes 클러스터 만들기#

Google Kubernetes Engine(GKE)에서 새 클러스터를 만들려면 OpenTofu와 GitLab으로 Google GKE 클러스터 만들기 가이드의 단계에 따라 IaC(Infrastructure as Code) 접근 방식을 사용합니다. 이 가이드에서는 Terraform을 사용하여 GKE 클러스터를 만들고 Kubernetes용 GitLab 에이전트를 설치하는 새 프로젝트를 만들어야 합니다. 이 프로젝트는 Kubernetes용 GitLab 에이전트의 구성이 있는 곳입니다.

템플릿에서 애플리케이션 프로젝트 만들기#

GitLab 프로젝트 템플릿을 사용하여 시작합니다. 이름에서 알 수 있듯이 이러한 프로젝트는 잘 알려진 프레임워크로 구축된 기본적인 애플리케이션을 제공합니다.

Warning

클러스터 관리 프로젝트와 동일한 수준이나 그 하위의 그룹 계층에서 애플리케이션 프로젝트를 만드세요. 그렇지 않으면 에이전트 승인에 실패합니다.

  1. 오른쪽 상단 모서리에서 Create new(+) 및 New project/repository를 선택합니다.
  2. Create from template을 선택합니다.
  3. Ruby on Rails 템플릿을 선택합니다.
  4. 프로젝트 이름을 지정하고 선택적으로 설명을 입력하고 GitLab Ultimate 플랜에서 사용 가능한 기능을 활용할 수 있도록 공개로 설정합니다.
  5. Create project를 선택합니다.

이제 GKE 클러스터에 배포할 애플리케이션 프로젝트가 생겼습니다.

에이전트 구성#

이제 애플리케이션 프로젝트를 배포하는 데 사용할 수 있도록 Kubernetes용 GitLab 에이전트를 구성합니다.

  1. 클러스터를 관리하기 위해 만든 프로젝트로 이동합니다.
  2. 에이전트 구성 파일(.gitlab/agents/<agent-name>/config.yaml)로 이동하여 편집합니다.
  3. ci_access:projects 속성을 구성합니다. 애플리케이션 프로젝트 경로를 id로 사용합니다:
ci_access:
  projects:
    - id: path/to/application-project

Ingress 설치#

클러스터가 실행되면 인터넷에서 애플리케이션으로 트래픽을 라우팅하는 로드 밸런서로 NGINX Ingress Controller를 설치해야 합니다. GitLab 클러스터 관리 프로젝트 템플릿을 통해 또는 Google Cloud Shell을 사용하여 수동으로 NGINX Ingress Controller를 설치합니다:

  1. 클러스터의 세부 정보 페이지로 이동하여 Advanced Settings 탭을 선택합니다.

  2. Google Kubernetes Engine 링크를 선택하여 Google Cloud Console에서 클러스터를 방문합니다.

  3. GKE 클러스터 페이지에서 Connect를 선택한 다음 Run in Cloud Shell을 선택합니다.

  4. Cloud Shell이 시작되면 다음 명령을 실행하여 NGINX Ingress Controller를 설치합니다:

    helm upgrade --install ingress-nginx ingress-nginx \
    --repo https://kubernetes.github.io/ingress-nginx \
    --namespace gitlab-managed-apps --create-namespace
    
    # Check that the ingress controller is installed successfully
    kubectl get service ingress-nginx-controller -n gitlab-managed-apps
    

Auto DevOps 구성#

다음 단계에 따라 Auto DevOps에 필요한 기본 도메인 및 기타 설정을 구성합니다.

  1. NGINX를 설치한 후 몇 분 내에 로드 밸런서가 IP 주소를 얻으면 다음 명령으로 외부 IP 주소를 가져올 수 있습니다:

    kubectl get service ingress-nginx-controller -n gitlab-managed-apps -ojson | jq -r '.status.loadBalancer.ingress[].ip'
    

    네임스페이스를 덮어쓴 경우 gitlab-managed-apps를 교체합니다.

    다음 단계에 필요하므로 이 IP 주소를 복사합니다.

  2. 애플리케이션 프로젝트로 돌아갑니다.

  3. 왼쪽 사이드바에서 Settings > CI/CD를 선택하고 Variables를 펼칩니다.

    • 값으로 애플리케이션 배포 도메인을 사용하여 KUBE_INGRESS_BASE_DOMAIN 키를 추가합니다. 이 예에서는 .nip.io 도메인을 사용합니다.
    • 배포를 대상으로 하는 Kubernetes 네임스페이스 값을 사용하여 KUBE_NAMESPACE 키를 추가합니다. 환경별로 다른 네임스페이스를 사용할 수 있습니다. 환경을 구성하고 환경 범위를 사용합니다.
    • <path/to/agent/project>:<agent-name> 값을 사용하여 KUBE_CONTEXT 키를 추가합니다. 원하는 환경 범위를 선택합니다.
    • Save changes를 선택합니다.

Auto DevOps 활성화 및 파이프라인 실행#

Auto DevOps는 기본적으로 활성화되어 있지만 인스턴스(GitLab Self-Managed 인스턴스의 경우) 및 그룹 모두에 대해 비활성화될 수 있습니다. 비활성화된 경우 다음 단계를 완료하여 Auto DevOps를 활성화합니다:

  1. 상단 바에서 Search or go to를 선택하고 애플리케이션 프로젝트를 찾습니다.

  2. Settings > CI/CD를 선택합니다.

  3. Auto DevOps를 펼칩니다.

  4. 추가 옵션을 표시하려면 Default to Auto DevOps pipeline을 선택합니다.

  5. Deployment strategy에서 기본 브랜치에서 파이프라인이 성공적으로 실행된 후 애플리케이션을 프로덕션에 배포하려는 지속적 배포 전략을 선택합니다.

  6. Save changes를 선택합니다.

  7. Auto DevOps 템플릿을 포함하고 master 브랜치에 변경 사항을 커밋하도록 .gitlab-ci.yml 파일을 편집합니다:

    include:
    - template: Auto-DevOps.gitlab-ci.yml
    

커밋이 파이프라인을 트리거해야 합니다. 다음 섹션에서는 파이프라인의 각 작업이 수행하는 작업을 설명합니다.

애플리케이션 배포#

파이프라인이 실행될 때 어떤 일이 일어나나요?

파이프라인의 작업을 보려면 파이프라인의 상태 배지를 선택합니다. 파이프라인 작업이 실행 중일 때 [status_running] 아이콘이 표시되고, 작업이 완료되면 페이지를 새로 고치지 않고 성공의 경우 [status_success], 실패의 경우 [status_failed]로 업데이트됩니다.

작업은 스테이지로 구분됩니다:

파이프라인 스테이지

  • Build - 애플리케이션이 Docker 이미지를 빌드하고 프로젝트의 컨테이너 레지스트리에 업로드합니다(Auto Build).

  • Test - GitLab은 애플리케이션에 대한 다양한 검사를 실행하지만 테스트 스테이지에서는 test를 제외한 모든 작업이 실패해도 됩니다:

    • test 작업은 언어와 프레임워크를 감지하여 단위 및 통합 테스트를 실행합니다(Auto Test).
    • code_quality 작업은 코드 품질을 확인하며 실패해도 됩니다(Auto Code Quality).
    • container_scanning 작업은 Docker 컨테이너에 취약점이 있는지 확인하며 실패해도 됩니다(자동 컨테이너 스캐닝).
    • dependency_scanning 작업은 애플리케이션에 취약점에 노출된 의존성이 있는지 확인하며 실패해도 됩니다(자동 의존성 스캐닝).
    • -sast 접미사가 있는 작업은 잠재적인 보안 문제를 확인하기 위해 현재 코드에 대한 정적 분석을 실행하며 실패해도 됩니다(Auto SAST).
    • secret-detection 작업은 유출된 시크릿을 확인하며 실패해도 됩니다(자동 시크릿 감지).
  • Review - 기본 브랜치의 파이프라인에는 dast_environment_deploy 작업이 있는 이 스테이지가 포함됩니다. 자세한 내용은 동적 애플리케이션 보안 테스트(DAST)를 참조하세요.

  • Production - 테스트와 검사가 완료되면 애플리케이션이 Kubernetes에 배포됩니다(Auto Deploy).

  • Performance - 배포된 애플리케이션에서 성능 테스트가 실행됩니다(Auto 브라우저 성능 테스트).

  • Cleanup - 기본 브랜치의 파이프라인에는 stop_dast_environment 작업이 있는 이 스테이지가 포함됩니다.

파이프라인을 실행한 후 배포된 웹사이트를 보고 모니터링 방법을 알아봐야 합니다.

프로젝트 모니터링#

애플리케이션을 성공적으로 배포한 후 Operate > Environments로 이동하여 Environments 페이지에서 웹사이트를 보고 상태를 확인할 수 있습니다. 이 페이지에는 배포된 애플리케이션에 대한 세부 정보가 표시되고 오른쪽 열에는 일반적인 환경 작업으로 연결되는 아이콘이 표시됩니다:

환경

  • Open live environment([external-link]) - 프로덕션에 배포된 애플리케이션의 URL을 엽니다.
  • Monitoring([chart]) - Prometheus가 Kubernetes 클러스터에 대한 데이터를 수집하고 메모리 사용량, CPU 사용량 및 지연 시간 면에서 애플리케이션이 미치는 영향을 보여주는 메트릭 페이지를 엽니다.
  • Deploy to([play] [chevron-lg-down]) - 배포할 수 있는 환경 목록을 표시합니다.
  • Terminal([terminal]) - 애플리케이션이 실행 중인 컨테이너 내에서 웹 터미널 세션을 엽니다.
  • Re-deploy to environment([repeat]) - 자세한 내용은 재시도 및 롤백을 참조하세요.
  • Stop environment([stop]) - 자세한 내용은 환경 중지를 참조하세요.

GitLab은 환경 정보 아래에 배포 보드를 표시하며, Kubernetes 클러스터의 포드를 나타내는 정사각형이 상태에 따라 색으로 구분됩니다. 배포 보드의 정사각형 위에 마우스를 올리면 배포 상태가 표시되고, 정사각형을 선택하면 포드의 로그 페이지로 이동합니다.

Note

예시에서는 현재 애플리케이션을 호스팅하는 포드가 하나만 표시되지만 Settings > CI/CD > Variables에서 REPLICAS CI/CD 변수를 정의하여 더 많은 포드를 추가할 수 있습니다.

브랜치 작업#

다음으로 애플리케이션에 콘텐츠를 추가하는 기능 브랜치를 만듭니다:

  1. 프로젝트 저장소에서 다음 파일로 이동합니다: app/views/welcome/index.html.erb. 이 파일에는 단락만 포함되어야 합니다: <p>You're on Rails!</p>.

  2. GitLab Web IDE를 열어 변경합니다.

  3. 파일을 다음과 같이 편집합니다:

    <p>You're on Rails! Powered by GitLab Auto DevOps.</p>
    
  4. 파일을 스테이징합니다. 커밋 메시지를 추가하고 Commit을 선택하여 새 브랜치와 머지 요청을 만듭니다.

    Web IDE 커밋

머지 요청을 제출한 후 GitLab은 앞서 설명한 파이프라인과 그 안의 모든 작업을 실행하며, 기본 브랜치 이외의 브랜치에서만 실행되는 몇 가지 추가 작업도 실행됩니다.

몇 분 후 테스트가 실패하면 변경에 의해 테스트가 '손상'되었음을 의미합니다. 실패한 test 작업을 선택하여 자세한 내용을 확인합니다:

Failure:
WelcomeControllerTest#test_should_get_index [/app/test/controllers/welcome_controller_test.rb:7]:
 expected but was
..
Expected 0 to be >= 1.

bin/rails test test/controllers/welcome_controller_test.rb:4

손상된 테스트를 수정하려면:

  1. 머지 요청으로 돌아갑니다.
  2. 오른쪽 상단 모서리에서 Code를 선택한 다음 Open in Web IDE를 선택합니다.
  3. 왼쪽 파일 디렉토리에서 test/controllers/welcome_controller_test.rb 파일을 찾아 선택하여 엽니다.
  4. 7번째 줄을 You're on Rails! Powered by GitLab Auto DevOps.로 변경합니다.
  5. 왼쪽 사이드바에서 Source Control([merge])을 선택합니다.
  6. 커밋 메시지를 작성하고 Commit을 선택합니다.

머지 요청의 Overview 페이지로 돌아가면 테스트가 통과될 뿐만 아니라 애플리케이션이 리뷰 애플리케이션으로 배포된 것을 볼 수 있습니다. View app [external-link] 버튼을 선택하여 배포된 변경 사항을 볼 수 있습니다.

머지 요청을 병합한 후 GitLab은 기본 브랜치에서 파이프라인을 실행하고 애플리케이션을 프로덕션에 배포합니다.

결론#

이 프로젝트를 구현한 후 Auto DevOps의 기본 사항에 대한 확실한 이해를 얻어야 합니다. GitLab에서 애플리케이션을 빌드하고 테스트하는 것부터 배포하고 모니터링하는 것까지 시작했습니다. 자동화 특성에도 불구하고 Auto DevOps는 워크플로에 맞게 구성하고 사용자 정의할 수 있습니다. 다음은 추가 읽기를 위한 유용한 리소스입니다:

  1. Auto DevOps
  2. 여러 Kubernetes 클러스터
  3. 프로덕션에 점진적 롤아웃
  4. CI/CD 변수로 필요하지 않은 작업 비활성화
  5. 자체 빌드팩을 사용하여 애플리케이션 빌드