JetBrains Space ヘルプ

実行環境

実行環境は、開発環境インスタンスに使用される Docker イメージインスタンス型、およびインスタンスに提供される環境変数のセットのパラメーターによって定義されます。

デフォルトの Docker イメージ

Docker イメージを指定しない場合、Space はデフォルトのイメージを使用します。デフォルトのイメージは Ubuntu OS に基づいており、Git、curl、Docker、Docker Compose、Kubernetes、Google Cloud サポート、Open JDK、Python、PHP、.NET SDK、Ruby、Go、Node.js、npm、yarn、その他のツールが含まれています。

デフォルトのイメージ Dockerfile :

FROM ubuntu:20.04 ENV LANG=C.UTF-8 MAINTAINER Alexander Sedov <alexander.sedov@jetbrains.com> ARG TARGETARCH # Support various rvm, nvm etc stuff which requires executing profile scripts (-l) SHELL ["/bin/bash", "-lc"] CMD ["/bin/bash", "-l"] # Set debconf to run non-interactively RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections RUN apt-get update && apt-get install -y apt-utils apt-transport-https software-properties-common # Newest git RUN apt-add-repository ppa:git-core/ppa -y && apt-get update RUN set -ex -o pipefail && apt-get install -y \ # Useful utilities \ curl unzip wget socat man-db rsync moreutils vim lsof \ # VCS \ git subversion subversion-tools mercurial \ # Database clients \ mongodb-clients mysql-client postgresql-client jq redis-tools \ # C/C++ \ build-essential cmake g++ m4 \ # R \ r-base r-base-dev \ # TeX \ texlive \ # JVM \ openjdk-8-jre-headless openjdk-11-jdk-headless openjdk-17-jdk-headless maven ant clojure scala \ # Python 3 \ python3-matplotlib python3-numpy python3-pip python3-scipy python3-pandas python3-dev pipenv \ # Python 2 \ python2-dev python-pip-whl \ # Ruby \ ruby-full \ && \ # Setup Java \ update-alternatives --get-selections | grep usr/lib/jvm | awk '{print $1}' | \ grep -v jpackage | grep -v jexec | \ while IFS= read line; do echo $line; update-alternatives --set $line /usr/lib/jvm/java-11-openjdk-$TARGETARCH/bin/$line; done && \ java -version && javac -version && \ # Check Python \ python3 --version && python2 --version && pip3 --version && \ # Go \ curl -fsSL "https://dl.google.com/go/$(curl -fsSL 'https://golang.org/VERSION?m=text').linux-$TARGETARCH.tar.gz" -o /tmp/go.tar.gz && \ tar -C /usr/local -xzf /tmp/go.tar.gz && rm /tmp/go.tar.gz && \ for x in /usr/local/go/bin/*; do echo $x; ln -vs $x /usr/local/bin/$(basename $x); done && ls -la /usr/local/bin && go version ## Nodejs, npm, yarn RUN set -ex -o pipefail && \ curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \ curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null && \ echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update && apt-get install -y nodejs yarn ## PHP RUN set -ex -o pipefail && \ add-apt-repository ppa:ondrej/php -y && \ apt-get install -y --no-install-recommends php8.0-cli php8.0-common php8.0-curl php8.0-xml php8.0-mbstring && \ wget https://github.com/composer/composer/releases/download/2.2.1/composer.phar -O /usr/bin/composer -q && \ chmod +x /usr/bin/composer ## dotNet RUN if [ "$TARGETARCH" == "arm64" ] ; \ then echo "Skipping installation of .NET packages, as they are only available for arm64 starting from Ubuntu 22.04" ; \ else set -ex -o pipefail && \ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && \ dpkg -i packages-microsoft-prod.deb && \ rm packages-microsoft-prod.deb && \ apt-get update && \ apt-get install -y dotnet-sdk-6.0 ; \ fi ### Cloud Tools ## The awscli tools use a different naming scheme for arm64 builds RUN if [ "$TARGETARCH" == "arm64" ] ; \ then AWS_TOOLS_ARCH=aarch64 ; \ else AWS_TOOLS_ARCH=x86_64 ; \ fi && \ set -ex -o pipefail && \ # Docker \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list && \ apt-get install -y docker.io && \ docker --version && \ # Kubernetes \ curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg && \ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list && \ apt-get update && apt-get install -y kubectl && \ kubectl version --client && \ # aws-cli \ curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-$AWS_TOOLS_ARCH.zip" -o /tmp/awscliv2.zip && \ mkdir -p /tmp/aws.extracted && \ unzip -q /tmp/awscliv2.zip -d /tmp/aws.extracted && \ /tmp/aws.extracted/aws/install && \ rm -rf /tmp/aws.extracted /tmp/awscliv2.zip && \ /usr/local/bin/aws --version && \ # gcloud \ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \ echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee /etc/apt/sources.list.d/google-cloud-sdk.list && \ apt-get update && apt-get install -y google-cloud-sdk && \ gcloud --version && \ # rclone \ curl -fsSL https://downloads.rclone.org/v1.56.2/rclone-v1.56.2-linux-$TARGETARCH.zip -o /tmp/rclone.zip && \ mkdir -p /tmp/rclone.extracted && unzip -q /tmp/rclone.zip -d /tmp/rclone.extraced && \ install -g root -o root -m 0755 -v /tmp/rclone.extraced/*/rclone /usr/local/bin && \ rm -rf /tmp/rclone.extraced /tmp/rclone.zip && \ rclone --version ## Docker compose (https://docs.docker.com/compose/install/) ## There are no arm64 builds of docker-compose for version 1.x.x, so version 2.x.x is used RUN if [ "$TARGETARCH" == "arm64" ] ; \ then DOCKER_COMPOSE_VERSION=v2.14.0 ; \ else DOCKER_COMPOSE_VERSION=1.29.2 ; \ fi && \ set -ex -o pipefail && \ curl -fsSL "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \ chmod +x /usr/local/bin/docker-compose && \ rm -f /usr/bin/docker-compose && \ ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose RUN echo "############################### Versions #####################################" && \ java -version && \ javac -version && \ echo "" && \ python3 --version && \ python2 --version && \ pip3 --version && \ echo "" && \ go version && \ echo "" && \ echo ".NET SDK" && \ if [ "$TARGETARCH" != "arm64" ] ; then dotnet --list-sdks ; else echo "Not available for arm64" ; fi && \ echo "" && \ echo ".NET Runtimes" && \ if [ "$TARGETARCH" != "arm64" ] ; then dotnet --list-runtimes ; else echo "Not available for arm64" ; fi && \ echo "" && \ echo "Nodejs: $(node --version)" && \ echo "Npm: $(npm --version)" && \ echo "Yarn: $(yarn --version)" && \ echo "" && \ ruby --version && \ echo "" && \ php -v && \ composer -V && \ echo "" && \ docker --version && \ docker-compose --version && \ echo "" && \ echo "Kubectl: $(kubectl version --client)" && \ echo "" && \ gcloud --version && \ echo "" && \ rclone --version && \ echo "############################### Versions #####################################"

この Dockerfile をベースとして使用して、独自のイメージを作成し、Space パッケージでホストできます。詳細

開発環境のイメージを指定する

開発環境は Docker コンテナーで実行されます。devfile.yaml でイメージを指定しない場合、Space はデフォルトのイメージを使用します。カスタムイメージとして、Docker Hub (または認証を必要としないその他のレジストリ)、Space パッケージからのイメージを使用したり、ユーザーが新しい開発環境を作成するたびに Dockerfile からイメージを作成したりできます。イメージを指定するには、プロジェクトの devfile を使用します。

イメージの要件
  • OS : glibc ベースの Linux ディストリビューション (CentOS 7 以降、Debian 9 以降、Ubuntu 20.04+ など)。

  • ツール : Git、OpenSSH (リモート Git リポジトリを使用する場合)、lsof (IDE でポート転送が必要な場合)。

  • コンテナーは root として実行する必要があります ( Dockerfile には非 root ユーザーが存在してはなりません)。

コンテナーイメージとウォームアップスナップショットの比較

場合によっては、特定の準備ステップをコンテナーイメージに配置するか、環境ウォームアップに配置するか、というジレンマに直面することがあります。例: プロジェクトには SDK が必要です。SDK を入手するには、curl - o sdk.zip $SDK_URL && unzip sdk.zip を実行します。この行を Dockerfile またはウォームアップスクリプトのどこに記述しますか ?

推奨事項:

  • すべての追加ツール (例: apt get でインストールされるツール) は、開発環境のイメージ (つまり、Dockerfile で説明されている) にインストールする必要があります

  • root またはプロジェクトディレクトリ内に保存されているすべてのバイナリ依存関係は、ウォームアップスクリプトに移動する必要があります。上記の例では、ウォームアップスクリプトで SDK を取得するのが最善の解決策となります。

components.container.image パラメーターには、完全なイメージ URL を指定します。

重要: Space Packages レジストリは、開発環境を構成する同じプロジェクトに属しているか、このプロジェクトにアタッチされている必要があります。

schemaVersion: 2.2.0 attributes: space: instanceType: regular editor: type: Idea components: - name: ubuntu-container container: image: mycompany.registry.jetbrains.space/p/myprj/container/dev-image:latest

開発環境では、コンテナーイメージにカスタム Dockerfile を使用できます。Dockerfile はプロジェクトリポジトリ内のどこにでも配置できます。この場合、ユーザーが新しい開発環境を作成するたびに、Space がイメージを構築することに注意してください。開発環境の起動時間を短縮するには、イメージを一度ビルドして、プロジェクトの Space Packages レジストリに公開することをお勧めします。

  1. プロジェクトのソースコードを開き、たとえば docker ディレクトリに Dockerfile を作成します。

  2. Dockerfile を編集してイメージを構成します。

    例: Java プロジェクトのイメージ:

    FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive ENV LC_ALL=C.UTF-8 RUN apt-get update RUN apt-get install -y \ git \ openjdk-11-jdk \ && rm -rf /var/lib/apt/lists/* ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
  3. プロジェクトのソースコードを開き、プロジェクトの devfile を開きます。存在しない場合は、新しいもの ( .space/devfile.yaml など) を作成します。

  4. devfile で、Dockerfile (uri) へのパスを指定し、オプションで Docker コンテキスト (buildContext) へのパスを指定します。両方のパスを projectRoot を基準にして指定する必要があります。例:

    schemaVersion: 2.2.0 attributes: space: instanceType: large editor: type: Idea components: - name: image-build image: # (Required) imageName: my-image:latest dockerfile: # (Optional) path to Docker context relative to projectRoot # by default, projectRoot is repository root buildContext: docker # (Required) path to Dockerfile relative to projectRoot uri: docker/Dockerfile args: - 'ARG1=A' - 'ARG2=B'

  5. 変更をコミットしてプッシュします。

Docker Hub だけでなく、認証を必要としないパブリックレジストリのイメージも使用できます。Docker Hub のイメージの場合はイメージ名のみ指定できます。他のレジストリの場合は、完全なイメージ URL を指定する必要があります。

schemaVersion: 2.2.0 attributes: space: instanceType: regular editor: type: Idea components: - name: openjdk-container container: # image from Docker Hub image: openjdk:latest

デフォルトの開発環境インスタンスタイプを指定する

開発環境は、通常 (4 vCPU、8 GB)、大規模 (8 vCPU、16 GB)、特大 (16 vCPU、32 GB) の 3 つの異なる仮想マシンインスタンスで実行できます。開発環境の請求について詳しく見る

デフォルトのインスタンス型を指定するには、space.instanceType パラメーターを使用します。ユーザーは、開発環境を作成するときに別のインスタンス型を選択できます。

schemaVersion: 2.2.0 attributes: space: # regular, large, xlarge instanceType: large editor: type: Idea

環境変数を設定する

開発環境コンテナーで環境変数を定義するには、components.container.env パラメーターを使用します。

schemaVersion: 2.2.0 attributes: space: instanceType: large editor: type: Idea components: - name: dev-container container: env: - name: VAR_A value: 'valueA' - name: VAR_B value: 'valueB'

新しい環境を作成するときに、環境変数に追加された変数を表示できます。

Env vars in dev environments

更新された devfile をプロジェクトリポジトリにプッシュすると、指定された環境変数は新しく作成された開発環境でのみ使用できるようになります。

関連ページ:

Docker

前提条件 Docker イメージを定義するは、プロジェクトソースに保存されます。実行環境セルフホスト型ワーカーでジョブを実行する場合は、Docker がインストールされていることを確認してください。Space クラウドワーカーでジョブを実行する場合は、Space オートメーションクラウドプールが使用されていることを確認してください。ワーカープールの詳細については、こちらを参照してください、Docker の CI/CD シナリオ:自動化された Docker ビルド: すべてのイメージの依存関係はす...

ウォームアップ

開発環境では、IDE ウォームアップフェーズ (IDE がインデックスを構築し、プロジェクトの依存関係の解決などのその他のバックグラウンドアクティビティを実行する期間) を削除することで、開発速度を大幅に向上させることができます。これらすべてのルーチンを開発環境のウォームアップに配置し、スケジュールまたはコミットプッシュで実行できます。ウォームアップの結果、ウォームアップスナップショット (Docker ボリューム) が作成され、開発環境にマウントされます。ウォームアップが定期的に実行されているこ...

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

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

IDE

devfile を使用すると、開発環境で使用する IDE、JVM オプション (IntelliJ ベースの IDE の場合)、およびプロジェクトルートディレクトリを指定できます。デフォルトの IDE を指定する:開発環境では、JetBrains の IDE Fleet、IntelliJ IDEA、WebStorm、PyCharm、RubyMine、CLion、GoLand、PhpStorm、Rider* を使用できます。利用可能な IDE に関する情報を取得するために、Space は JetBrai...

構成名

複数の devfile を含むプロジェクト内の特定の開発環境構成をユーザーが区別できるようにするには、各構成の名前を指定します。名前を指定しない場合、構成には、使用する IDE にちなんで名前が付けられます。名前を指定するには、パラメーターを使用します。schemaVersion: 2.2.0 metadata: name: 'My custom config' attributes: space: editor: type: Idea ユーザーは、新しく作成された開発環境の devfile を選...