ことりのえさば

ひよっこエンジニアがつらつらと書き綴るブログです。記事の内容に責任は負えませんのでご容赦ください。

はじめましてのCircle CI

Qiitaにもほぼ同じ内容の記事を投稿しています。

qiita.com

はじめに

自宅プロダクトでもCIしたくなった。 仕事では(既に構築されているのを)使ったことはありますが、 自分で構築したことはありませんでした。

今回、初めて構築してみましたので、 手順諸々についてメモを残します。

なお、Djangoプロジェクトのテストを前提にしています。

Circle CI & Github連携

Circle CIにGithubアカウントでログインしてリポジトリを選ぶだけなので割愛。

Circle CIの通知がslackに流れるようにする

参考: https://circleci.com/blog/slack-integration/

  1. Slackにサインイン
  2. team settingからApps&Integration
  3. Developer Tools
  4. CircleCI
  5. Webhook urlを取得
  6. CircleCIにサインイン
  7. builds
  8. projectの右にある小さい歯車
  9. Notifications > Chat Notifications
  10. slack にWebhook urlを貼って&Test Hook

これで、slackにHello from Circleciみたいなメッセージが来たら成功。

必要最低限の設定

言語はpythonとします。

OS バージョンの指定

デフォルトではUbuntu 12.04なので、以下の手順で14.04にしておいた方が良いでしょう。 1. builds 2. projectの右にある小さい歯車 3. Build Settings > Build Environment

ここで14.04にしておけば、次のテスト(rebuildは含まない)から反映されるようです。

circle.ymlの作成

circleciの設定ファイルである、circle.ymlをプロジェクトのルートディレクトリに作成します。 詳細は https://circleci.com/docs/configuration/ にありますので、随時参照すると良いと思います。

pythonバージョンの指定

circle.ymlに以下を書き込みます。

machine:
  python:
    version: x.x.x

ライブラリ等の更新

参考: https://circleci.com/docs/installing-custom-software/ pipで入れられないソフトウェアを入れたい場合には以下のように指定します。 pip自身も一応updateしておいた方が無難でしょう。 なお、CircleCIはプロジェクトルートにrequirements.txtを置いておけば、 勝手にpip install -r requirements.txtをしてくれるので、 明示的に指定する必要はありません。

dependencies:
  pre:
    - sudo apt-get update
    - sudo apt-get install -y [package-name]
    - pip install -U pip

最低限のテスト

以下の通り記載すれば、unittestが走ります。

test:
  post:
    - cd [manage.py-directory]; python manage.py test --settings=[settings]

無事に終了すれば、slackに通知が来る&Githubにそれっぽいアイコンが出るはずです。

まとめると

machine:
  python:
    version: x.x.x

dependencies:
  pre:
    - sudo apt-get update
    - sudo apt-get install -y [package-name]
    - pip install -U pip

test:
  post:
    - cd [manage.py-directory]; python manage.py test --settings=[settings]

余談

まあまとめてみるとこれだけの作業なんですが、 中の人は大分時間を取られました。 CircleCIとは関係なく、パッケージのインストールにコケてしまい、 原因追及に時間がかかりまくったのです。

ようやくGithubにSuccessアイコンがついたときの達成感と、 この記事をまとめたときの徒労感はパないっすね。 「あれ、私こんだけしかやってないの?」的な。