CircleCI 2.1でDjangoプロジェクトのテストとherokuへのデプロイ自動化をやってみた

最近、Djangoで作ったプロジェクトへの機能追加やコードのリファクタリングをしていて、これを機にCircleCIを始めるべく、ver.2.1でherokuへのデプロイを自動化してみた。

ソースのgit管理とBitbucketへのpushは終わっていたので、CircleCIのサイトでリポジトリの連携を済ませる辺りは割愛。

CircleCIのCLIツールを入れた

後々、知りましたがCircleCIにはCLIツールがあった。ローカルで上手く実行できるかを試せたり(入れたCLIのバージョンでは、2.1のconfigファイルで実行するのは非対応)configファイルにバリデーションをかけられた。
pushしなくてもまず書き方があってるかを試せるので結構ありがたい。

configファイルを作成

.circleci/config.yml を作成して、このymlファイルに設定を書いていく。

Djangoのテストを走らせる処理を作成

今回Djangoのプロジェクトなんだけど、サンプルが用意されていたのでこれを元にする。
CircleCI-Public/circleci-demo-python-django - github

CircleCI上でDockerのコンテナを立ち上げて、色々と処理をしていく流れになっていてざっくり書くと、

  1. Docker Hubにあがっているイメージを元にPythonとPostgreSQLの環境を作って
  2. パッケージをインストール
  3. Djangoのテスト

という流れになっている。

あとはここに heroku へのデプロイの処理を追加する。

herokuへのデプロイ処理を追加

CircleCIの2系で使えるようになった orbs と workflows を使っていく。

orb はCircleCIで用意されてたり、誰かが作ってたりする処理入りイメージみたいな感じ。
herokuのものはここに用意されていたのでこれを使えるようにconfigに追加。

version: 2.1
orbs:
  # https://circleci.com/orbs/registry/orb/circleci/heroku
  heroku: circleci/heroku@0.0.4

また、 jobs にデプロイ用のjobを追加する。

jobs:
  build:
  :
  deploy:
      executor: heroku/default
      steps:
        - checkout
        - heroku/install
        - heroku/deploy-via-git:
            only-branch: master

CircleCIのダッシュボードで、JOBS > プロジェクトの「設定(歯車アイコンから移動)」 > Environment variablesからHEROKU_API_KEY、HEROKU_APP_NAMEを設定する。

この記事が分かりやすかった。
CircleCI 2.0からHerokuにRailsアプリを自動デプロイする - Do Something

workflowsでjobの実行順序を制御する

workflows では job の実行を制御できるみたい。以下を追加してみる。

version: 2.1
orbs:
:
workflows:
  version: 2
  heroku_deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build

jobs:
  build:
  :
  deploy:
  :

jobs下の requires がその下で記述しているjobの実行後に実行することになる。

実際使ってるのはもう少し設定を触ってるけど、一応これでテストからデプロイまで出来るハズ。
今回はherokuのorbsを使ったけど、他のものに差し替えて使ったりも出来るだろうからまたやってみる。