Dpl을 배포 도구로 사용하기

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

Dpl (D-P-L로 발음됨)은 Travis CI에서 개발하고 사용되는 연속 배포를 위한 배포 도구이며, GitLab CI/CD와 함께 사용할 수도 있습니다.

Dpl은 지원되는 제공업체 중 하나에 배포하는 데 사용할 수 있습니다.

전제 조건

Dpl을 사용하려면 최소한 Ruby 1.9.3이 설치되어 있어야 하며, gems를 설치할 수 있어야 합니다.

기본 사용법

Dpl은 다음과 같이 설치할 수 있습니다:

gem install dpl

이렇게 하면 CI 서버에서 테스트하지 않고도 로컬 터미널에서 모든 명령을 테스트할 수 있습니다.

Ruby가 설치되어 있지 않은 경우에는 Debian 호환 리눅스에서 다음과 같이 설치할 수 있습니다:

apt-get update
apt-get install ruby-dev

Dpl은 Heroku, Cloud Foundry, AWS/S3 등과 같은 많은 서비스에 대한 지원을 제공합니다. 이를 사용하려면 제공업체와 제공업체에서 요구하는 추가 매개변수를 정의해야 합니다.

예를 들어, 애플리케이션을 Heroku에 배포하려면 제공업체로서 heroku를 지정하고 api_keyapp을 지정해야 합니다. 모든 가능한 매개변수는 Heroku API 섹션에서 확인할 수 있습니다.

staging:
  stage: deploy
  script:
    - gem install dpl
    - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY
  environment: staging

위의 예에서는 Dpl을 사용하여 my-app-staging을 Heroku 서버에 배포하고 HEROKU_STAGING_API_KEY의 보안 변수에 저장된 API 키를 사용합니다.

다른 제공업체를 사용하려면 긴 목록의 지원되는 제공업체를 확인하십시오.

Docker와 함께 Dpl 사용하기

대부분의 경우, GitLab Runner를 구성하여 서버의 셸 명령을 사용합니다.
이는 모든 명령이 로컬 사용자(예: gitlab_runner 또는 gitlab_ci_multi_runner)의 컨텍스트에서 실행됨을 의미합니다.
즉, Docker 컨테이너에 Ruby 런타임이 설치되어 있지 않을 가능성이 높습니다.
설치해야 합니다:

staging:
  stage: deploy
  script:
    - apt-get update -yq
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
  environment: staging

첫 번째 줄 apt-get update -yq는 사용 가능한 패키지 목록을 업데이트하며, 두 번째 줄 apt-get install -y ruby-dev는 시스템에 Ruby 런타임을 설치합니다.
위의 예는 모든 Debian 호환 시스템에 대해 유효합니다.

스테이징 및 프로덕션에서의 사용

개발 워크플로우에서 스테이징(개발)과 프로덕션 환경이 있는 것이 일반적입니다.

다음 예를 고려해 보겠습니다: 우리는 main 브랜치를 staging에 배포하고 모든 태그를 production 환경에 배포하고자 합니다.
해당 설정을 위한 최종 .gitlab-ci.yml은 다음과 같이 보일 것입니다:

staging:
  stage: deploy
  script:
    - gem install dpl
    - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
  environment: staging

production:
  stage: deploy
  script:
    - gem install dpl
    - dpl heroku api --app=my-app-production --api_key=$HEROKU_PRODUCTION_API_KEY
  rules:
    - if: $CI_COMMIT_TAG
  environment: production

서로 다른 이벤트에서 실행되는 두 개의 배포 작업을 생성했습니다:

  • staging: main 브랜치에 푸시된 모든 커밋에 대해 실행됨
  • production: 푸시된 모든 태그에 대해 실행됨

또한 두 개의 보안 변수를 사용합니다:

  • HEROKU_STAGING_API_KEY: 스테이징 앱을 배포하는 데 사용되는 Heroku API 키
  • HEROKU_PRODUCTION_API_KEY: 프로덕션 앱을 배포하는 데 사용되는 Heroku API 키

API 키 저장

API 키를 안전한 변수로 저장하려면:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. Settings > CI/CD를 선택합니다.
  3. Variables를 확장합니다.

프로젝트 설정에서 정의된 변수는 빌드 스크립트와 함께 러너로 전송됩니다.
안전한 변수는 리포지토리 외부에 저장됩니다. 절대 프로젝트의 .gitlab-ci.yml 파일에 비밀을 저장하지 마세요.
또한 비밀 값이 작업 로그에 숨겨져 있는 것이 중요합니다.

추가된 변수에 접근하려면 이름 앞에 $ (비 윈도우 러너의 경우) 또는 % (윈도우 배치 러너의 경우)를 붙여 사용합니다:

  • $VARIABLE: 비 윈도우 러너용
  • %VARIABLE%: 윈도우 배치 러너용

CI/CD 변수에 대해 더 알아보세요.