JetBrains Space ヘルプ

コンテナー

Space Automation を使用すると、Space Automation Cloud またはセルフホスト型ワーカー内の Docker コンテナーでジョブステップを実行できます。

どのように機能するのか

コンテナーイメージソース

Docker Hub

Docker Hub(英語) のイメージを使用するには、イメージ名を指定します。

job("Use Docker Hub") { container(image = "hello-world") { // ... } }

Space は Docker Hub からダウンロードされたイメージをキャッシュすることに注意してください。キャッシュの有効期間は 3 時間を超えません。キャッシュされたイメージの保存に必要なディスク容量は無料で提供されます。

Space パッケージレジストリ

Space パッケージのイメージを使用するには、完全なイメージ URL を指定します。

job("Use Space Packages") { container(image = "mycompany.registry.jetbrains.space/p/projectkey/mydocker/hello-world") { // ... } }

重要: 別のプロジェクトで作成されたプライベートレジストリのイメージを使用する場合は、まずこのプライベートレジストリを現在のプロジェクトにアタッチする必要があります。

リモートプライベートレジストリ

承認が必要なリモートレジストリのイメージを使用するには、まずそのレジストリへの接続を作成し、次にこの接続をジョブで使用する必要があります。

  1. リモートレジストリで、read 権限を持つトークンを発行します。

  2. 目的のプロジェクトを開きます

  3. プロジェクトのサイドバーメニューで、設定を選択し、次に Docker レジストリ接続を選択します。

  4. 新規接続をクリックし、接続設定を指定します。

    • キー : ジョブ内でこの接続を参照するために使用する一意の接続名 (例: docker_hub または some_registry)

    • Docker レジストリサーバー : リモート Docker レジストリの URL。Docker Hub の場合は index.docker.io です

    • ユーザー名パスワード : 以前に作成したユーザー名とパスワード (トークン)。

  5. container で接続とイメージを指定します。

    job("Use remote registry") { container(image = "some.registry.com/image:1.2.3") { dockerRegistryConnections { +"some_registry" } // ... } }
同じジョブで作成されたイメージ

ジョブを使用すると、Docker イメージを 1 つのステップで構築し、それを次のステップの実行に使用できます。例を見る

ディレクトリ構造と作業ディレクトリ

ユーザージョブを実行する前に、オートメーションは非表示の「ブートストラップ」ジョブを実行します。

  1. ディスクボリュームを作成

  2. Git サーバーからボリュームにプロジェクトソースのクローンを作成します。

  3. ボリュームをコンテナーにマウントします。デフォルトでは、ボリュームは /mnt/space にマウントされます。

/ ├─── mnt │ └─── space // step data directory │ ├─── share // file share │ ├─── system // non-user system files │ └─── work │ ├─── {git-repo-name} // cloned git repository (working directory) │ ├─── ... // other project repos (only if specified in the script) │ └─── ... ...

ここに:

  • /mnt/space はステップデータの親ディレクトリです。

    デフォルトのパスを変更するには、 job.container.mountDir パラメーターを使用します。

    shellScript または kotlinScript でこのパスを取得するには、JB_SPACE_STEP_DATA_PATH 環境変数を使用します。

  • /mnt/space/work/{git-repo-name} は、プロジェクトのデフォルトのソースコードの場所です。ここで、{git-repo-name} はプロジェクトの Git リポジトリ名を表します。これはコンテナーのデフォルトの作業ディレクトリ(英語)でもあります。追加のプロジェクトリポジトリをチェックアウトする方法の詳細については、「ソースコードをチェックアウトする」を参照してください。

    デフォルトのパスを変更するには、 job.container.workDir パラメーターを使用します。

    shellScript または kotlinScript でこのパスを取得するには、JB_SPACE_WORK_DIR_PATH 環境変数を使用します。

  • /mnt/space/share は、ファイル共有に使用される外部ストレージです。

    shellScript または kotlinScript でこのパスを取得するには、JB_SPACE_FILE_SHARE_PATH 環境変数を使用します。

コンテナー内で実行できるもの

シェルスクリプト
job("Run shell script") { container(displayName = "Show dir contents", image = "ubuntu") { shellScript { interpreter = "/bin/bash" content = """ echo Working dir contents ls /mnt/space/work """ } } }

詳細

任意の Kotlin コード
job("Run Kotlin code") { container(displayName = "Say Hello", image = "amazoncorretto:17-alpine") { kotlinScript { api -> println("Hello world!") } } }

詳細

コンテナーイメージコマンド
job("Run container command") { container(displayName = "Say Hello", image = "alpine") { args("echo", "Hello World!") } }

詳細

同じコンテナー内で複数の kotlinScript、shellScript、エントリポイントを実行することはできますか ?

いいえ、不可能です。container ステップは 1 つの項目 ( kotlinScriptshellScript、または args | entrypoint) のみを実行できます。container 内で複数を指定すると、ジョブは失敗します。

間違い

正しい

job("This job fails") { container(image = "amazoncorretto:17-alpine") { kotlinScript { api -> // Do smth. } shellScript { content = """ echo Do smth. """ } } }
job("This job works") { container(image = "amazoncorretto:17-alpine") { kotlinScript { api -> // Do smth. } } container(image = "alpine") { shellScript { content = """ echo Do smth. """ } } }

あるいは、container の代わりに host ステップを使用することもできます。

job("This job works") { host { kotlinScript { api -> // Do smth. } shellScript { content = """ echo Do smth. """ } } }

コンテナーリソース

ジョブには、50 個以下のコンテナー (ステップ) を含めることができます。各コンテナーには次のリソース制約があります。

デフォルト

最大

最小

仮想 CPU

2 vCPU

8 vCPU、無料プランの場合は 4 vCPU

0.5 vCPU

メモリ

7800 MB

無料プランの場合は 31200 MB、15600 MB

ジョブ内のすべてのコンテナーは同じディスクボリュームを使用します (プロジェクトリポジトリが含まれます)。デフォルトのボリュームサイズは 5 GB で、最大許容サイズは 30 GB です。リソースとボリュームサイズを指定するには、 job.container.resources パラメーターと job.volumeSize パラメーターを使用します。すべてのパラメーターは対応する単位をサポートしています。

  • job.container.resources.cpu : .cpu または .mcpu (millicpu) に値を設定できます。たとえば、cpu = 250.mcpucpu = 0.25.cpu と同じです。

  • job.container.resources.memory および job.volumeSize : .mb (MB) および .gb (GB) で値を設定できます (例: volumeSize = 10.gb)。

job("Example") { // 10 GB volumeSize = 10.gb container(image = "alpine") { resources { // 500.mcpu = 0.5.cpu cpu = 0.5.cpu // 2000 MB memory = 2000.mb } } }

アウトバウンド接続の宛先ポート

許可された

ブロック

  • すべての種類の ICMP

  • 0 – 1024/UDP および TCP

  • 9418/UDP および TCP (Git パック転送サービス)

  • 1025 – 65535/UDP および TCP

  • あらゆる種類の SMTP および IMAP: 25/TCP、25/UDP、587/TCP、465/TCP、993/TCP、993/UDP、143/TCP、143/UDP

関連ページ:

DSL リファレンス

オートメーション DSL は、Space オートメーションスクリプトの作成を支援することを目的としたドメイン固有の言語です。DSL は Kotlin プログラミング言語に基づいています。これは、スクリプト内で Kotlin データ型と言語構造を使用できることを意味します。作業:は、ステップで構成される定義済みタスクです。はジョブの名前ですは作業内容です例:job("Hello World!") { container(image = "hello-world") }job.requirement...

パッケージ内のアクセスと認可

プライベートおよびパブリックリポジトリ:パッケージリポジトリは特定のプロジェクト内でのみ作成できます。つまり、リポジトリはプロジェクト全体のエンティティです。ユーザー権限は、プロジェクト内のユーザーのロールとリポジトリのタイプ (プライベートまたはパブリック) によって異なります。さらに詳細に: 許可されたユーザーのみがプライベートリポジトリにアクセスできます。アクセスはパッケージリポジトリ権限グループによって管理されます。デフォルトでは: プロジェクトメンバーには、読み取り、書き込み、作成、削除...

パッケージリポジトリの管理

システム管理者ロールを持つユーザーは、管理 | パッケージリポジトリページを使用してリポジトリのグローバル管理を実行できます。このページで利用できるリポジトリのリストは、ユーザーアカウントの権限によって異なります。管理 | パッケージリポジトリページで: アクティブには、プロジェクトにアタッチされているリポジトリのリストが表示されます。プロジェクト内にリポジトリを作成すると、そのリポジトリはこのプロジェクトにアタッチされます。接続されたリポジトリは、別名によって区別できます。リポジトリを複数のプロ...

プロジェクトに参加する

あるプロジェクトに貢献を開始したい場合は、そのプロジェクトに参加する必要があります。つまり、そのプロジェクトのメンバーになる必要があります。貢献しようとしているプロジェクトに移動します。すでにメンバーである場合は、プロジェクトのページのプロジェクトメンバーにリストされます。そうでない場合は、プロジェクト管理者に連絡してメンバーシップを依頼してください。プロジェクト管理者を確認するには、プロジェクトページでメンバーウィジェットをクリックします。プロジェクトを探す:すべてのプロジェクトは名前で見つ