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