CircleCIでRustプロジェクトをビルドするスニペット

先月開発合宿をやったときにRustでちょっと書いたのですが、CircleCIでビルドするときにちょっとハマったので備忘録的なエントリです。

やりたいこと

  • Rustでcargoを利用したリポジトリを、CircleCIでビルドする
  • ビルドして生成されたバイナリをDockerイメージに入れ込み、DockerHubをプッシュする(ここは本題とは逸れるのでオマケですね)

作成したcircle.ymlはこちら。

machine:
  services:
    - docker

dependencies:
  pre:
    - curl -sf -L https://static.rust-lang.org/rustup.sh | sh /dev/stdin --channel=nightly --yes
  override:
    - eval `ssh-agent` && ssh-add ~/.ssh/id_circleci_github && cargo build

test:
  override:
    - eval `ssh-agent` && ssh-add ~/.ssh/id_circleci_github && cargo test

deployment:
  hub:
    branch: master
    commands:
      - eval `ssh-agent` && ssh-add ~/.ssh/id_circleci_github && cargo build --release
      - docker build -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest .
      - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
      - docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest

ポイントはcargoコマンドの前に、evalssh-agent&& ssh-add ~/.ssh/id_circleci_github を入れているところです。

これナシでCircleCIでビルドすると以下のようなエラーで落ちました。

cargo build
    Updating registry `https://github.com/rust-lang/crates.io-index`
error: Unable to update registry https://github.com/rust-lang/crates.io-index

To learn more, run the command again with --verbose.

cargo build returned exit code 101

Action failed: cargo build

どうやらcargoがライブラリのインデックスをGitHub上に置いてあるようで、それでrust-langからインデックスを取れないことが原因で起こるエラーのようです。

(´・∀・`)ヘー