[Heroku] Bitbucket から CircleCI を使って自動デプロイする
( ノ゚Д゚)こんにちわ。これはCircleCI Advent Calendar 2020 23日目、かしゆかの誕生日を CircleCIで祝おうのコーナーです(n‘∀‘)η ヤァーッホォー
はい、めでたい。
さて今年は、ゆかちゃんとはまったく縁もゆかりもなさそうなHerokuとCircleCIの共演です。
Bitbucket からの自動デプロイができない
HerokuはGithubと連携をして、特定のブランチがコミットされたら、自動的にHerokuへデプロイすることができます。また、PR(Pull Request)と連携するレビューアプリ機能もあります。Githubさえ使えれば、Herokuの多くの機能と連携して利用できるようになります。
しかし、これらの特徴的機能は残念ながらGithub
「だけ」です。そのほかのVCSでは、連携する機能を持っていません。残念。
Privateがたくさん持てた、わがはいの Bitbucket
はどうしたら...。
CircleCI を間に挟んでみよう
そこで、CircleCI
です。特定のイメージをうまく使えば、好きにコマンドを利用して何でもできる、あのCircleCI
を使えばどうにかなるのではないか...。先人たちは考えました。
まぁ考えることはみんな同じです。CircleCI の Orbs にも circleci/[email protected] が公開されているじゃありませんか。そうです、これをうまく使えさえすれば、Bitbucket
から、CircleCI
でテストしたソースコードをHeroku
へデプロイが可能です。さぁ、やってみましょう(๑•̀ㅂ•́)و✧
流れとしては、こう。あ、すでに Bitbucket と CircleCIは連携済で、プロジェクトが登録されている前提で話を進めます。
- Heroku の設定を取得する
- CircleCI へ環境変数を定義する
- .circleci/config.yml を追加して
main
へ commit&push
Heroku の設定をもぎ取ってこよう
今回、Bitbucket
上のsampleコードを準備しました。このmain
ブランチへコミットしたタイミングで、自動的にHeroku
へデプロイされる仕組みを準備します。
まず、CircleCIが連携するためのHeroku
側の設定が必要です。
- デプロイ先の Heroku アプリケーション名
- Heroku へログインしているユーザの API Key
取得方法です。1. については、言わずもがなと思いますが、heroku create -a <app_name>
で指定した <app_name>
や、自動で割り当てられた Heroku アプリケーションの名前そのものです。
Heroku ダッシュボードからは、該当のアプリケーションのSettings
タブの "App Information" にある 'App Name' がズバリそのものになります。
もう一つの API Key は、コマンドを打ってサクッとゲットしましょう。1年間有効なAPI Keyが発行されます。ユーザがパスワードを変更したりすると、このAPI Keyが変わってしまうようなので「あれ、うまくいかない...」みたいになったら、API Keyを再設定した方が良いかもしれません。
heroku auth:token
› Warning: token will expire 12/10/2021
› Use heroku authorizations:create to generate a long-term token
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
CircleCI の環境変数を定義する
ここで取得したHerokuの情報を、CircleCIの環境変数へ入力します。
該当するプロジェクトの Project Settings
内にある "Environment Valiables" へ設定します。設定する環境変数名は次の二つ。
環境変数名 | 定義する内容 |
---|---|
HEROKU_APP_NAME | Herokuアプリケーション名 |
HEROKU_API_KEY | Heroku API Key |
設定してみると、こんな感じになってることでしょう。
.circleci/config.yml を追加して main
へ commit&push
はい、あとは config.yml
を生成してぶち込んだら終了です。簡単ですね!
version: 2.1
orbs:
node: circleci/[email protected]
heroku: circleci/[email protected]
jobs:
test:
executor:
name: node/default
tag: "14.13.1"
steps:
- checkout
- node/install-packages
- run:
command: npm run test
workflows:
version: 2
test-and-deploy:
jobs:
- test
- heroku/deploy-via-git:
requires:
- test
filters:
branches:
only: main
シンプル。Orbs
を利用すると最小限になって便利ですね。
Heroku
へのデプロイしているところのコード部分だけ拾ってみると、次の部分です。
- heroku/deploy-via-git:
requires:
- test
filters:
branches:
only: main
heroku/deploy-via-git
が Orbs
で定義されている名前ですね。その中のいくつかの定義を指定しています。test
ジョブが完了して main
ブランチがコミットされたときだけに設定してます。ブランチをうまく定義することによって、開発環境とテスト環境、本番環境へのデプロイを分けることも可能ですね。便利。
ちなみに具体的にどのようなコマンドを実行しているかは、Orbs
を見ていただけると分かります。ちなみに、heroku
へデプロイしているところのコードは次の通りです。<<parameters.*>>
のところは環境変数の内容ですね。
https://heroku:$<< parameters.api-key >>@git.heroku.com/<<parameters.app-name >>.git
こんな感じでした、やっほい。
Author And Source
この問題について([Heroku] Bitbucket から CircleCI を使って自動デプロイする), 我々は、より多くの情報をここで見つけました https://qiita.com/sho7650/items/b2e0a5d2f187dc0467ec著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .