知りたいこと
- Herokuのappイメージ(slug)を任意のタイミングで、git pushなしで再コンパイルする方法
- 可能ならHerokuで起動したアプリ内からリビルドをキックしたい
前提
Creating a 'Deploy to Heroku' Button を参考に、app.jsonを用意してボタンクリックからHerokuのappを作成できるようにしました。このとき、app.jsonにbuildpacksを指定して、カスタムのbuildpackを使って起動イメージ(slug)を作成しています。カスタムのbuildpackは、別のリポジトリからソースを取得して**(*1)**、起動イメージに同梱しています。
作成したappは、上記の手順で作られた起動イメージ(slug)で起動します。
発生した問題
*(1) で外部リポジトリから取得しているソースは、外部リポジトリの開発が進めば更新されます。このソースを同梱してslugを作り直したいのですが、HerokuのWeb UIや heroku
コマンドにはそのような方法がありませんでした。
調べたこと
-
Herokuのgitリポジトリに空コミットすればリビルドされるし、それしか方法は無い、という情報を見つけました。しかし、今回はデプロイボタンからAppを起動しているので、Herokuのgitは使っておらず、コミット履歴も空っぽでした。このため、空コミットをする解決方法は使えなそう、と思っています。
-
Building and Releasing Using the Platform API を読むと、API経由でビルドする方法はありそうです。しかしこの手順の場合Herokuのトークンが必要になります。仮にトークンを使えたとして、このAPIにどこまでのパラメータを渡したら良いのか追いかけきれませんでした。試しに渡したパラメータは以下の通りです(token満載のため参考程度に)。実行したところ、buildpacksがnullで認識されたレスポンスが返ってきたため、ビルドは失敗しました。この方法でビルドが成功するための条件を追い切れていません。
bash
1curl -X POST 2 -h "Authorization: Bearer <token>" 3 -h "Accept: application/vnd.heroku+json; version=3" 4 -d '{"buildpacks": [{"url": "heroku/python"}, {"url": "https://github.com/shimizukawa/heroku-buildpack-sphinxbuild.git"}], "source_blob": {"url": "<同URLにGETして取得したsource_blob/url値>"}}' 5 https://api.heroku.com/apps/<appname>/builds
よろしくお願いします。
あなたの回答
tips
プレビュー