Jenkins を Kubernetes (GKE) に移行し、Jenkins Kubernetes プラグインを使用してポッドでジョブを実行することを検討しています。ただし、ビルド インフラストラクチャはビルド速度の最適化のために ccache を使用し、jenkins エージェントに ccache ファイルを保持します (すべてのビルドは、各エージェントのローカル ccache フォルダーに対して読み取りと書き込みを行います)。
私の理解では、k8s の Jenkins エージェント ポッドは一時的なものです。つまり、それらは 1 回しか使用できません。ccache がどのように機能するかを理解するのに苦労しています。これが私が考えていることです:
- ポッド テンプレートでホストパス ボリュームを使用して、エージェント ポッドがノードにパスをマウントするようにします。GKE のドキュメントに基づくと、ホストパスは ReadWriteMany を許可していないため、これは機能しないのではないかと心配しています。つまり、複数のポッドが ccache マウントに同時に書き込むことができないということです。
- NFS ベースのボリュームを使用してください。速度が遅くなり、ロックの問題が発生するため、うまく機能しないという事実を知っています。
- Pod を再利用するには、「podRetention」および「idleMinutes」オプションを使用して Pod テンプレートを構成します。これは実行可能だと思いますが、IMO これは Kubernetes を使用する目的に反します。
- StateFull Jenkins エージェントを使用する - これも実行可能だと思いますが、Kubernetes を使用する目的に反します。
関連する可能性のあるhttps://issues.jenkins.io/browse/JENKINS-42422を見つけましたが、解決策はないと思います。
これを実装する方法に関する他のアイデアはありますか? ccache を使用できないことは、静的エージェントと比較してビルドのターンアラウンド タイムが大幅に悪化するため、私たちにとって大きな問題です。