前提
システム開発にCIツールを導入することになったのでどれがいいか検討したので備忘録。
要件によってどれがいいかは変わると思いますが一例として参考になれば。
CIツールは多数ありますが、いったんJenkins / CircleCIで比較しています。
環境
オンプレのlinux6系でビルド/デプロイ/自動テストを動かしたい
メリデメ
Jenkins
メリット
1.自由度が高い
2.任意のタイミングでビルド・デプロイできる
デメリット
1.自前のデプロイサーバが必要
2.運用大変、設定大変で属人的になりやすい
3.複数プロジェクトのビルド(php、Android、iOSなど)をする際、一つのサーバ内でSDKやランタイムを共有してしまい、お互いに干渉して副作用が発生する場合がある
CircleCI
メリット
1.ymlの設定ファイル一つで制御できるので運用が楽
2.クラウドサービスなのでサーバ構築不要
3.ビルド毎にランタイムやSDKを選択できるのでお互いに干渉することがない
デメリット
1.任意のタイミングや定期実行のジョブ管理には向いていない(方法はある)
2.1コンテナ 月 / 1500分利用までは無料だが、追加コンテナ一つにつき月額50$
総括
自前のサーバを用意することなくyml一つで運用できるCircleCIの方が魅力的に感じました。
Jenkinsがビルド毎にランタイムやSDKを選択できないのもかなり厳しいですね。
ただ、個人ではなくチームで開発するなら1500分の制限は厳しいですし、有料コンテナ追加は必須に思えます。
しかし
今回はJenkinsを選択しました。
理由
- 既存のオンプレデプロイサーバを流用できる
- ネイティブアプリ開発がないのでiOSやAndroidなどの複数プロジェクトのビルドがない(phpを自動テストしてデプロイするだけ)
- デプロイ作業が単純
- CircleCIだと追加コストがかかる
とはいえ、今後運用がつらくなったりアプリ開発が追加になるようであれば乗り換えも検討しようと思っています。