C++ プロジェクトのビルドを Docker イメージに移動する作業を行っています。イメージは、Jenkins ジョブによってビルドおよびプッシュされます。docker を導入する前は、ccache を多用して、Jenkins でのビルドを高速化していました。特に、変更がほとんどないビルドの場合はそうでした。docker の問題は、ビルドが隔離された環境で実行されるようになったため、ccache の恩恵を受けられなくなったことです。ccache を利用しながら一時的なコンテナ内に構築する方法はありますか?
質問する
6631 次
2 に答える
14
ビルドと組み合わせて ccache を引き続き使用できます。
次のコマンドを使用して、データ ボリュームを作成し、コンパイル/ビルド間でデータを保持できるようにします。
$ docker create -v /mnt/ccache:/ccache --name ccache debian
--volumes-from
次に、コマンド ライン オプションを使用して、上記で作成したデータ コンテナーを「マウント」するコンテナーを作成します。
$ docker run -e CCACHE_DIR=/ccache --volumes-from ccache -it debian
これで、debian コンテナーのシェルになり、必要なアプリをインストールして ccache をテストできます。
root@15306d02505a:/# apt-get update && apt-get install -y gcc ccache
この時点で、キャッシュを確認できます。期待どおりに空になります。
root@15306d02505a:/# ccache -s
cache directory /ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
cache size 0 Kbytes
max cache size 1.0 Gbytes
データ量は持続するため、コンテナが終了した後でもキャッシュは残ります。ボリュームをマウントする (および -e ENV 変数を指定する) 将来のビルドでは、キャッシュが利用されます。
次に、単純なアプリを作成して実行し、キャッシュを再度確認します。
root@15306d02505a:/# cat > foo.c << __EOF__
int main(int argc, char **argv)
{
return 0;
}
__EOF__
root@15306d02505a:/# PATH=/usr/lib/ccache:$PATH gcc -o foo.o -c foo.c
root@15306d02505a:/# ccache -s
cache directory /ccache
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 1
files in cache 2
cache size 8 Kbytes
max cache size 1.0 Gbytes
キャッシュが読み込まれたことがわかります。これにより、さらにビルドするとパフォーマンスが向上します。
データ量は持続するため、コンテナが終了した後でもキャッシュは残ります。ボリュームをマウントする (および -eENV
変数を指定する) 今後のビルドでは、キャッシュが利用されます。
このブログ投稿は、それをうまく説明しています。
于 2016-09-23T03:30:15.847 に答える