6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【和訳】heroku.yml - Build Manifest (Developer Preview)

Last updated at Posted at 2018-04-26

Container RegistryでもReview Apps使いたいなーと思っていたら、heroku.yml使えばいけそうと気付いたので翻訳する
https://devcenter.heroku.com/articles/heroku-yml-build-manifest

heroku.yml - 新しいビルド方式(開発者レビュー中)

heroku.ymlはアプリケーションのビルドを定義するための新しい方式です。現在(4/26時点)は開発者プレビュー中で、今後のロードマップのためにも皆さんの手助けがあるとうれしいです。ぜひフィードバックを送ってください。

heroku.ymlを使うと、

  • ひとつの方式でアプリケーションビルドの定義ができる
  • aptからのパッケージ追加が容易にできる
  • コンパイル(ビルド)前後に実行したいコマンドを定義できる
  • DockerベースのアプリケーションでもReview Appsが使える
  • Herokuに自分でビルドしたDockerイメージをデプロイできる

heroku.ymlは、Ruby、Java、そしてDockerベースのアプリケーションをサポートしています。

Getting started - 既存のアプリケーション

まず、自分のアプリケーションのルートディレクトリにheroku.ymlファイルを作成します。サンプルとしてRubyアプリケーションの例です。

build:
  languages:
    - ruby
  packages:
    - imagemagick
  config:
    RAILS_ENV: development
release:
  command:
    - rake db:migrate
run:
  web: bundle exec puma -C config/puma.rb

git commitします。

$ git add heroku.yml
$ git commit -m "Add heroku.yml"

Herokuアプリケーションのstack設定をcontainerに変更します。

$ heroku stack:set container

そして、Herokuアプリケーションにgit pushしてください。

$ git push heroku master

アプリケーションは新しいビルドサービスで構築され、Procfileではなくheroku.ymlファイルのrunコマンドを実行します。

Getting started - 新しいアプリケーション

サンプル用のリポジトリをgit cloneします。

$ git clone https://github.com/heroku/ruby-getting-started.git
$ cd ruby-getting-started

プロジェクトのルートディレクトリにheroku.ymlファイルを作成します。

build:
  languages:
    - ruby
run:
  web: bundle exec puma -C config/puma.rb

Procfileを削除(任意)して、heroku.ymlファイルをgit commitします。

$ rm Procfile
$ git rm Procfile
$ git add heroku.yml
$ git commit -m "Added heroku.yml and removed Procfile"

次に、stack設定をcontainerにして新しいアプリケーションを作成します。

$ heroku create your-app-name --stack=container

データベース(無料)を追加します。

$ heroku addons:create heroku-postgresql:hobby-dev

プロジェクトをgit pushします。

$ git push heroku master

アプリケーションは新しいビルドサービスで構築され、Procfileではなくheroku.ymlファイルのrunコマンドを実行します。

最後に、アプリケーションにアクセスします。

$ heroku open

ビルドの定義

言語設定について

heroku.ymlはRubyとJavaアプリケーションの構築をサポートしており、別言語のサポートも予定しています。

build:
  languages:
    - ruby
build:
  languages:
    - java

コンパイル(ビルド)前後のコマンド実行について

heroku.ymlprepostでは、languagesで設定した言語のコンパイル(ビルド)の前後で実行されます。(Dockerfileビルドでは、prepostは無視されます)shellコマンド数に制限はなく、すべて実行します。

build:
  languages:
    - ruby
  pre:
    - curl https://sh.rustup.rs -sSf | sh -s -- -y
  post:
    - fortune | tee -a banner.txt

aptからのパッケージインストールについて

heroku.ymlpackagesでは、aptからインストールするパッケージを定義します。

build:
  packages:
    - imagemagick

ビルド時の環境変数について

heroku.ymlconfigでは、ビルド中に使う環境変数を設定できます。

build:
  config:
    RAILS_ENV: development
    FOO: bar

ここで設定した環境変数は、アプリケーション実行中の環境変数にはなりません。

Dockerイメージのビルド

Dockerイメージでアプリケーションを実行できるようにする場合は、heroku.ymlDockerfileを設定することができます。heroku.ymlDockerfileの相対パスを指定してください。

build:
  docker:
    web: Dockerfile
    worker: worker/Dockerfile

Dockerfileを設定すると、新しいビルドサービスでdocker buildしてデプロイします。アプリケーションの実行にはCMDで指定したコマンドを実行します。

リリースフェーズ

リリースフェーズでは、新しいリリースが本番環境にデプロイされる前にコマンドを実行できます。(例えば、CSS/JS/assetsをCDNに送信、キャッシュストア、データベースのマイグレーション)

リリースフェーズコマンドの定義は、heroku.ymlreleaseにコマンドを指定します。

build:
  ...
release:
  command:
    - rake db:migrate
run:
  web: bundle exec puma -C config/puma.rb

Dockerfileでビルド定義している場合は、コマンド実行に使うDockerイメージを指定することもできます。

build:
  docker:
    web: Dockerfile
    worker: worker/Dockerfile
release:
  image: worker
  command:
    - ./deployment-tasks.sh

:speaker: リリースフェーズのログを確認したい場合は、Dockerイメージにcurlをインストールしなければいけません。インストールしていない場合は、アプリケーションログにリリースフェーズのログを表示します。もし、heroku/heroku:16イメージを使っているなら、curlはインストール済です。

実行プロセスの定義

runでは、アプリケーションの起動時に実行したいコマンドを設定できます。プロジェクト内にProcfileもあった場合は、Procfileは無視して、runのコマンドを実行します。

build:
  languages:
    - ruby
run:
  web: bundle exec puma -C config/puma.rb

Dockerの場合

Dockerを使う場合、Dockerfileで指定したCMDのコマンドを実行し、heroku.ymlrunコマンドは無視します。Dockerイメージを使った場合の要件詳細については、Container Registry and Runtime documentationを確認してください。

Review Appsとapp.json

heroku.ymlを使っていて、Review Appsを利用する場合はapp.jsonファイルが必要です。将来的にapp.jsonheroku.ymlに統合する予定です。(app.jsonはいらなくなります)

必ず、app.jsonstack設定でcontainerに設定してください。

既知の問題と制限事項

  • Revie Appsはサポートしていますが、pipeline promotionsはサポートしていない
  • RubyとJavaをサポートしている
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?