先月開発合宿をやったときに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コマンドの前に、eval
ssh-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からインデックスを取れないことが原因で起こるエラーのようです。
(´・∀・`)ヘー