19

C++ プロジェクトのビルドを Docker イメージに移動する作業を行っています。イメージは、Jenkins ジョブによってビルドおよびプッシュされます。docker を導入する前は、ccache を多用して、Jenkins でのビルドを高速化していました。特に、変更がほとんどないビルドの場合はそうでした。docker の問題は、ビルドが隔離された環境で実行されるようになったため、ccache の恩恵を受けられなくなったことです。ccache を利用しながら一時的なコンテナ内に構築する方法はありますか?

4

2 に答える 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変数を指定する) 今後のビルドでは、キャッシュが利用されます。

このブログ投稿は、それをうまく説明しています。

Docker での Ccache の使用

于 2016-09-23T03:30:15.847 に答える