Kubernetes クラスターに Space をインストールする
このガイドでは、Helm を使用してローカル Kubernetes クラスターに Space On-Premises をインストールする方法を説明します。
インストール要件
Kubernetes | バージョン 1.21 以降 |
Helm | バージョン 3.6.0 以降 |
クラスターワーカー | クラスターには少なくとも 5 つのワーカーがあります。
|
名前空間 | 専用の Kubernetes 名前空間。 |
イングレスコントローラー | Ingress コントローラーはクラスター内にすでに存在しており、特定の IngressClass のオブジェクトを監視します。 |
イングレス TCP プロキシモード | Server Name Indication (SNI) に加えて、Ingress コントローラーは TCP トラフィックのプロキシもサポートします。 |
Space アプリケーション、パッケージ、VCS サービスのドメイン名と、対応する TLS 証明書はすでに存在します。 | |
ストレージ | MinIO または別の S3 互換ストレージ、Elasticsearch、PostgreSQL、Redis はすでに存在しており、対応するアクセス資格情報はすでに構成されています。 サポートされるバージョン:
|
ユーザー権限 | Kubernetes 名前空間に対する管理者権限を持っています。 |
インストールを計画する
Space On-Premises の運用を成功させるために、事前にいくつかの技術的な決定を検討することをお勧めします。
保管組織
システムの拡張性に関しては、ストレージ構成が非常に重要です。Space On-Premises は、ストレージサブシステムを編成する 2 つの方法をサポートしています。
- 共用
Space オンプレミスコンポーネント (Space アプリケーション、パッケージ、VCS) は、同じストレージサブシステム (イベントバス、検索データベース、アプリケーションデータベース) を共有します。この方法は実装が簡単ですが、時間の経過とともに、そのようなソリューションのパフォーマンスは低下します。それでも、小規模な組織にとっては実行可能な選択肢となる可能性があります。
- 分散型
Space オンプレミスコンポーネントは、異なるストレージサブシステムを使用します。負荷に応じて、ストレージは拡張できます。分散ストレージの導入には計画が不可欠です。
計画を立てるときは、将来のメンテナンスの取り組みを必ず考慮してください。
すべての Space コンポーネントに必要なストレージを少なくとも 3 年前に見積もります。ObjectStorage の利用可能な Space は、パッケージ、リポジトリ、イメージ、ファイルなどに使用されることに留意し、予想される使用量と比較して賢明である必要があります。
ObjectStorage イングレス (存在する場合) には、許容可能な本体サイズ制限が必要です。
永続ボリュームは自動スケーリングと互換性がある必要があります。
データのバックアップとリカバリ
現時点では、Space On-Premises にはデータのバックアップや回復のための組み込みツールは提供されていません。各 Space ストレージサブシステムの業界のベストプラクティスに従うことをお勧めします。
基本的な考慮事項:
PostgreSQL、MinIO/S3 互換ストレージ – バックアップが必要なユーザーデータ。
Elasticsearch – PostgreSQL および MinIO/S3 互換のストレージデータのインデックス。データベースのインデックスは再構築できますが、かなりの時間がかかる場合があります。PostgreSQL や MinIO/S3 互換ストレージに大量のデータが保存されている場合は、Elasticsearch コンテンツをバックアップすることをお勧めします。
Redis – 一時的なユーザーデータのみ。バックアップする必要はありません。
インフラストラクチャの観点からバックアップソリューションを計画する場合は、開始前提として 1 ペタバイトのデータを保存する必要があることを考慮してください。これは、最適なアプローチを見つけ、既存の手順やツールの制約を評価できます。
PostgreSQL、MinIO/S3 互換ストレージ、および Elasticsearch は個別にバックアップされます。バックアップ内のデータは相互に依存しています。そのため、これらのデータを復元するときは、復元される MinIO バックアップが PostgreSQL バックアップより後に作成され、Elasticsearch バックアップが MinIO バックアップより後に作成されることが重要です。
シークレットのローテーション
Space オンプレミスのインストール中、ユーザーが指定したほぼすべての入力はシークレットとして扱われます。Space 構成により、対応する Kubernetes シークレットオブジェクトが設定されます。デプロイ中に、Kubernetes はこのオブジェクトを最も適切な Space アプリケーションコンポーネントに挿入します。
必要に応じて、externalSecretName
キーを使用して、内部シークレットオブジェクトをユーザー管理のシークレットで上書きできます。各外部シークレットに必要なキーと値がすべて含まれていることを確認してください。そうしないと、特定の Space アプリケーションコンポーネントが起動できなくなります。
特定のシークレットにどのキーが必要かについては、Space On-Premises Helm チャートの /space/templates/space/secrets
ディレクトリを参照してください。
たとえば、Space アプリケーションの S3 ストレージ構成を上書きするには、s3.secret.yaml
ファイルに基づいて外部シークレットを作成します (値は Base64 でエンコードされている必要があります)。
Space オートメーションワーカー
Space Automation は、Space CI/CD サーバーです。Space オンプレミスバージョンの Automation は、2 種類のワーカー (CI/CD ジョブを実行するマシン) をサポートします。
セルフホスト型ワーカー – Space ユーザーがホストするマシン。この場合、ユーザーはそのようなマシンを Space インスタンスに構成および登録する全責任を負います。セルフホスト型ワーカーのサポートはすぐに使用できるため、インストール中に追加の構成は必要ありません。
Kubernetes ワーカー – これは Space クラウドワーカーに相当します。Space On-Premises の場合、ワーカーは Compute-service によって Kubernetes クラスター内にオンデマンドで作成されます。デフォルトでは、Compute-service は無効になっています。Space On-Premises インスタンスで Kubernetes ワーカーを使用する場合は、サービスを明示的に有効にする必要があります。
Kubernetes ワーカーを使用する場合は、次の点を考慮してください。
- コンピューティングサービス pod リソース
Compute-service は、次の 3 つの構成のいずれかで Automation コンテナー用のワーカー pods を作成します。
regular
: 2 vCPU、7800 MBlarge
: 4 vCPU、15600 MBxLarge
: 8 vCPU、31200 MB
上記の構成の倍数でコンピューティングサービスにリソースを割り当てることは理にかなっています。例: ジョブがリソースを明示的に要求しない場合、Space は 2 vCPU と 7800 MB を備えた
regular
pod を作成します。ジョブが 3 vCPU と 8000 MB を要求した場合、Space は 4 vCPU と 15600 MB を備えたlarge
pod を作成します。8 つの vCPU と 32 GB を備えたノードは、4 つのregular
ジョブ、2 つのlarge
ジョブ、および 1 つのxLarge
ジョブを実行できます。- 自動スケーリングポリシー
クラスター管理者は、そのクラスター内のノードの自動スケーリングポリシーを定義する責任があります。この目的のために、Kubernetes 用の既存のオートスケーラープラグインを使用できます。推奨されるアプローチは、空きリソースが 20-30% 未満の場合に、リソース使用量 (CPU/ メモリ) に基づいて自動スケールすることです。自動スケーリングポリシーは、新しい自動化ジョブが開始される速度に影響します。
- ワーカーコンテナーの特権モード
Space Automation の作業は、Kubernetes pod で実行されるワーカーアプリケーションによって調整されます。アプリケーションは、pod でオートメーション実行環境を開始し、環境データを使用してダイナミックボリュームを管理します。実行環境も Docker コンテナーです。つまり、ワーカーアプリケーションはこれらのネストされたコンテナーを
--privileged
モードで開始する必要があります (このモードは Docker の Docker に必要です)。コンテナーとこれらのコンテナー内のユーザープロセスは、Kubernetes pod 境界によって分離されます。会社がゼロトラストポリシーを採用している場合、これは潜在的なセキュリティ課題となる可能性があります。この場合、シスボックス(英語)を使用してワーカーコンテナーを分離できます (--privileged
モードは必要ありません)。- CSI ストレージ
Compute-service は、コンテナーストレージインターフェース (CSI)(英語) 経由で Kubernetes ボリュームとスナップショットを操作できます。これには、AWS、GCP、Azure などによって提供される CSI 互換のストレージを使用できます。CSI の使用はオプションですが、これにより IOPS 負荷を Kubernetes ノードから分離されたボリュームに移動し、飛行中にワーカーのディスク領域を変更できます。これらの機能を利用するには、Space をインストールする前に、ターゲットの Kubernetes クラスターで CSI ドライバーをセットアップする必要があります。
メールサーバー
Space はメールサーバーを使用して、メールでユーザーに通知を送信します。Space On-Premises にはメールサーバーが組み込まれていませんが、任意の SMTP サーバーを使用できます。SMTP サーバー設定は、インストール中 (values.yaml
の space.mail
を参照) またはその後の Space 管理設定で指定できます。
ローカル Kubernetes クラスターに Space On-Premises をインストールする
以下の手順では次の名前を使用します (インストールによって異なります)。
Kubernetes 名前空間は
kube-space
です。Space アプリケーションコンポーネントのドメイン名は次のとおりです。
Space 応用:
portal.space.local
パッケージ:
packages.space.local
VCS:
git.space.local
space.masterSecret
キーを作成して保存します。openssl rand -base64 32出力例:
RMmPPfeJMOUkUpPHncPduaB/q/zae0D1/pzkyyqsBWg=
space.vcs.token
キーとvcs.secrets.spaceAccessKey
キーを作成して保存します (両方のキーは同じ値を持つ必要があります)。openssl rand -base64 32出力例:
T+a5yNn8VUf8VslAKXsJ8qFyo6Txxm92k6Khnd9RbaY=
space.packages.oauth.clientSecret
キーとpackages.oauth.clientSecret
キーを作成して保存します (両方のキーは同じ値を持つ必要があります)。openssl rand -base64 32出力例:
7I3b50sJz6q0g1GUa4GHQDJQypxKPiWKJtdSQSA+u1s=
ローカル管理者アカウントのデータを提供します。ローカル管理者は、Space On-Premises インスタンスの最初の管理者アカウントになります。最も重要なアカウント設定は
space.localAdministrator.username
とspace.localAdministrator.password
です。インストールの完了後に Space にログインするには、これらの資格情報が必要になります。space.localAdministrator.password
キーの場合は、独自のパスワードを使用することも、次のコマンドを使用してランダムなパスワードを生成することもできます。openssl rand -base64 8出力例:
waPL7YEhAxw=
Space にログインするときは、この値をそのまま指定します。出力は Base64 でエンコードされた値ですが、デコードして戻さないでください。
デプロイ構成を使用して
values.yaml
ファイルを作成します。ファイルに、前の手順で生成されたキーと証明書の値を指定します。たとえば、この例では、ファイルは次のようになります。space: ingress: hostname: "portal.space.local" enabled: true selfSigned: true tls: true masterSecret: "RMmPPfeJMOUkUpPHncPduaB/q/zae0D1/pzkyyqsBWg=" webHookSecret: "TNyTnI/cJB+RNfrtLJ+a1tB8J6IUOTLSL0qWatzbbhU=" localAdministrator: firstName: "Administrator" lastName: "Administrator" username: "admin" password: "waPL7YEhAxw=" email: "admin@space.local" oauth: messageEncodingKey: "P7fD4x3s5t4Gtor1dYgpjw==" encodingKey2fa: "iHKa0NUFgNYNhECbREGeLA==" encodingKey: "UesLKkayxPdzFhkcMazXZA==" messageSigningRsaPublic: "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt+fhiHhMEXFb9GvG5B3lFSTSZ4Rk9nIHXogvk4Kb16H5GIBeil2T+maOF0FT6xMu+Qxc90iZ4CAmkUcTMUyda5J+W6lYdkEKwg9o5WERsHfxIr3e63DgasGBpDemgJwpUOhBjjFCaOcAN0ivP03grkKKdHXaT6vWqShGJKiaPaz56bDPtPR1XNnB8GfUtAAy0T6rx86h5NKUd3W1ms3i355BEhPji9TUbcXxspIWj5wQpkiPZ/QI3uIkpdizlaXNbZQHkxXL/J65QkNbSioVY0ggTna0TiTPEic2/QvV8LD6e066PP6fyN54F1JTKTdT6HlKF+5EG5NOXe6gTclgef0F4XtiSSngxqx/khi9vVLX6vtYYrQiIVn62XBEAm6pAQzNWt7IcFXQnF2lw3J7hlcwhJBFTDoiKoXGBkqOG/+TlwvXIRDMZp5SkEqOpYNYdsTZGUgf1Hc9/lKXeq9OSbTSLQtfWNHC25UO58X+w4ceuUIrRfnWK3qX5jTeENzM8MHo7dz1r815kDOUGnpyZqsC5UwXch9xUMAxRShtN998xw7kCYcNxckPDvMMjdKgPDU8oaMybW5+GVD5qakM0ZqrPr6uPjzoUYmm1zD9L08CAwEAAQ==" messageSigningRsaPrivate: "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" accessTokenRsaPublic: "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArzdHZTfdMxCPONs/ASKxoLZhSqwn81nY9WsLBkbKnKG3HDEQY0hy1odYWi/O1LDHHjGEOFHpJxjT1k119Wy0RcUik42BLUcpwUiZoPKetlJQV27vxkGJk/KhYqIuinUTRVCLx1B4ES/9De/j8AySNvonsyohjTNFI5Bn1AJZH7Ch7fc8mKaXd/vhCYCCEF8NcCcAsV9a3zDc4lzAVL+YsOY/FCC9WMT/Qq7zbYTrpBCir2ql+oxWaoa6fB3wtTjabTgDdIFg3COy9+6Z5KR21kKCuuC/I/sn7LXBs32NyHQcDYjuzo5xoHUPY7Q3TGnPfCr98pxhL7041fqVmfN+wM37n/+VGX5tT71DgN9yB+Q+32IwmBLGcmE3Hx8fzZhXT96ATyXN06UyQPCf6a5pgi4qGk1tJrLxGVSympyHZ/gGX52JFJQAtH3XR7aOl2Fv6sYQLP7ZUOQ6oNTa2bSL56ZlHy7NV+RDpROYxhsg5Z/kHYedA0PZ292mQqz/2QTcLKAz0IC4K6IAxyFQhsIcrdBBt/kPzjjz0+9rjSAKf7K9esegqOFGwPiI6Jz8Yu9hKK6N+d+unsbHEXswonjwIBmBZ8+p4o+io+7tzmOm2ViBc4SnzW1Ojl6OkUxK0f1oTD2YCHafmV4ICILK6EbL8e8CLJ9fWYIo6YpBqIQk5P8CAwEAAQ==" accessTokenRsaPrivate: "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" database: name: "space" hostname: "postgresql" port: "5432" username: "spaceServiceAccount" password: "password" eventbus: hostname: "redis" port: "6379" objectStorage: region: "us-west-1" bucketName: "space-packages" url: "http://minio:9000" accessKey: "spaceServiceAccount" secretKey: "password" mail: enabled: true username: "spaceMailUser" password: "MailServerPassword" hostname: "mail.space.local" port: "1025" settings: fromAddress: "mailer@no-reply.space.local" elastic: search: hostname: "elasticsearch" port: "9200" audit: hostname: "elasticsearch" port: "9200" metrics: hostname: "elasticsearch" port: "9200" vcs: token: "T+a5yNn8VUf8VslAKXsJ8qFyo6Txxm92k6Khnd9RbaY=" externalUrl: "https://portal.space.local" altUrls: "http://portal.space.local" automation: logs: storage: region: "us-west-1" bucketName: "space-data" url: "http://minio:9000" accessKey: "spaceServiceAccount" secretKey: "password" worker: storage: region: "us-west-1" bucketName: "space-data" url: "http://minio:9000" accessKey: "spaceServiceAccount" secretKey: "password" dslCompiler: storage: region: "us-west-1" bucketName: "space-data" url: "http://minio:9000" accessKey: "spaceServiceAccount" secretKey: "password" packages: externalUrl: "https://packages.space.local" packages: ingress: hostname: "packages.space.local" enabled: true selfSigned: true tls: true database: name: "space" hostname: "postgresql" port: "5432" username: "spaceServiceAccount" password: "password" eventbus: hostname: "redis" port: "6379" objectStorage: region: "us-west-1" bucketName: "space-packages" url: "http://minio:9000" accessKey: "spaceServiceAccount" secretKey: "password" elastic: search: hostname: "elasticsearch" port: "9200" externalUrl: "https://packages.space.local" oauth: clientId: "space-to-packages" clientSecret: "7I3b50sJz6q0g1GUa4GHQDJQypxKPiWKJtdSQSA+u1s=" space: externalUrl: "https://portal.space.local" vcs: storage: eventbus: hostname: "redis" port: "6379" objectStorage: region: "us-west-1" bucketName: "space-vcs" url: "http://minio:9000" accessKey: "spaceServiceAccount" secretKey: "password" database: name: "space" hostname: "postgresql" port: "5432" username: "spaceServiceAccount" password: "password" secrets: spaceAccessKey: "T+a5yNn8VUf8VslAKXsJ8qFyo6Txxm92k6Khnd9RbaY=" externalUrl: "https://git.space.local" spaceExternalUrl: "https://portal.space.local" ingress: hostname: "git.space.local" enabled: true selfSigned: true tls: true(オプション) Compute-service を有効にして、Kubernetes クラスター内で Automation ワーカーを実行できるようにします。この手順をスキップして、インストールの補完後いつでも Compute-service を有効にすることができます。
オブジェクトストレージに、ユーザーが Space のリポジトリページからパッケージをダウンロードできるようにする CORS ポリシーが設定されていることを確認してください。
作成した構成をデプロイします。
チャートリポジトリを追加します。
helm repo add jetbrains-space-onpremises \ https://charts.on-premises.service.jetbrains.space/stableデプロイを実行します。
helm install jb-space jetbrains-space-onpremises/space --namespace kube-space -f values.yaml
export HELM_EXPERIMENTAL_OCI=1 helm install jb-space \ oci://public.registry.jetbrains.space/p/space-on-premises/helm/space \ --version 2024.2.1 \ --namespace kube-space \ -f values.yamlVCS Ingress の TCP プロキシを設定します。つまり、Ingress Controller マップを設定します。Kubernetes Nginx Ingress Controller を使用する場合は、このガイド(英語)に従ってください。
すべての Space ドメイン名が Ingress ロードバランサーに解決されることを確認します。
nslookup portal.space.local nslookup packages.space.local nslookup git.space.localSpace pods の状態を確認します。
kubectl -n kube-space get poSpace pods は実行状態でなければなりません。平均して、デプロイの後、pod がアクティブになるまでに約 2 分かかります。pods が実行ではない場合は、次のコマンドを使用して原因を見つけることができます。
kubectl -n kube-space get eventおよび
kubectl -n kube-space describe po "${POD_NAME}"ブラウザーで Space On-Premises インスタンスを開きます。Space にログインするときは、前の手順のいずれかで作成した認証情報を使用します。
インストール後の管理アクティビティを実行します。
モバイルクライアントで Space を使用する場合は、プッシュ通知を構成します。
コンピューティングサービスを有効にしていないが、Space オートメーション (CI/CD) を使用したい場合は、セルフホスト型オートメーションワーカーを構成します。
(オプション) Compute-service を有効にする
Compute-service Space オンプレミスのインストールまたは後でいつでも有効にできます。これは、Space で Kubernetes クラスター内で Automation ワーカーを実行する場合にのみ必要です。Kubernetes ワーカーに関する考慮事項を参照してください。
- 前提条件
Compute-service では、追加の
{space-namespace}-automation-jobs
名前空間を作成する必要があります。次のいずれかを実行します。helm
に追加の名前空間を作成する権限を与えます。この場合、{space-namespace}-automation-jobs
は自動的に作成されます。{space-namespace}-automation-jobs
を手動で作成し、helm
にこの名前空間の管理者権限を与えます。
静的ノードや自動スケーリングプラグインを使用するなど、クラスターの自動スケーリングポリシーを定義します。考慮事項を参照
(オプション) Container Storage Interface (CSI) ドライバーをセットアップします。
Compute-Service は CSI 経由で Kubernetes ボリュームを操作できるため、いくつかの利点があります。CSI ドライバーをセットアップするには、必要なパラメーターを指定して
VolumeSnapshotClass
およびStorageClass
のインスタンスを作成し、それらの名前をvalues.yaml
ファイル内のcomputeservice.storageClassName
およびcomputeservice.volumeSnapshotClassName
に渡します。例: AWS の場合:
--- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer(オプション) Sysbox をセットアップします。
デフォルトでは、Space はオートメーションワーカーコンテナーを
--privileged
モードで実行します (コンテナーはホストシステム上で root 権限を持ちます)。セキュリティ上の理由によりこれを回避したい場合は、代わりに Sysbox を使用できます。考慮事項を参照Sysbox のインストールプロセスは、Kubernetes クラスターのタイプによって異なります。公式の Sysbox インストール手順に従ってください (英語)
computeservice.oauth.clientSecret
キーを作成して保存します。openssl rand -base64 32出力例:
Lz4JawsX4v7zRvFpzhxGGWH8UhNmtz7+xqsn6dtn+Ys=
次の構成を
values.yaml
に追加して、Compute-service を有効にします。computeservice: enabled: true oauth: clientSecret: "Lz4JawsX4v7zRvFpzhxGGWH8UhNmtz7+xqsn6dtn+Ys=" database: name: "crcltdevdb" hostname: "postgresql" port: "5432" username: "root" password: "circlet"クラスターで CSI ストレージを使用する場合 ( ステップ 1 を参照)、
values.yaml
のcomputeservice
構成に次の行を追加します。computeservice: worker: defaultVolumeGb: 50defaultVolumeGb
は、CSI ストレージに割り当てられるディスク容量を GB 単位で定義します。この値は、計画されたユーザーのワークロードとほぼ同じである必要があります。この Space は、実行中のすべてのオートメーションジョブ間で共有されます。つまり、これは、ダウンロードされたプロジェクト参照やコンパイルプロセスなどに必要な合計 Space です。defaultVolumeGb
が0
であるか指定されていない場合、Space はクラスター内のコンピューティングサービスノード上のオートメーションジョブ用のディスク領域を割り当てます。Sysbox ( ステップ 2 を参照) を使用する場合は、
values.yaml
のcomputeservice
構成に次の行を追加します。computeservice: worker: sysbox: enabled: true(オプション) デフォルトの Docker レジストリ * をパブリック JetBrains レジストリからカスタムレジストリに変更します。Space インスタンスを外部アクセスから隔離したい場合、この変更は意味があります。
デフォルトのレジストリを変更するには:
values.yaml
のcomputeservice
構成に次の行を追加します。computeservice: worker: image: registry: "custom.registry.mycompany.com" repository: "space-automation-worker-k8s" tag: "2024.2.1.177"ここで、
registry
、repository
、tag
はカスタムレジストリの URL、リポジトリ名、イメージタグを定義します。レジストリで認証が必要な場合は、Kubernetes の公式手順(英語)に従って、レジストリの資格情報を保存するためのシークレットを作成します。シークレット名が
docker-credentinals-1
であるとします。imagePullSecrets
パラメーターを構成に追加します。computeservice: worker: image: registry: "custom.registry.mycompany.com" repository: "space-automation-worker-k8s" tag: "2024.2.1.177" imagePullSecrets: "docker-credentinals-1"
(ケース固有) Space パッケージでの手動ダウンロードを有効にする
カスタムオブジェクトストレージに、任意のオリジンからの GET リクエストの受信を許可する CORS ポリシーがあることを確認してください。
そうしないと、ユーザーは Space のリポジトリページからパッケージを手動でダウンロードできなくなります。ダウンロードボタンをクリックするとエラーになります。
例: Amazon S3 を使用する場合は、次の手順に従って CORS ポリシーを構成します。
AWS マネジメントコンソールにサインインし、Amazon S3 コンソール(英語)を開きます。
Space パッケージに使用される S3 バケットを開きます。
許可タブを開き、次の構成を CORS セクションに追加します。
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [] } ]変更内容を保管します。
関連ページ:
![](https://resources.jetbrains.com/help/img/space/onpremK8sCluster.png)
Kubernetes のインストール
Space On-Premises の Kubernetes インストールは、より大きなワークロードの処理に適したスケーラブルなソリューションを提供します。クラスター自体は、独自の環境、Amazon Elastic Kubernetes Service、Google Kubernetes Engine、または Kubernetes をサポートするその他のクラウドサービスで実行できます。サポートされる Kubernetes の最小バージョンは 1.21 です。概要:ユーザーは、モバイルアプリ、W...
![](https://pleiades.io/icons/jetbrains_logo.png)
自動化 (CI/CD)
自動化は、CI/CD を担当する JetBrains Space の一部です。これにより、プロジェクトをビルド、テスト、デプロイできます。基本自動化を始めましょう、概念、ジョブとステップ、デプロイ、実行環境、パラメーターとシークレット、サンプル Android、Dart、Docker、Helm チャート、Java および Kotlin 用の Gradle、Java および Kotlin 用の Maven、.NET と .NET Core、.NET フレームワーク、Node.js、npm、Pytho...
![](https://resources.jetbrains.com/help/img/space/externalWorkerTags.png)
セルフホスト型ワーカー
セルフホスト型ワーカーは、Windows、Linux、macOS 上の独自のマシンで実行できる軽量エージェントです。セルフホスト型ワーカーは Space Automation に接続し、ジョブとプロジェクトのソースコードを取得してジョブを実行し、結果を Space にレポートします。セルフホスト型ワーカーを使用すると、コンテナーでは不可能な CI/CD ワークフローを実行できます。例:Windows 上で完全な .NET フレームワークアプリケーションを構築します。特定のハードウェアを使用する...