CircleCI¶
このセクションでは、継続的インテグレーションサービスとしてCircleCIを使用します。簡単に言うと、CircleCIはソフトウェアのビルド、テスト、デプロイを自動化します。さまざまなプログラミング言語をサポートしており、今回のケースではCrystal言語をサポートしています。
このセクションでは、CircleCIがどのように継続的インテグレーションの概念を実装しているかを確認するための設定例をいくつか紹介します。
CircleCI orbs¶
例を示す前に、CircleCI orbsについて触れておく価値があります。公式ドキュメントでは、次のように定義されています。
Orbsは、再利用可能なコマンド、エグゼキュータ、ジョブを定義することで、一般的に使用される設定部分を1行のコードに凝縮することができます。
今回のケースでは、CrystalのOrbを使用します。
ビルドとスペックの実行¶
`latest`を使った簡単な例¶
簡単な例から始めましょう。**最新の** Crystalリリースを使用してテストを実行します。
workflows:
version: 2
build:
jobs:
- crystal/test
orbs:
crystal: manastech/crystal@1.0
version: 2.1
できました!簡単でしたね!Orbsは抽象化レイヤーを構築することで、設定ファイルを読みやすく直感的にしています。
ジョブcrystal/testが何をしているのか疑問に思った場合は、いつでもソースコードを確認できます。
`nightly`の使用¶
ナイトリー版のCrystalリリースを使用するのは、以下のとおり簡単です。
workflows:
version: 2
build:
jobs:
- crystal/test:
name: test-on-nightly
executor:
name: crystal/default
tag: nightly
orbs:
crystal: manastech/crystal@1.0
version: 2.1
特定のCrystalリリースの使用¶
workflows:
version: 2
build:
jobs:
- crystal/test:
name: test-on-0.30
executor:
name: crystal/default
tag: 0.30.0
orbs:
crystal: manastech/crystal@1.0
version: 2.1
Shardsパッケージのインストール¶
`crystal/test`ジョブは内部で`crystal/shard-install` orbコマンドを実行するため、心配する必要はありません。
バイナリ依存関係のインストール¶
アプリケーションや一部のShardでは、ライブラリやパッケージが必要になる場合があります。これらのバイナリ依存関係は、Aptコマンドを使用してインストールできます。
`libsqlite3`開発パッケージをインストールする例を以下に示します。
workflows:
version: 2
build:
jobs:
- crystal/test:
pre-steps:
- run: apt-get update && apt-get install -y libsqlite3-dev
orbs:
crystal: manastech/crystal@1.0
version: 2.1
サービスの利用¶
次に、外部サービス(例:MySQL)を使用してスペックを実行してみましょう。
executors:
crystal_mysql:
docker:
- image: 'crystallang/crystal:latest'
environment:
DATABASE_URL: 'mysql://root@localhost/db'
- image: 'mysql:5.7'
environment:
MYSQL_DATABASE: db
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
workflows:
version: 2
build:
jobs:
- crystal/test:
executor: crystal_mysql
pre-steps:
- run:
name: Waiting for service to start (check dockerize)
command: sleep 1m
- checkout
- run:
name: Install MySQL CLI; Import dummy data
command: |
apt-get update && apt-get install -y mysql-client
mysql -h 127.0.0.1 -u root --password="" db < test-data/setup.sql
orbs:
crystal: manastech/crystal@1.0
version: 2.1
注意
`pre-steps`で明示的に`checkout`を行うのは、`test-data/setup.sql`ファイルを使用できるようにするためです。
キャッシング¶
ジョブ`crystal/test`を使用する場合、内部でコマンドwith-shards-cacheが使用されるため、キャッシングはデフォルトで有効になっています。