目的
- GitHubのmain(デフォルトブランチ)へpushしたらCircleCIが検知してHerokuへデプロイしてくれるようにする。
前提条件
- GitHub,Herokuは登録済み
- ローカル環境からGitHubへの
git push
は成功しCircleCIが検知してくれる環境は作成済み - HerokuのAPI_KEYやAPP_NAMEなどの環境変数はCircleCIに登録済み
事象
- GitHubからCircleCIへのcheckoutは成功するがそこからHerokuへのpushが一向に成功しない。
失敗例2(変数展開は成功、別の要因でpushに失敗しているがそれは別記事で)
両者とも失敗しているが違いは以下である。
失敗例1
fatal: Authentication failed for 'https://heroku:@git.heroku.com/.git/'
失敗例2
fatal: Authentication failed for 'https://heroku:************************************@git.heroku.com/*********************.git/'
原因
- CircleCIの
config.yml
、contextの記述を忘れ変数展開に失敗し正しいURLでpush出来ていなかった。
失敗例
workflows:
heroku_deploy:
jobs:
- deploy
jobs:
deploy:
executor: heroku/default
steps:
- checkout
- heroku/install
- run: echo $HEROKU_API_KEY # 変数展開に失敗し空白が出力される
解決策
成功例
workflows:
heroku_deploy:
jobs:
- deploy:
context: {コンテキスト名} # ここでコンテキストに紐づいた環境変数を明示しなければいけない。
jobs:
deploy:
executor: heroku/default
steps:
- checkout
- heroku/install
- run: echo $HEROKU_API_KEY # 変数展開に成功しCircleCI上に設定された環境変数が出力される。
無事展開されpush出来た。(本当はもう少し別のとこでハマっているがそれはまた別の記事にする)
所感
地獄、エラーメッセージにRun heroku login to
とあるので認証が失敗しているのかと思いそっち方面で調査してしまい、異常なハマり方をしてしまった。
後、CircleCI + Heroku連携で「CircleCIでは変数を展開するためにContextを利用する」ということに言及している記事が見当たらずハマってしまった。
昔は別にContextを明示しなくてもそのまま展開できてた気がするのだがいつぞやから明示しないといけなくなった?
そのため当時の記事では特に言及していない?というところまで考えたが真相は謎。