RailsアプリのCIをCircleCI 1.0から2.0へ移行

8月末の1.0シャットダウンを前にようやっと2.0へ移行。

基本は公式のMigrating from 1.0 to 2.0を参照するが、ファイル全体の例が俯瞰的に分かりづらいのでDatabase Configuration Examplesなども参考に。

シンタックスエラーやDB周りの環境変数の設定、Gitのバージョンなどで少し躓いたが珍しく大ハマリはせずに1.5時間くらいで移行完了できた。

ローカルでのシンタックスチェック

circleciコマンドでconfig.ymlのシンタックスチェックができるので、最初に準備しておくと捗る。

CircleCI上でシンタックスエラーを見て修正するのもダルいので、特にこうして移行するときや新しくファイルを作るときにはローカルでチェックできるようにするのが正解だろう。
正直3回くらいダルいと思ってやっと正解にたどり着きました。

コマンドは以下を参考にcurlでバイナリを取ってきて設置し、実行パーミッションを立てる。

Using the CircleCI Local CLI

チェックは以下のコマンドで。

circleci config validate -c .circleci/config.yml

他にも色々できるようだが今はとりあえずシンタックスチェックだけでもできればOK。

実際YAMLのインデントのミスとかけっこうあるので注意。

例えば以下のような書き方はエラーになるので

- restore_cache:
  key: rails-bundle-{{ checksum "Gemfile.lock" }}

次のように修正。

- restore_cache:
    key: rails-bundle-{{ checksum "Gemfile.lock" }}

checkoutで「error: unknown switch `B’」というエラー

参考: CircleCI2.0で「error: unknown switch `B’」エラー

CentOS6系のイメージを使っているとGitのバージョンが1.7系なのでエラーとなるとのこと。
以下の行を追加して2.0以上にバージョンアップすることで解消。

- run: yum install http://opensource.wandisco.com/centos/6/git/x86_64/wandisco-git-release-6-1.noarch.rpm -y
- run: yum install git -y

ところでCentOS6系は2020年でセキュリティアップデートも終了なのでよい子はそろそろ他に移行する算段をしておこうな。

参考:How to yum install git 2.x in CentOS 6.x