コンテナはインターネットからプルするファイルに依存している場合がほとんどです。GitHub でホストされている依存関係、ビルドツールチェーン、クラウドベンダーの CLI ツールなど、さまざまなものが含まれます。Dockerfile の例:
# AWS CLIをインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(arch).zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
./aws/install
信頼性の高い安定したビルドを目指す場合、ファイルはいつでも変更または削除される可能性があるため問題になります。URL でホストされているものが引き続き利用可能である保証も、常に同じファイルを返す保証もまったくありません。
StableBuild は、他のサーバーへのプルスルーキャッシュとして機能するファイルミラーを運営することでこれを解決します。ダウンロードする任意の URL に StableBuild のファイルミラー URL をプレフィックスとして付けます。例:
curl "https://your-prefix.httpcache.stablebuild.com/my-first-tutorial/https://awscli.amazonaws.com/awscli-exe-linux-$(arch).zip" -o "awscliv2.zip"
このファイルが初めてリクエストされると、awscli.amazonaws.com からフェッチして StableBuild に保存します。次回このファイルをリクエストすると、キャッシュから提供されます。ファイルはイミュータブルになり、ホストサーバーでファイルが変更または削除されても、常にまったく同じファイルが返されます。
異なるコンテナが異なるバージョンのファイルを必要とする場合があるため、キャッシュキーを指定します(上記では my-first-tutorial)。各キャッシュキーはそれぞれ独立したキャッシュです。
以上です。インターネットからダウンロードするものはすべて安定した信頼性の高いものになりました。🎉
API キーなどの認証が必要な URL にアクセスする場合、HTTP ヘッダーでキーを渡すことができます。URL がキャッシュにない場合に、元のサーバーに転送されます。例:
curl -H "x-api-key: xxxxxx" https://your-prefix.httpcache.stablebuild.com/cache-key/https://httpbin.org/headers
その後、この URL はキャッシュに入り、URL がキャッシュキーになります。これにより、送信されたヘッダーはそれ以降解釈されなくなります。API キーを変更しても、上記の URL は同じコンテンツを返します。
Basic 認証を使用する場合、URL にユーザー名とパスワードを含めることができます。例えば、https://httpbin.org/basic-auth/admin/secret(実際の URL)という URL があり、ユーザー名 admin、パスワード secret の認証情報がある場合、次のように URL にエンコードできます:
キャッシュからファイルを削除する
キャッシュされたファイルは ダッシュボード > File mirror に一覧表示されます。「Cached files」に移動し、キャッシュキーをクリックして、URL を見つけてください。三点メニューをクリックし、Delete を選択してキャッシュからファイルを削除します。以降のリクエストではファイルが再フェッチされます。
GitHub リポジトリのキャッシュ
GitHub リポジトリへのアクセスが必要な場合、次のようなコードがあるかもしれません:
StableBuild は git コマンドをキャッシュできませんが、代わりにこのコミットの ZIP ファイルを GitHub からダウンロードしてキャッシュできます。例:
ファイルを手動でアップロードする
ローカルファイルをファイルミラーに保存したい場合:
ダッシュボード > File mirror に移動します。
「Cached files」で、キャッシュキーを選択するか、青い「New cache key」ボタンで新しいキャッシュキーを作成します。
「Upload file」をクリックし、ファイルと名前を選択します。
その後、「Cached files」でアップロードしたファイルを見つけ、三点メニューを選択して「Copy URL」をクリックします。その URL を Dockerfile やビルドスクリプトで使用できます。
キャッシュされたファイルはストレージ制限の対象となります(有料プランでは超過料金が発生します)。現在のストレージ使用量は ダッシュボード で確認できます。ファイルがキャッシュからフェッチされなくなったかどうか(削除できるかどうか)を確認するには、ダッシュボード > Billing > Raw usage logs の生トラフィックログを参照してください。
大きな URL は非同期で処理される
StableBuild のファイルミラーに HTTP リクエストを行うと、通常は初回ダウンロード中にファイルをキャッシュします。ただし、場合によっては非同期でファイルを処理します。これは次の場合に発生します:
ファイルが 100MB を超えるが、Content-Length ヘッダーが設定されていない場合。
(これは UI でアップロードされたファイルには適用されず、常に即時処理されます。)
この場合、URL が StableBuild にキャッシュされるまで数分(またはサイズによってはそれ以上)かかる場合があります。この状態では、「Cached files」の URL の横に砂時計アイコンが表示されます:
このファイルは非同期で処理されるため、(別のデータセンターの別のマシンから)2 回目のフェッチが行われます。