デプロイツールとしてのDplの使用

Dpl(D-P-Lと発音します)はTravis CIで開発・利用されている継続的デプロイのためのデプロイツールですが、GitLab CI/CDでも利用できます。

Dpl はサポートされているプロバイダへのデプロイに使用できます。

前提条件

Dplを使用するには、少なくともRuby 1.9.3とgemsのインストールが必要です。

基本的な使い方

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

上記の例では、HEROKU_STAGING_API_KEY のセキュア変数に格納された API キーで、my-app-staging を Heroku サーバーにデプロイするために Dpl を使用しています。

別のプロバイダを使用するには、サポートされているプロバイダの長いリストを参照してください。

DplをDockerで使う

ほとんどの場合、GitLab Runnerはサーバーのシェルコマンドを使うように設定されています。これは、すべてのコマンドがローカルユーザー(例えばgitlab_runnergitlab_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 は利用可能なパッケージのリストを更新し、2番目の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

異なるイベントで実行される2つのデプロイジョブを作成しました:

  • staging:main ブランチにプッシュされたすべてのコミットに対して実行されます。
  • production:プッシュされたすべてのタグに対して実行

また、2つのセキュリティ変数も使用しています:

  • HEROKU_STAGING_API_KEY:ステージングアプリのデプロイに使用するHeroku APIキー
  • HEROKU_PRODUCTION_API_KEY:本番アプリのデプロイに使用するHeroku APIキー

APIキーの保存

APIキーをセキュリティ変数として保存します:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. Settings > CI/CDを選択します。
  3. 変数]を展開します。

プロジェクト設定で定義された変数は、ビルドスクリプトと一緒にRunnerに送信されます。セキュリティで保護された変数はリポジトリの外に保存されます。プロジェクトの.gitlab-ci.yml ファイルには決してシークレットを保存しないでください。また、シークレットの値がジョブログに隠されていることも重要です。

追加された変数にアクセスするには、変数名の前に$ (Windows 以外の Runner の場合) または% (Windows バッチ Runner の場合) を付けてください:

  • $VARIABLE:Windows以外のランナーの場合
  • %VARIABLE%:Windowsバッチランナー用

CI/CD変数についてもっと読む.