コンテナー
Space Automation を使用すると、Space Automation Cloud またはセルフホスト型ワーカー内の Docker コンテナーでジョブステップを実行できます。
どのように機能するのか
コンテナーでステップを実行するには、
containerブロックを使用します。job("Example"){ // displayName is optional // it will be shown in the job run results container(displayName = "Say Hello", image = "alpine") { shellScript { content = "echo Hello" } } }Docker Hub、Space Packages レジストリ、リモートレジストリなど、さまざまなソースからのコンテナーイメージを使用したり、前のジョブステップで構築されたイメージを使用したりできます。
タスクに応じて、コンテナー内で、シェルスクリプト、任意の Kotlin コード、またはコンテナーイメージコマンドを実行できます。
これら 3 つのオプションはすべて相互に排他的です。
実行中、コンテナーはプロジェクトリポジトリにアクセスできます。
リソースを消費するステップに合わせてコンテナーのリソースを調整できます。
ジョブで MySQL や Redis などのネットワークアクセス可能な追加サービスが必要な場合は、サービスコンテナーでそれらのサービスを実行できます。
ジョブが最終的に実行される環境 (クラウドまたはセルフホスト型ワーカー) は、デフォルトのワーカープールパラメーターとジョブ
requirementsによって異なります。ジョブ実行環境を指定する方法の詳細については、こちらを参照します。コンテナーは、実行環境に基づいて作業時間ごとに請求されます。詳細
コンテナーイメージソース
- 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") { // ... } }重要: 別のプロジェクトで作成されたプライベートレジストリのイメージを使用する場合は、まずこのプライベートレジストリを現在のプロジェクトにアタッチする必要があります。
- リモートプライベートレジストリ
承認が必要なリモートレジストリのイメージを使用するには、まずそのレジストリへの接続を作成し、次にこの接続をジョブで使用する必要があります。
リモートレジストリで、
read権限を持つトークンを発行します。目的のプロジェクトを開きます。
プロジェクトのサイドバーメニューで、設定を選択し、次に Docker レジストリ接続を選択します。
新規接続をクリックし、接続設定を指定します。
キー : ジョブ内でこの接続を参照するために使用する一意の接続名 (例:
docker_hubまたはsome_registry)Docker レジストリサーバー : リモート Docker レジストリの URL。Docker Hub の場合は
index.docker.ioですユーザー名とパスワード : 以前に作成したユーザー名とパスワード (トークン)。
containerで接続とイメージを指定します。job("Use remote registry") { container(image = "some.registry.com/image:1.2.3") { dockerRegistryConnections { +"some_registry" } // ... } }
- 同じジョブで作成されたイメージ
ジョブを使用すると、Docker イメージを 1 つのステップで構築し、それを次のステップの実行に使用できます。例を見る
ディレクトリ構造と作業ディレクトリ
ユーザージョブを実行する前に、オートメーションは非表示の「ブートストラップ」ジョブを実行します。
ディスクボリュームを作成
Git サーバーからボリュームにプロジェクトソースのクローンを作成します。
ボリュームをコンテナーにマウントします。デフォルトでは、ボリュームは
/mnt/spaceにマウントされます。
ここに:
/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 つの項目 ( kotlinScript、shellScript、または 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.
"""
}
}
} あるいは、 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.mcpuはcpu = 0.25.cpuと同じです。job.container.resources.memoryおよびjob.volumeSize:.mb(MB) および.gb(GB) で値を設定できます (例:volumeSize = 10.gb)。
アウトバウンド接続の宛先ポート
許可された | ブロック |
|---|---|
|
|
関連ページ:
DSL リファレンス
オートメーション DSL は、Space オートメーションスクリプトの作成を支援することを目的としたドメイン固有の言語です。DSL は Kotlin プログラミング言語に基づいています。これは、スクリプト内で Kotlin データ型と言語構造を使用できることを意味します。作業:は、ステップで構成される定義済みタスクです。はジョブの名前ですは作業内容です例:job(
パッケージ内のアクセスと認可
プライベートおよびパブリックリポジトリ:パッケージリポジトリは特定のプロジェクト内でのみ作成できます。つまり、リポジトリはプロジェクト全体のエンティティです。ユーザー権限は、プロジェクト内のユーザーのロールとリポジトリのタイプ (プライベートまたはパブリック) によって異なります。さらに詳細に: 許可されたユーザーのみがプライベートリポジトリにアクセスできます。アクセスはパッケージリポジトリ権限グループによって管理されます。デフォルトでは: プロジェクトメンバーには、読み取り、書き込み、作成、削除...
パッケージリポジトリの管理
システム管理者ロールを持つユーザーは、管理 | パッケージリポジトリページを使用してリポジトリのグローバル管理を実行できます。このページで利用できるリポジトリのリストは、ユーザーアカウントの権限によって異なります。管理 | パッケージリポジトリページで: アクティブには、プロジェクトにアタッチされているリポジトリのリストが表示されます。プロジェクト内にリポジトリを作成すると、そのリポジトリはこのプロジェクトにアタッチされます。接続されたリポジトリは、別名によって区別できます。リポジトリを複数のプロ...
プロジェクトに参加する
あるプロジェクトに貢献を開始したい場合は、そのプロジェクトに参加する必要があります。つまり、そのプロジェクトのメンバーになる必要があります。貢献しようとしているプロジェクトに移動します。すでにメンバーである場合は、プロジェクトのページのプロジェクトメンバーにリストされます。そうでない場合は、プロジェクト管理者に連絡してメンバーシップを依頼してください。プロジェクト管理者を確認するには、プロジェクトページでメンバーウィジェットをクリックします。プロジェクトを探す:すべてのプロジェクトは名前で見つ