Dpl을 배포 도구로 사용하기

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

Dpl (알파벳 D-P-L처럼 발음)은 지속적인 배포를 위해 개발된 배포 도구로, Travis CI에서 개발 및 사용되었지만 GitLab CI/CD와도 함께 사용할 수 있습니다.

Prerequisite

Dpl을 사용하려면 적어도 Ruby 1.9.3과 gem을 설치할 수 있는 능력이 필요합니다.

기본 사용 방법

Dpl은 다음과 같이 어떤 머신에서도 설치할 수 있습니다.

gem install dpl

이를 통해 CI 서버에서 시험을 하는 대신 로컬 터미널에서 모든 명령어를 시험할 수 있습니다.

Ruby가 설치되어 있지 않은 경우 Debian 호환 Linux에서 다음을 수행하세요.

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

첫째 줄은 사용 가능한 패키지의 목록을 업데이트하고, 둘째 줄은 시스템에 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. 왼쪽 사이드바에서 프로젝트를 선택하고 Settings > CI/CD로 이동합니다.
  2. Variables를 확장합니다.

프로젝트 설정에서 정의된 변수는 빌드 스크립트와 함께 러너로 전송됩니다. 안전한 변수는 저장소 외부에 저장됩니다. 비밀을 프로젝트의 .gitlab-ci.yml 파일에 저장하지 마세요. 또한, 시크릿 값은 작업 로그에서 가려져야 합니다.

추가된 변수는 이름 앞에 $ (Windows가 아닌 러너의 경우) 또는 % (Windows Batch 러너의 경우)를 접두사로 붙여 이용할 수 있습니다.

  • $VARIABLE: Windows가 아닌 러너에 대한 사용
  • %VARIABLE%: Windows Batch 러너에 대한 사용

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