ビルドパイプラインでサードパーティのリソースをキャッシュする方法は?


8

ビルドするアーティファクトのソースコードは別として、サードパーティのリソースにアクセスする必要があることがよくあります。これらのサードパーティの各リソースは、ビルドにリスク要因をもたらします。たとえば、

  • 配布リポジトリは一時的に利用できないため、配布パッケージのインストールは一時的に失敗します。

  • 以前と同じように、ディストリビューションリポジトリは永久に利用できなくなります。

  • 一部のNPMフリーソフトウェアパッケージは、作成者が撤回を取り戻したため、存在しなくなりました。

  • サードパーティツールの一部のソースファイルまたはバイナリアドホックパッケージは使用できなくなりました。

このリストは、拡張することができアドリブをし、それが音としてはるかに楽しまれている姿を消すために、いくつかのサードパーティのリソースにつながる様々な理由を勉強しながら、それは最初にすべての私たちのために悲惨な結果をもたらす:ビルドパイプラインが壊れています。

Dockerイメージをビルドするときに、次の2つのケースをカバーする最良の方法は何ですか。

  1. curlまたはwgetでダウンロードされたキャッシュファイル。
  2. Debianパッケージのキャッシュ。

ここで考えられるいくつかのもっともらしい戦略があります。たとえば、プロキシを使用して、すべてのリクエストをこのプロキシ経由でルーティングするようにビルドシステムを構成します。2番目の安価な可能性は、curl呼び出しをラップして結果をローカルキャッシュに格納することです。

(この質問では、2番目に重要な問題として、ビルドパイプラインのいくつかのユニット間でキャッシュを共有することを検討します。)

回答:


6

私は特にDockerにあまり詳しくありませんが、外部の依存関係(DLLまたはjar)を保存する必要がある通常の.NETアプリケーションまたはJavaアプリを構築するときに発生する問題によく似ています。

これを解決するために、私はアーティファクトリーがかなり好きです。最も人気のある2つはsonatypeのNexusとJFrogのArtifactoryです。どちらも無料のオープンソースバージョンを提供しており、カスタマイズしたパッケージを保存したり、そのままのデポとして使用したりする方法がいくつかあります。他にも選択肢はありますが、すでにこれらの2つをリストしました。私はそれらをすでに使用していて、必要なことを実行することを知っているからです。おまけとして、それらを使用してDockerイメージを直接管理することもできます。

他にも言及する価値のあるものが他にもあります。それらの比較表を見つけると、それらの機能のより良いビューが得られます。(リンクを提供してくれたKarl Harnagyに感謝)

これらのオプションの一部では、YMMVの有料版が必要になる場合があります。

一部の継続的インテグレーションシステムは、アーティファクトの概念もサポートします(経験Jenkinsとteam-cityはこれを行いますが、他のものも同様です)。これにより、同様の結果を直接達成できます。

これらのどれもあなたのためにそれをしないなら、あなたは他の技術を調べるか、あなた自身のものを転がすことができます。私は個人的には、すでに持っているものを何でも活用したいと思っています。これにより、長期的に必要なメンテナンスが削減され、他の場所で新しい課題を探す際に費用を簡単に削減できます。

お役に立てれば


1
JFrog Artifactoryの+1。規制の厳しい環境で作業する場合、5年後も100%再現可能なビルドを実現するために、ビルドで外部リソースに依存しないようにする必要があります。そのため、すべてをArtifactoryにキャッシュします-Dockerベースイメージ、npmおよびnugetパッケージ、サードパーティインストーラーなど
yossiz74

また、一般に、キャッシュされたアーティファクトは、maven、nuget、npmなどを介してシステムの開発者が直接利用できるようになります。カスタムキャッシングソリューションでは、完了するのに少し手間がかかります。
ニュートピア

1
ProGetをチェックして、Universal Packageのすべてのマネージャーの内訳ここで確認できます
Karl Harnagy

おかげで、最後にチェックしたところ、ProGetは.NETユニバースにかなり制限されていました(少し前のことです)。よろしくお願いします!
ニュートピア

1

探しているのは、キャッシュではなくミラーリングです。要件は永続的に利用できないパッケージに対処する必要があるため、キャッシュよりも永続的なものにパッケージを永続化する必要があります。以前は、パッケージをS3のような永続的なクラウドベースのストアに格納していました。ただし、ビルドサーバーでカスタムファイルストアを設定することを妨げるものは何もありません。

より具体的には、ファイルストア(S3)でリソースを探し、見つかった場合はパッケージを返すプロキシサービスを設定するのがおそらく最も簡単です。それ以外の場合は、上流からリソースを要求し、ファイルストアに入力して、パッケージを返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.