InfoGrab Docs

배포

요약

코드 버전을 환경에 배포하면 배포가 생성됩니다. 프로젝트와 연결된 Kubernetes와 같은 배포 서비스가 있는 경우 배포를 지원하는 데 사용할 수 있습니다. 배포가 생성된 후 사용자에게 롤아웃할 수 있습니다. 누군가 수동으로 배포를 시작해야 하는 잡을 만들 수 있습니다.

코드 버전을 환경에 배포하면 배포가 생성됩니다. 환경당 일반적으로 하나의 활성 배포만 있습니다.

GitLab:

  • 각 환경에 대한 배포의 전체 기록을 제공합니다.
  • 배포를 추적하여 서버에 무엇이 배포되어 있는지 항상 알 수 있습니다.

프로젝트와 연결된 Kubernetes와 같은 배포 서비스가 있는 경우 배포를 지원하는 데 사용할 수 있습니다.

배포가 생성된 후 사용자에게 롤아웃할 수 있습니다.

수동 배포 구성#

누군가 수동으로 배포를 시작해야 하는 잡을 만들 수 있습니다. 예를 들어:

deploy_prod:
  stage: deploy
  script:
    - echo "Deploy to production server"
  environment:
    name: production
    url: https://example.com
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual

when: manual 액션:

  • GitLab UI에서 잡에 대한 Run([play]) 버튼을 노출하며 Can be manually deployed to <environment> 텍스트가 표시됩니다.
  • deploy_prod 잡을 수동으로 트리거해야 함을 의미합니다.

파이프라인, 환경, 배포 및 잡 보기에서 Run([play])을 찾을 수 있습니다.

배포당 새로 포함된 머지 리퀘스트 추적#

GitLab은 배포당 새로 포함된 머지 리퀘스트를 추적할 수 있습니다. 배포가 성공하면 시스템이 최신 배포와 이전 배포 간의 커밋 차이를 계산합니다. Deployment API로 추적 정보를 가져오거나 머지 리퀘스트 페이지의 머지 후 파이프라인에서 볼 수 있습니다.

추적을 활성화하려면 환경을 다음 중 하나로 구성합니다:

  • 환경 이름/를 포함하는 폴더를 사용하지 않습니다(장기 실행 또는 최상위 환경).

  • 환경 계층production 또는 staging입니다.

    .gitlab-ci.yml에서 environment 키워드를 사용한 구성 예시:

    # 추적 가능
    environment: production
    environment: production/aws
    environment: development
    
    # 추적 불가능
    environment: review/$CI_COMMIT_REF_SLUG
    environment: testing/aws
    

구성 변경 사항은 새 배포에만 적용됩니다. 기존 배포 레코드에서는 머지 리퀘스트가 연결되거나 연결 해제되지 않습니다.

로컬에서 배포 체크아웃#

각 배포에 대해 Git 저장소에 참조가 저장되므로 현재 환경의 상태 파악은 git fetch만으로 가능합니다.

Git 구성에서 추가 fetch 줄로 [remote "<your-remote>"] 블록에 추가합니다:

fetch = +refs/environments/*:refs/remotes/origin/environments/*

오래된 배포 아카이브#

프로젝트에서 새 배포가 발생하면 GitLab이 배포에 특수 Git-ref를 생성합니다. 이러한 Git-ref는 원격 GitLab 저장소에서 채워지므로 프로젝트의 배포 수가 증가함에 따라 git-fetchgit-pull과 같은 일부 Git 작업이 느려질 수 있습니다.

Git 작업의 효율성을 유지하기 위해 GitLab은 최근 배포 ref(최대 50,000개)만 유지하고 나머지 오래된 배포 ref는 삭제합니다. 아카이브된 배포는 감사 목적으로 UI 또는 API를 통해 여전히 사용할 수 있습니다. 또한 아카이브 후에도 커밋 SHA를 지정하여(예: git checkout <deployment-sha>) 저장소에서 배포된 커밋을 가져올 수 있습니다.

Note

GitLab은 모든 커밋을 keep-around ref로 보존하여 배포 ref에서 참조하지 않는 경우에도 배포된 커밋이 가비지 컬렉션되지 않도록 합니다.

배포 롤백#

특정 커밋에서 배포를 롤백하면 새 배포가 생성됩니다. 이 배포에는 고유한 잡 ID가 있습니다. 롤백할 커밋을 가리킵니다.

롤백이 성공하려면 잡의 script에 배포 프로세스가 정의되어 있어야 합니다.

배포 잡만 실행됩니다. 이전 잡이 배포 시 재생성해야 하는 아티팩트를 생성하는 경우 파이프라인 페이지에서 필요한 잡을 수동으로 실행해야 합니다. 예를 들어 Terraform을 사용하고 planapply 명령이 여러 잡으로 분리되어 있는 경우 배포하거나 롤백하려면 잡을 수동으로 실행해야 합니다.

배포 재시도 또는 롤백#

배포에 문제가 있는 경우 재시도하거나 롤백할 수 있습니다.

배포를 재시도하거나 롤백하려면:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Operate > Environments를 선택합니다.
  3. 환경을 선택합니다.
  4. 배포 이름의 오른쪽에서:
    • 배포를 재시도하려면 Re-deploy to environment를 선택합니다.
    • 배포를 롤백하려면 이전에 성공한 배포 옆의 Rollback environment를 선택합니다.
Note

프로젝트에서 오래된 배포 잡을 방지했다면 롤백 버튼이 숨겨지거나 비활성화될 수 있습니다. 이 경우 롤백 배포를 위한 잡 재시도를 참조하세요.

관련 항목#

문제 해결#

배포 작업 중에 다음 문제가 발생할 수 있습니다.

배포 ref를 찾을 수 없음#

GitLab은 Git 저장소 성능을 유지하기 위해 오래된 배포 ref를 삭제합니다.

GitLab Self-Managed에서 아카이브된 Git-ref를 복원해야 하는 경우 관리자에게 Rails 콘솔에서 다음 명령을 실행하도록 요청하세요:

Project.find_by_full_path(<your-project-full-path>).deployments.where(archived: true).each(&:create_ref)

GitLab은 성능 문제로 인해 향후 이 지원을 중단할 수 있습니다. 이 기능의 동작에 대해 논의하려면 GitLab 이슈 트래커에서 이슈를 열 수 있습니다.

배포

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

코드 버전을 환경에 배포하면 배포가 생성됩니다. 프로젝트와 연결된 Kubernetes와 같은 배포 서비스가 있는 경우 배포를 지원하는 데 사용할 수 있습니다. 배포가 생성된 후 사용자에게 롤아웃할 수 있습니다. 누군가 수동으로 배포를 시작해야 하는 잡을 만들 수 있습니다.

코드 버전을 환경에 배포하면 배포가 생성됩니다. 환경당 일반적으로 하나의 활성 배포만 있습니다.

GitLab:

  • 각 환경에 대한 배포의 전체 기록을 제공합니다.
  • 배포를 추적하여 서버에 무엇이 배포되어 있는지 항상 알 수 있습니다.

프로젝트와 연결된 Kubernetes와 같은 배포 서비스가 있는 경우 배포를 지원하는 데 사용할 수 있습니다.

배포가 생성된 후 사용자에게 롤아웃할 수 있습니다.

수동 배포 구성#

누군가 수동으로 배포를 시작해야 하는 잡을 만들 수 있습니다. 예를 들어:

deploy_prod:
  stage: deploy
  script:
    - echo "Deploy to production server"
  environment:
    name: production
    url: https://example.com
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual

when: manual 액션:

  • GitLab UI에서 잡에 대한 Run([play]) 버튼을 노출하며 Can be manually deployed to <environment> 텍스트가 표시됩니다.
  • deploy_prod 잡을 수동으로 트리거해야 함을 의미합니다.

파이프라인, 환경, 배포 및 잡 보기에서 Run([play])을 찾을 수 있습니다.

배포당 새로 포함된 머지 리퀘스트 추적#

GitLab은 배포당 새로 포함된 머지 리퀘스트를 추적할 수 있습니다. 배포가 성공하면 시스템이 최신 배포와 이전 배포 간의 커밋 차이를 계산합니다. Deployment API로 추적 정보를 가져오거나 머지 리퀘스트 페이지의 머지 후 파이프라인에서 볼 수 있습니다.

추적을 활성화하려면 환경을 다음 중 하나로 구성합니다:

  • 환경 이름/를 포함하는 폴더를 사용하지 않습니다(장기 실행 또는 최상위 환경).

  • 환경 계층production 또는 staging입니다.

    .gitlab-ci.yml에서 environment 키워드를 사용한 구성 예시:

    # 추적 가능
    environment: production
    environment: production/aws
    environment: development
    
    # 추적 불가능
    environment: review/$CI_COMMIT_REF_SLUG
    environment: testing/aws
    

구성 변경 사항은 새 배포에만 적용됩니다. 기존 배포 레코드에서는 머지 리퀘스트가 연결되거나 연결 해제되지 않습니다.

로컬에서 배포 체크아웃#

각 배포에 대해 Git 저장소에 참조가 저장되므로 현재 환경의 상태 파악은 git fetch만으로 가능합니다.

Git 구성에서 추가 fetch 줄로 [remote "<your-remote>"] 블록에 추가합니다:

fetch = +refs/environments/*:refs/remotes/origin/environments/*

오래된 배포 아카이브#

프로젝트에서 새 배포가 발생하면 GitLab이 배포에 특수 Git-ref를 생성합니다. 이러한 Git-ref는 원격 GitLab 저장소에서 채워지므로 프로젝트의 배포 수가 증가함에 따라 git-fetchgit-pull과 같은 일부 Git 작업이 느려질 수 있습니다.

Git 작업의 효율성을 유지하기 위해 GitLab은 최근 배포 ref(최대 50,000개)만 유지하고 나머지 오래된 배포 ref는 삭제합니다. 아카이브된 배포는 감사 목적으로 UI 또는 API를 통해 여전히 사용할 수 있습니다. 또한 아카이브 후에도 커밋 SHA를 지정하여(예: git checkout <deployment-sha>) 저장소에서 배포된 커밋을 가져올 수 있습니다.

Note

GitLab은 모든 커밋을 keep-around ref로 보존하여 배포 ref에서 참조하지 않는 경우에도 배포된 커밋이 가비지 컬렉션되지 않도록 합니다.

배포 롤백#

특정 커밋에서 배포를 롤백하면 새 배포가 생성됩니다. 이 배포에는 고유한 잡 ID가 있습니다. 롤백할 커밋을 가리킵니다.

롤백이 성공하려면 잡의 script에 배포 프로세스가 정의되어 있어야 합니다.

배포 잡만 실행됩니다. 이전 잡이 배포 시 재생성해야 하는 아티팩트를 생성하는 경우 파이프라인 페이지에서 필요한 잡을 수동으로 실행해야 합니다. 예를 들어 Terraform을 사용하고 planapply 명령이 여러 잡으로 분리되어 있는 경우 배포하거나 롤백하려면 잡을 수동으로 실행해야 합니다.

배포 재시도 또는 롤백#

배포에 문제가 있는 경우 재시도하거나 롤백할 수 있습니다.

배포를 재시도하거나 롤백하려면:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Operate > Environments를 선택합니다.
  3. 환경을 선택합니다.
  4. 배포 이름의 오른쪽에서:
    • 배포를 재시도하려면 Re-deploy to environment를 선택합니다.
    • 배포를 롤백하려면 이전에 성공한 배포 옆의 Rollback environment를 선택합니다.
Note

프로젝트에서 오래된 배포 잡을 방지했다면 롤백 버튼이 숨겨지거나 비활성화될 수 있습니다. 이 경우 롤백 배포를 위한 잡 재시도를 참조하세요.

관련 항목#

문제 해결#

배포 작업 중에 다음 문제가 발생할 수 있습니다.

배포 ref를 찾을 수 없음#

GitLab은 Git 저장소 성능을 유지하기 위해 오래된 배포 ref를 삭제합니다.

GitLab Self-Managed에서 아카이브된 Git-ref를 복원해야 하는 경우 관리자에게 Rails 콘솔에서 다음 명령을 실행하도록 요청하세요:

Project.find_by_full_path(<your-project-full-path>).deployments.where(archived: true).each(&:create_ref)

GitLab은 성능 문제로 인해 향후 이 지원을 중단할 수 있습니다. 이 기능의 동작에 대해 논의하려면 GitLab 이슈 트래커에서 이슈를 열 수 있습니다.