JetBrains Space ヘルプ

ステップ間でファイルを共有する

場合によっては、単一ジョブ内でファイルをあるステップから別のステップに渡す必要がある場合があります。例: 別のコンテナーで実行されるテストには、別のコンテナーでのビルド中に生成されたファイルが必要になる場合があります。この目的のために、オートメーションはファイル共有、つまりホストマシンにマウントされた個別の外部ストレージを提供します。キャッシュとは異なり、ファイル共有は永続的なファイルリポジトリを使用しません。共有はジョブの存続期間中のみ存在します。

ファイル共有に直接アクセスする

ホストマシンがコンテナーである場合、デフォルトでは、ファイル共有は $mountDir/share にマウントされます。詳細

ホストマシンがセルフホスト型ワーカーの場合、デフォルトでは、ファイル共有は jetbrains/space/automation/worker/data/{temp-dir}/share にマウントされます。詳細

ファイル共有へのパスを取得するには、JB_SPACE_FILE_SHARE_PATH 環境変数を使用します。

システムコマンドを使用して、ファイル共有ディレクトリを直接操作できます。次の例では、最初のコンテナーがファイル共有に file.txt を作成し、2 番目のコンテナーがファイル共有のコンテンツを表示します。

job("Example") { container(displayName = "Create file", image = "ubuntu") { shellScript { content = "touch ${'$'}JB_SPACE_FILE_SHARE_PATH/file.txt" } } container(displayName = "Show file", image = "ubuntu") { shellScript { content = "ls -la ${'$'}JB_SPACE_FILE_SHARE_PATH" } } }

Kotlin コードでファイル共有にアクセスする

あるいは、ファイル共有にアクセスするより高度なアプローチもあります。ステップで kotlinScript ブロック内の Kotlin コードを実行する場合は、特別なファイル共有 API を使用できます。

// java.io package provides functions for working with files import java.io.* job("Share files") { container(displayName = "Create file", image = "amazoncorretto:17-alpine") { kotlinScript { api -> // create a file in the user's directory val path = "~/file.txt" val content = "Hello World!" val sharedFile = File(path).apply { parentFile.mkdirs() createNewFile() writeText(content) } // copy the file to the file share api.fileShare().put(sharedFile, "file.txt") } } container(displayName = "Show file", image = "amazoncorretto:17-alpine") { kotlinScript { api -> // Get the file from the file share and print file contents. // Because the steps (containers) run sequentially, // file.txt is guaranteed to be available in the file share. api.fileShare().locate("file.txt")?.let { println(it.readText()) } } } }

ファイル共有のサイズ制限

ファイル共有の最大容量はジョブごとに 2 GB に制限されています。例を使用して、この制限がどのように機能するかを見てみましょう。

  • ジョブは、A と B の 2 つのステップ (コンテナーなど) で構成されます。

  • ステップは 1 つずつ順番に実行されます。

  • どの手順でも、ファイル共有に 2 GB を超える領域を割り当てることはできません。

  • ステップ A では 1.5 GB を割り当てます。

  • ステップ B が 1 GB を割り当てるとします (2 GB 制限未満であるため、ステップではこれを行うことが許可されます)。ファイル共有のサイズは現在 2.5 GB です。

  • 手順 B の終了時点でファイル共有サイズがまだ 2.5 GB である場合、ジョブは失敗します。

  • 手順 B でファイル共有のサイズが 2 GB の制限を超えないようにクリーンアップすると、ジョブは正常に終了します。

ファイル共有からファイルを削除するには、直接 (コンテナーコマンドを使用)、または API : fileShare().remove() を使用します。

ファイル共有の月間使用制限

オートメーションは、ステップごとにファイル共有の使用量を 2 回計算します。1 回目は、ファイル共有ボリュームがステップにマウントされたとき、2 回目は、ステップの作業が終了したときです (オートメーションは、ステップによって割り当てられた新しいデータのサイズを計算します)。ファイル共有の使用量の月間制限は、すべてのサブスクリプションプランで 200 GB です。ファイル共有の使用制限に達すると、自動化によって警告が表示されます。

例を使用して、この制限がどのように機能するかを見てみましょう。

  • ジョブは、A、B、C の 3 つのステップ (コンテナーなど) で構成されます。

  • ステップは 1 つずつ順番に実行されます。

  • ステップ A では、ファイル共有に 1 GB を割り当てます。現在、ファイル共有のサイズは 1 GB、ファイル共有の使用量は 1 GB です。

  • 自動化によりステップ B が開始され、ファイル共有がステップコンテナーにマウントされます。ステップ B がファイル共有に対して何も行わない場合でも、これはファイル共有への読み取りアクセスとして扱われます。現在、ファイル共有のサイズは 1 GB、ファイル共有の使用量は 2 GB です。

  • ステップ B では、既存のデータに加えて 0.5 GB を割り当てます。現在、ファイル共有のサイズは 1.5 GB、ファイル共有の使用量は 2.5 GB です。

  • ステップ C はファイル共有を取得しますが、そこに新しいデータは配置されません。現在、ファイル共有のサイズは 1.5 GB、ファイル共有の使用量は 5 GB です。

  • ジョブは、結果として 5 GB のファイル共有使用量で作業を終了します。これは、そのようなジョブを月に 40 回しか実行できないことを意味します。

並行ステップとファイル共有

デフォルトでは、ジョブのステップは順番に実行されます。次のコンテナーは、前のコンテナーが作業を終了した後にのみ開始されます。これにより、ファイル共有での競合が防止されます。しかし、2 つのステップ (A と B) が並行して実行され、同じファイルがファイル共有に置かれた場合はどうなるでしょうか ? この動作は未定です。ファイル共有には A または B のいずれかの結果が含まれます。例を考えてみましょう。

job("Example") { parallel { container(displayName = "Write to file", image = "ubuntu") { shellScript { content = "echo Hello > /mnt/space/share/file.txt" } } container(displayName = "Write to same file", image = "ubuntu") { shellScript { content = "echo World > /mnt/space/share/file.txt" } } } }

両方のコンテナーは並行して実行されます。最初のコンテナーは Hellofile.txt に書き込み、2 番目のコンテナーは World を同じファイルに書き込みます。ジョブが終了すると、file.txt には Hello または World が含まれますが、Hello WorldWorld Hello も含まれません。

ファイル属性とファイル共有

ファイルがファイル共有にコピーされるとき、またはファイル共有からコピーされるときに、ファイル属性は保持されます。

ファイル共有 API

fileShare() 関数は、ファイル共有 API へのアクセスを提供します。

メソッドまたはプロパティ

説明

location: Path

(読み取り専用) ファイル共有へのパス (デフォルトでは /mnt/space/share)。

put(file: File): Path

file をファイル共有にコピーします。relativePath を使用すると、新しいファイル名を設定し、ファイル共有 (/mnt/space/share) 内のその相対パスを指定できます。

ファイルへのフルパスを返します。

put(file: File, relativePath: String): Path

locate(relativePath: String): File?

relativePath によってファイル共有内のファイルを見つけます。

ファイルパスを返します。

remove(relativePath: String): Boolean

relativePath によってファイル共有からファイルを削除します。

ファイルが正常に削除された場合は、true を返します。

関連ページ:

パラメーターとシークレット

パラメーターは、ユーザーによって定義されるか、Automation によって提供される名前と値のペアです。パラメーターの主な目的は、さまざまなデータをジョブに渡すことです。例: これは、Docker イメージ名、URL、コマンドライン引数などです。あるいは、アクセストークンやパスワードである場合もあります。このような機密パラメーターはシークレットと呼ばれます。ジョブでパラメーターを使用する:ジョブのパラメーターを取得するには、その名前を二重波括弧: 内の文字列で指定します。これは、、を除く、DS...

セルフホスト型ワーカー

セルフホスト型ワーカーは、Windows、Linux、macOS 上の独自のマシンで実行できる軽量エージェントです。セルフホスト型ワーカーは Space Automation に接続し、ジョブとプロジェクトのソースコードを取得してジョブを実行し、結果を Space にレポートします。セルフホスト型ワーカーを使用すると、コンテナーでは不可能な CI/CD ワークフローを実行できます。例:Windows 上で完全な .NET フレームワークアプリケーションを構築します。特定のハードウェアを使用する...

ジョブの表示、実行、停止、サブスクライブ

プロジェクトのジョブページでは、ジョブの実行と停止、現在のジョブの実行進行状況と実行結果の表示、およびジョブ通知のサブスクライブを行うことができます。ジョブの実行結果を表示する:プロジェクトに移動します。サイドバーメニューで、ジョブを選択します。必要なリポジトリとブランチが選択されていることを確認してください。このページには、プロジェクト内のすべてのジョブのリストとその実行結果が表示されます。ここでは、たとえば次のような場合にジョブフィルターを適用することもできます。実物のみジョブを残す: 自...