배포
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-fetch 및 git-pull과 같은 일부 Git 작업이 느려질 수 있습니다.
Git 작업의 효율성을 유지하기 위해 GitLab은 최근 배포 ref(최대 50,000개)만 유지하고 나머지 오래된 배포 ref는 삭제합니다.
아카이브된 배포는 감사 목적으로 UI 또는 API를 통해 여전히 사용할 수 있습니다.
또한 아카이브 후에도 커밋 SHA를 지정하여(예: git checkout <deployment-sha>) 저장소에서 배포된 커밋을 가져올 수 있습니다.
GitLab은 모든 커밋을 keep-around ref로 보존하여 배포 ref에서 참조하지 않는 경우에도 배포된 커밋이 가비지 컬렉션되지 않도록 합니다.
배포 롤백#
특정 커밋에서 배포를 롤백하면 새 배포가 생성됩니다. 이 배포에는 고유한 잡 ID가 있습니다. 롤백할 커밋을 가리킵니다.
롤백이 성공하려면 잡의 script에 배포 프로세스가 정의되어 있어야 합니다.
배포 잡만 실행됩니다.
이전 잡이 배포 시 재생성해야 하는 아티팩트를 생성하는 경우 파이프라인 페이지에서 필요한 잡을 수동으로 실행해야 합니다.
예를 들어 Terraform을 사용하고 plan 및 apply 명령이 여러 잡으로 분리되어 있는 경우 배포하거나 롤백하려면 잡을 수동으로 실행해야 합니다.
배포 재시도 또는 롤백#
배포에 문제가 있는 경우 재시도하거나 롤백할 수 있습니다.
배포를 재시도하거나 롤백하려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Operate > Environments를 선택합니다.
- 환경을 선택합니다.
- 배포 이름의 오른쪽에서:
- 배포를 재시도하려면 Re-deploy to environment를 선택합니다.
- 배포를 롤백하려면 이전에 성공한 배포 옆의 Rollback environment를 선택합니다.
프로젝트에서 오래된 배포 잡을 방지했다면 롤백 버튼이 숨겨지거나 비활성화될 수 있습니다. 이 경우 롤백 배포를 위한 잡 재시도를 참조하세요.
관련 항목#
문제 해결#
배포 작업 중에 다음 문제가 발생할 수 있습니다.
배포 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 이슈 트래커에서 이슈를 열 수 있습니다.
