スキップしてメイン コンテンツに移動

自作ライブラリ使用時のCratesでのエラー on Jenkins

仕事でRustを使うにあたり、crates.ioには公開しない方法で自作のライブラリを使用しようとしている。

少し整理してみると次のような環境。

* 自社内のGitリポジトリを使用
* コンパイル対象もその依存先のライブラリもそれぞれ自社Gitリポジトリにてホストされている
* ビルド環境はJenkins CI上で稼働させているコンテナ

できていなかったことは、Jenkins内でコンテナを作ろうとしていて、そのためにコンパイル対象のRustのプロジェクトの他に、依存しているプライベートのライブラリを取得するというところ。
次のようなエラーが出ている状況だった。

  Compiling xxxxx_lib v0.1.0 (/home/ubuntu/workspace/xxxx_tool/xxxx_loader)
   Checking cfg-if v0.1.10
   Checking bitreader v0.3.2
   Checking byteorder v1.3.4
   Checking num_enum v0.5.0
error[E0463]: can't find crate for `log`
--> src/main.rs:3:1
 |
3 | extern crate log;
 | ^^^^^^^^^^^^^^^^^ can't find crate
error: aborting due to previous error
For more information about this error, try `rustc --explain E0463`.


そのときのmain.rsはこんな感じ。

#![cfg_attr(feature = "strict", deny(warnings))]

extern crate log;


Cargo.tomlでの対象のライブラリへの依存指定はこんな感じ。

xxxxx_lib = { git = "https://xxxxx/xxxxx/xxxx.git" }


解決方法としては、JenkinsのCredentials managerから鍵を取ってきてコンパイル対象のプロジェクトをコンパイルする前にgitコマンドでcloneしてくる、ということにより解決した。
上記のメッセージはそういう意味で、不親切で問題解決には少し時間を要した。
また、このgitでの取得について、dirでコマンドの実行ディレクトリを指定した状態で実施したところ、上記と同様に当該ライブラリを参照できなくて困った。
プライベートライブラリの取得について、ホームディレクトリにgitでclone等してあれば参照できるような振る舞いをcargoが持っているようだけど、まだその振る舞いを完全には特定できていない。

振る舞いの理解のために次のリンクは確認した。

また、logの箇所でエラーが出ていたのでライブラリの使用の仕方が悪いのかと思って次のリンクも確認していたけど、それは完全に見当違いだった。

log - crates.io: Rust Package Registry https://crates.io/crates/log