第4章 開発者環境のカスタマイズ


Red Hat CodeReady Workspaces は、拡張可能かつカスタマイズ可能な開発者のワークスペースプラットフォームです。

Red Hat CodeReady Workspaces は、以下の 3 つの方法で拡張できます。

  • 代替 IDE は、Red Hat CodeReady Workspaces に特化したツールを提供します。たとえば、データ分析用の Jupyter ノートブックなどです。代替の IDE は、Eclipse Theia またはその他の Web IDE を基にしています。Red Hat CodeReady Workspaces のデフォルト IDE は Che-Theia です。
  • Che-Theia プラグインは各種機能を Che-Theia IDE に追加します。これらは、Visual Studio Code と互換性のあるプラグイン API に依存します。プラグインは IDE 自体から分離されます。それらはファイルとしてパッケージ化されるか、またはコンテナーとしてパッケージ化でき、独自の依存関係を提供できます。
  • Stacks は、異なる開発者の担当者に対応する、専用のツールセットを含む事前に設定された CodeReady Workspaces ワークスペースです。たとえば、該当する目的に必要なツールのみを含むテスター用のワークベンチを事前に設定できます。

図4.1 CodeReady Workspaces の拡張性

ユーザーは、デフォルトで CodeReady Workspaces が提供する self-hosted モードで CodeReady Workspaces を拡張できます。

4.1. Che-Theia プラグインについて

Che-Theia プラグインは、IDE から分離した開発環境の拡張です。プラグインは、ファイルまたはコンテナーとしてパッケージ化され、独自の依存関係を提供できます。

プラグインを使用して Che-Theia を拡張すると、以下の機能を有効にすることができます。

  • 言語サポート: Language Server Protocol に依存してサポートされる言語を拡張します。
  • デバッガー: Debug Adapter Protocol を使用してデバッグ機能を拡張します。
  • 開発ツール: 優先するリンターを、テストおよびパフォーマンスツールとして統合します。
  • メニュー、パネルおよびコマンド: 独自のアイテムを IDEコンポーネントに追加します。
  • テーマ: カスタムテーマの構築、UI の拡張、またはアイコンテーマのカスタマイズを行います。
  • スニペット、フォーマッター、および構文のハイライト: サポートされるプログラミング言語での使いやすさを強化します。
  • キーバインディング: 新規のキーマップと一般的なキーバインディングを追加して、より自然な環境にします。

4.1.1. Che-Theia プラグインの機能と利点

Expand
機能説明利点

高速ロード

プラグインはランタイム時に読み込まれ、すでにコンパイルされた状態になります。IDE はプラグインコードを読み込みます。

コンパイル時間は使用しないでください。インストール後の手順は使用しないでください。

セキュアなロード

プラグインは IDE とは別に読み込まれます。IDE は常に使用可能な状態のままになります。

バグがある場合、プラグインは IDE 全体を中断しません。ネットワークの問題を処理します。

ツールの依存関係

プラグインの依存関係は、独自のコンテナーのプラグインと共にパッケージ化されます。

ツールのインストールは不要です。コンテナーで実行される依存関係。

コードの分離

プラグインが、ファイルを開いたり、入力したりするなどの IDE の主な機能をブロックしないことを保証します。

プラグインは個別のスレッドで実行されます。依存関係の不一致を回避します。

VS Code 拡張機能の互換性

既存の VS Code 拡張機能で IDE の機能を拡張します。

複数のプラットフォームをターゲットにします。必要なインストールでの Visual Studio Code 拡張機能を簡単に検出できます。

4.1.2. Che-Theia プラグインの概念の詳細

Red Hat CodeReady Workspaces はワークスペースのデフォルト Web IDE (Che-Theia) を提供します。Eclipse Theia をベースにしています。これは、Red Hat CodeReady Workspaces ワークスペースの性質に基づいて追加された機能があるため、単純な Eclipse Theia とは若干異なります。CodeReady Workspaces のこのバージョンの Eclipse Theia は Che-Theia と呼ばれています。

Che-Theia プラグイン を構築することで、Red Hat CodeReady Workspaces で提供される IDE を拡張できます。Che-Theia プラグインは、その他の Eclipse Theia ベースの IDE と互換性があります。

4.1.2.1. クライアントサイドおよびサーバーサイドの Che-Theia プラグイン

Che-Theia エディタープラグインを使用すると、開発ワークフローをサポートするために言語、デバッガー、およびツールをインストールに追加できます。エディターの読み込みが完了するとプラグインが実行されます。Che-Theia プラグインが失敗すると、メインの Che-Theia エディターは機能し続けます。

Che-Theia プラグインはクライアントサイドまたはサーバーサイドのいずれかで実行されます。これは、クライアントおよびサーバーサイドのプラグインの概念のスキームです。

図4.2 クライアントおよびサーバー側の Che-Theia プラグイン

同じ Che-Theia プラグイン API がクライアントサイド (Web ワーカー) またはサーバーサイド (Node.js) で実行されるプラグインに公開されます。

4.1.2.2. Che-Theia プラグイン API

Red Hat CodeReady Workspaces でツールの分離と拡張のしやすさを実現する目的で、Che-Theia IDE にはプラグイン API のセットがあります。API は Visual Studio Code 拡張 API と互換性があります。通常、Che-Theia は VS Code 拡張機能を独自のプラグインとして実行できます。

CodeReady Workspaces ワークスペースのコンポーネント (コンテナー、設定、factory) に依存するか、またはこれと対話するプラグインを開発する場合は、Che-Theia に組み込まれた CodeReady Workspaces API を使用します。

4.1.2.3. Che-Theia プラグイン機能

Che-Theia プラグインには以下の機能があります。

Expand
プラグイン説明リポジトリー

CodeReady Workspaces の拡張タスク

CodeReady Workspaces コマンドを処理し、ワークスペースの特定のコンテナーでそれらを起動する機能を提供します。

 

CodeReady Workspaces 拡張ターミナル

ワークスペースのコンテナーのいずれかにターミナルを提供できるようにします。

 

CodeReady Workspaces Factory

Red Hat CodeReady Workspaces Factory を処理します。

 

CodeReady Workspaces コンテナー

ワークスペースで実行されているすべてのコンテナーを表示し、それらとの対話を可能にするコンテナービューを提供します。

コンテナーのプラグイン

ダッシュボード

IDE と Dashboard を統合し、ナビゲーションを容易にします。

 

CodeReady Workspaces API

IDE API を拡張し、CodeReady Workspaces 固有のコンポーネント (ワークスペース、設定) との対話を可能にします。

 

4.1.2.4. VS Code 拡張機能および Eclipse Theia プラグイン

Che-Theia プラグインは、VS Code 拡張機能または Eclipse Theia プラグインをベースとすることができます。

Visual Studio Code 拡張機能
VS Code 拡張機能を独自の依存関係セットを含む Che-Theia プラグインとして再パッケージ化するには、依存関係をコンテナーにパッケージ化します。これにより、エクステンションの使用時に Red Hat CodeReady Workspaces ユーザーが拡張機能の使用時に依存関係をインストールする必要がなくなります。See https://access.redhat.com/documentation/en-us/red_hat_codeready_workspaces/2.4/html-single/administration_guide/index#using-a-visual-studio-code-extension-in-codeready-workspaces_crw.
Eclipse Theia プラグイン
Eclipse Theia プラグインを実装し、Red Hat CodeReady Workspaces にパッケージ化することで、Che-Theia プラグインを構築できます。

4.1.3. Che-Theia プラグインのメタデータ

Che-Theia プラグインメタデータは、プラグインレジストリーの個々のプラグインについての情報です。

それぞれの特定のプラグインの Che-Theia プラグインメタデータは、meta.yaml ファイルに定義されます。

以下は、プラグインメタ YAML ファイルで利用可能なすべてのフィールドの概要です。本書では、プラグインメタ YAML 構造バージョン 3 を示しています。

che-plugin-registry リポジトリー には以下が含まれます。

Expand
表4.1 meta.yml

apiVersion

バージョン 2 以降(バージョン 1 は後方互換性のためにサポートされます)

category

利用可能: カテゴリーは EditorDebuggerFormatterLanguageLinterSnippetThemeOther のいずれかに設定する必要があります。

description

プラグインの目的についての簡単な説明

displayName

ユーザーダッシュボードに表示される名前

Deprecate

オプション: プラグインを他を優先するために非推奨にするためのセクション

* autoMigrate - ブール値

* migrateTo - 新規の org/plugin-id/version (redhat/vscode-apache-camel/latest など)

firstPublicationDate

YAML に存在する必要はありませんが、存在しない場合、これは Plugin Registry dockerimage のビルド時に生成されます。

latestUpdateDate

YAML に存在する必要はありませんが、存在しない場合、これは Plugin Registry dockerimage のビルド時に生成されます。

icon

SVG または PNG アイコンの URL

name

名前 (スペースは使用できません) は [-a-z0-9] と一致する必要があります。

publisher

パブリッシャーの名前は [-a-z0-9] に一致する必要があります

repository

プラグインリポジトリーの URL (例: GitHub)

title

プラグインのタイトル (long)

type

Che Plugin, VS Code extension

version

バージョン情報 (例: 7.5.1、[-.a-z0-9]

spec

仕様 (以下を参照)

Expand
表4.2 spec 属性

endpoints

オプション: プラグインエンドポイント。「エンドポイント」を参照してください。

containers

オプション: プラグインのサイドカーコンテナー。Che プラグインおよび VS Code 拡張機能は 1 つのコンテナーのみをサポートします。

initContainers

オプション: プラグイン用のサイドカーの init コンテナー

workspaceEnv

オプション: ワークスペースの環境変数

extensions

オプション: .vsix や .theia ファイルなど、プラグインのアーティファクトに対して VS Code および Che-Theia プラグインで必要な属性。

Expand
表4.3 spec.containers注: spec.initContainers には同じコンテナー定義が含まれます。

name

サイドカーコンテナー名

image

絶対または相対コンテナーイメージ URL

memoryLimit

OpenShift メモリー制限の文字列 (例: 512Mi

memoryRequest

OpenShift メモリー要求文字列(例: 512Mi)

cpuLimit

OpenShift CPU 制限の文字列(例: 2500m)

cpuRequest

OpenShift CPU 要求の文字列 (例: 125m)

env

サイドカーに設定される環境変数の一覧

command

コンテナー内の root プロセスコマンドの文字列配列の定義

args

コンテナー内の root プロセスコマンドの文字列配列の引数

volumes

プラグインで必要なボリューム

ports

プラグインによって公開されるポート (コンテナー上)

commands

プラグインコンテナーで利用可能な開発コマンド

mountSources

ソースコード /projects のあるボリュームをプラグインコンテナーにバインドするブール値フラグ

initContainers

オプション: サイドカープラグイン用の init コンテナー

Lifecycle

コンテナーライフサイクルフック。lifecycle の説明を参照してください。

Expand
表4.4 spec.containers.env および spec.initContainers.env 属性。注: workspaceEnv は同じ属性を持ちます。

name

環境変数名

value

環境変数の値

Expand
表4.5 spec.containers.volumes および spec.initContainers.volumes 属性

mountPath

コンテナー内のボリュームへのパス

name

ボリューム名

ephemeral

true の場合、ボリュームは一時的になります。そうでない場合、ボリュームは永続化されます。

Expand
表4.6 spec.containers.ports および spec.initContainers.ports 属性

exposedPort

公開されるポート

Expand
表4.7 spec.containers.commands および spec.initContainers.commands 属性

name

コマンド名

workingDir

コマンドの作業ディレクトリー

command

開発コマンドを定義する文字列配列

Expand
表4.8 spec.endpoints 属性

name

名前 (スペースは使用できません) は [-a-z0-9] と一致する必要があります。

public

truefalse

targetPort

ターゲットポート

attributes

エンドポイント属性

Expand
表4.9 spec.endpoints.attributes 属性

protocol

プロトコル (例: ws)

type

ideide-dev

discoverable

truefalse

secure

truefalsetrue の場合、エンドポイントは 127.0.0.1 でのみリッスンすることが想定され、JWT プロキシーを使用して公開されます。

cookiesAuthEnabled

truefalse

Expand
表4.10 spec.containers.lifecycle および spec.initContainers.lifecycle 属性

postStart

コンテナーの起動直後に実行される postStart イベント。postStart および preStop ハンドラーについて参照してください。

* exec: 特定のコマンドを実行します。コマンドが使用するリソースはコンテナーに対してカウントされます。

* command: ["/bin/sh", "-c", "/bin/post-start.sh"]

preStop

コンテナーが終了する前に実行される preStop イベント。postStart および preStop ハンドラーについて参照してください。

* exec: 特定のコマンドを実行します。コマンドが使用するリソースはコンテナーに対してカウントされます。

* command: ["/bin/sh", "-c", "/bin/post-start.sh"]

Che-Theia プラグインの meta.yaml の例: CodeReady Workspaces machine-exec サービス

  apiVersion: v2
  publisher: eclipse
  name: che-machine-exec-plugin
  version: 7.9.2
  type: Che Plugin
  displayName: CodeReady Workspaces machine-exec Service
  title: Che machine-exec Service Plugin
  description: CodeReady Workspaces Plug-in with che-machine-exec service to provide creation terminal
    or tasks for Eclipse CHE workspace containers.
  icon: https://www.eclipse.org/che/images/logo-eclipseche.svg
  repository: https://github.com/eclipse/che-machine-exec/
  firstPublicationDate: "2020-03-18"
  category: Other
  spec:
    endpoints:
     -  name: "che-machine-exec"
        public: true
        targetPort: 4444
        attributes:
          protocol: ws
          type: terminal
          discoverable: false
          secure: true
          cookiesAuthEnabled: true
    containers:
     - name: che-machine-exec
       image: "quay.io/eclipse/che-machine-exec:7.9.2"
       ports:
         - exposedPort: 4444
       command: ['/go/bin/che-machine-exec', '--static', '/cloud-shell', '--url', '127.0.0.1:4444']
Copy to Clipboard Toggle word wrap

VisualStudio コード拡張機能の meta.yaml の例: AsciiDoc サポート拡張機能

apiVersion: v2
category: Language
description: This extension provides a live preview, syntax highlighting and snippets for the AsciiDoc format using Asciidoctor flavor
displayName: AsciiDoc support
firstPublicationDate: "2019-12-02"
icon: https://www.eclipse.org/che/images/logo-eclipseche.svg
name: vscode-asciidoctor
publisher: joaompinto
repository: https://github.com/asciidoctor/asciidoctor-vscode
title: AsciiDoctor Plug-in
type: VS Code extension
version: 2.7.7
spec:
  extensions:
  - https://github.com/asciidoctor/asciidoctor-vscode/releases/download/v2.7.7/asciidoctor-vscode-2.7.7.vsix
Copy to Clipboard Toggle word wrap

4.1.4. Che-Theia プラグインのライフサイクル

ユーザーがワークスペースを起動すると、以下の手順が実行されます。

  1. CodeReady Workspaces マスターは、ワークスペース定義から開始するプラグインをチェックします。
  2. プラグインのメタデータが取得され、各プラグインのタイプが認識されます。
  3. プラグインタイプに応じてブローカーが選択されます。
  4. ブローカーはプラグインのインストールおよびデプロイメントを処理します(インストールプロセスはブローカーごとに異なります)。
注記

異なる種類のプラグインが存在します。ブローカーは、プラグインを正しくデプロイできるように、すべてのインストール要件を満たします。

図4.3 Che-Theia プラグインのライフサイクル

CodeReady Workspaces ワークスペースを起動する前に、CodeReady Workspaces マスターがワークスペースのコンテナーを起動します。

  1. Che-Theia プラグインブローカーは、プラグイン( .theia ファイルから)プラグインを抽出し、プラグインが必要とするサイドカーコンテナーを取得します。
  2. ブローカーは適切なコンテナー情報を CodeReady Workspaces マスターに送信します。
  3. ブローカーは Che-Theia プラグインをボリュームにコピーし、これを Che-Theia エディターコンテナーで利用できるようにします。
  4. CodeReady Workspaces ワークスペースマスターは、ワークスペースのすべてのコンテナーを起動します。
  5. Che-Theia は独自のコンテナーで起動し、プラグインを読み込むために正しいフォルダーを確認します。

Che-Theia プラグインのライフサイクル:

  1. ユーザーが Che-Theia でブラウザータブまたはウィンドウを開くと、Che-Theia は新しいプラグインセッションを起動します(フロントエンドの場合は Web Worker または Node.js の場合は Node.js)。すべての Che-Theia プラグインは、新規セッションが開始されたことを通知されます(プラグインの start() 関数がトリガーされた機能)。
  2. Che-Theia プラグインセッションが実行され、Che-Theia バックエンドおよびフロントエンドと対話している。
  3. ユーザーがブラウザータブを閉じるかタイムアウトが発生すると、すべてのプラグインが通知されます(トリガーされたプラグインの stop() 関数)。

4.1.5. 埋め込み、およびリモートの Che-Theia プラグイン

Red Hat CodeReady Workspaces の開発者ワークスペースは、プロジェクトで作業するために必要なすべての依存関係を提供します。アプリケーションには、使用されるすべてのツールおよびプラグインに必要な依存関係が含まれます。

Che-Theia プラグインは、必要な依存関係に基づいて、埋め込み (またはローカル)と リモート という 2 つの方法で実行できます。

4.1.5.1. 組み込みプラグイン(またはローカル)プラグイン

プラグインには特定の依存関係がなく、Node.js ランタイムのみを使用し、IDE と同じコンテナーで実行されます。プラグインは IDE にインジェクトされます。

例:

  • コードリンティング
  • コマンドの新規セット
  • 新規 UI コンポーネント

Che-Theia プラグインを組み込み追加するには、プラグインバイナリーファイル( .theia アーカイブ)への URL を meta.yaml ファイルに定義します。VS Code 拡張の場合は、Visual Studio Code marketplace からエクステンション ID を提供します(https://access.redhat.com/documentation/en-us/red_hat_codeready_workspaces/2.4/html-single/administration_guide/index#using-a-visual-studio-code-extension-in-codeready-workspaces_crw を 参照)。

ワークスペースを起動すると、CodeReady Workspaces はプラグインバイナリーをダウンロードして展開し、それらを Che-Theia エディターコンテナーに追加します。Che-Theia エディターは、起動時にプラグインを初期化します。

図4.4 ローカルの Che-Theia プラグイン

4.1.5.2. リモートプラグイン

プラグインは依存関係に依存するか、またはバックエンドがあります。これは独自のサイドカーコンテナーで実行され、すべての依存関係はコンテナーにパッケージ化されます。

リモート Che-Theia プラグインは、以下の 2 つの部分で構成されます。

  • Che-Theia プラグインまたは VS Code 拡張機能バイナリー。meta.yaml ファイルの定義は埋め込みプラグインの場合と同じです。
  • コンテナーイメージの定義(例: eclipse/che-theia-dev:nightly)。このイメージから、CodeReady Workspaces はワークスペース内に別のコンテナーを作成します。

例:

  • Java Language Server
  • Python Language Server

ワークスペースを起動すると、CodeReady Workspaces はプラグインイメージからコンテナーを作成し、プラグインバイナリーをダウンロードして展開し、それらを作成されたコンテナーに追加します。Che-Theia エディターは起動時にリモートプラグインに接続します。

図4.5 リモート Che-Theia プラグイン

4.1.5.3. 比較マトリックス

Che-Theia プラグイン(または VS Code 拡張)がコンテナー内で追加の依存関係を必要としない場合、これは組み込みプラグインです。プラグインが含まれる追加の依存関係を持つコンテナーは、リモートプラグインです。

Expand
表4.11 Che-Theia プラグイン比較マトリックス: 組み込み vs. リモート
 プラグインごとに RAM を設定環境の依存関係分離されたコンテナーの作成

リモート

TRUE

プラグインは、リモートコンテナーで定義された依存関係を使用します。

TRUE

組み込み

FALSE (ユーザーはエディターコンテナー全体に対して RAM を設定できますが、プラグインごとに設定できません)

プラグインはエディターコンテナーから依存関係を使用します。コンテナーにこれらの依存関係が含まれない場合は、プラグインは失敗するか、または予想通りに機能しません。

FALSE

ユースケースおよびプラグインが提供する機能に応じて、上記の実行モードのいずれかを選択します。

4.1.6. リモートプラグインエンドポイント

Red Hat CodeReady Workspaces には、別のコンテナーで VS Code 拡張機能および Che-Theia プラグインを起動するためのリモートプラグインのエンドポイントサービスがあります。Red Hat CodeReady Workspaces は、リモートプラグインのエンドポイントのバイナリーを各リモートプラグインコンテナーに挿入します。このサービスは、プラグインの meta.yaml ファイルで定義されるリモート拡張機能とプラグインを起動し、それらを Che-Theia エディターコンテナーに接続します。

リモートプラグインのエンドポイントは、リモートプラグインコンテナーと Che-Theia エディターコンテナーとの間でプラグインの API プロキシーを作成します。リモートプラグインのエンドポイントは、一部のプラグインの API の部分のインターセプターにもなります。これは、エディターコンテナーではなくリモートサイドカーコンテナー内で起動します。例: ターミナル API、デバッグ API

リモートプラグインのエンドポイントの実行可能コマンドは、リモートプラグインコンテナーの環境変数 PLUGIN_REMOTE_ENDPOINT_EXECUTABLE に保存されます。

Red Hat CodeReady Workspaces は、サイドカーイメージを使用してリモートプラグインのエンドポイントを起動する 2 つの方法を提供します。

  • Dockerfile を使用した起動リモートプラグインのエンドポイントの定義。この方法を使用するには、元のイメージにパッチを適用して再度ビルドします。
  • プラグイン meta.yaml ファイルで、起動リモートプラグインのエンドポイントを定義します。元のイメージへのパッチの適用を回避するには、この方法を使用します。

4.1.6.1. Dockerfile を使用した起動リモートプラグインのエンドポイントの定義

リモートプラグインエンドポイントを起動するには、Dockerfile で PLUGIN_REMOTE_ENDPOINT_EXECUTABLE 環境変数を使用します。

手順

  • Dockerfile で CMD コマンドを使用して、リモートプラグインのエンドポイントを起動します。

    Dockerfile の例

    FROM fedora:30
    
    RUN dnf update -y && dnf install -y nodejs htop && node -v
    
    RUN mkdir /home/jboss
    
    ENV HOME=/home/jboss
    
    RUN mkdir /projects \
        && chmod -R g+rwX /projects \
        && chmod -R g+rwX "${HOME}"
    
    CMD ${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE}
    Copy to Clipboard Toggle word wrap

  • Dockerfile で ENTRYPOINT コマンドを使用して、リモートプラグインのエンドポイントを起動します。

    Dockerfile の例

    FROM fedora:30
    
    RUN dnf update -y && dnf install -y nodejs htop && node -v
    
    RUN mkdir /home/jboss
    
    ENV HOME=/home/jboss
    
    RUN mkdir /projects \
        && chmod -R g+rwX /projects \
        && chmod -R g+rwX "${HOME}"
    
    ENTRYPOINT ${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE}
    Copy to Clipboard Toggle word wrap

4.1.6.1.1. ラッパースクリプトの使用

一部のイメージはラッパースクリプトを使用してパーミッションを設定します。スクリプトは、Dockerfile の ENTRYPOINT コマンドで定義され、コンテナー内でパーミッションを設定します。スクリプトスクリプトは、Dockerfile の CMD コマンドで定義されているメインプロセスを実行します。

Red Hat CodeReady Workspaces は、ラッパースクリプトでこのようなイメージを使用して、OpenShift などで、高度なセキュリティーで異なるインフラストラクチャーのパーミッション設定を提供します。

  • ラッパースクリプトの例:

    #!/bin/sh
    
    set -e
    
    export USER_ID=$(id -u)
    export GROUP_ID=$(id -g)
    
    if ! whoami >/dev/null 2>&1; then
        echo "${USER_NAME:-user}:x:${USER_ID}:0:${USER_NAME:-user} user:${HOME}:/bin/sh" >> /etc/passwd
    fi
    
    # Grant access to projects volume in case of non root user with sudo rights
    if [ "${USER_ID}" -ne 0 ] && command -v sudo >/dev/null 2>&1 && sudo -n true > /dev/null 2>&1; then
        sudo chown "${USER_ID}:${GROUP_ID}" /projects
    fi
    
    exec "$@"
    Copy to Clipboard Toggle word wrap
  • ラッパースクリプトを含む Dockerfile の例:

    Dockerfile の例

    FROM alpine:3.10.2
    
    ENV HOME=/home/theia
    
    RUN mkdir /projects ${HOME} && \
        # Change permissions to let any arbitrary user
        for f in "${HOME}" "/etc/passwd" "/projects"; do \
          echo "Changing permissions on ${f}" && chgrp -R 0 ${f} && \
          chmod -R g+rwX ${f}; \
        done
    
    ADD entrypoint.sh /entrypoint.sh
    
    ENTRYPOINT [ "/entrypoint.sh" ]
    CMD ${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE}
    Copy to Clipboard Toggle word wrap

    この例では、コンテナーは Dockerfile の ENTRYPOINT コマンドで定義された /entrypoint.sh スクリプトを起動します。このスクリプトはパーミッションを設定し、exec $@ を使用してコマンドを実行します。CMDENTRYPOINT の引数であり、exec $@ コマンドは ${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE} を呼び出します。次に、リモートプラグインエンドポイントは、パーミッションの設定後にコンテナーで起動します。

4.1.6.2. meta.yaml ファイルでの起動リモートプラグインのエンドポイントの定義

この方法を使用して、変更なしにプラグインエンドポイントをリモート起動するためにイメージを再利用します。

手順

プラグインの meta.yaml ファイルプロパティー command および args を変更します。

  • command - Red Hat CodeReady Workspaces は、Dockerfile#ENTRYPOINT を上書きするのに使用します。
  • args - Red Hat CodeReady Workspaces は、Dockerfile#CMD を上書きするのに使用します。
  • command および args プロパティーが変更された YAML ファイルの例:

    apiVersion: v2
    category: Language
    description: "Typescript language features"
    displayName: Typescript
    firstPublicationDate: "2019-10-28"
    icon: "https://www.eclipse.org/che/images/logo-eclipseche.svg"
    name: typescript
    publisher: che-incubator
    repository: "https://github.com/Microsoft/vscode"
    title: "Typescript language features"
    type: "VS Code extension"
    version: remote-bin-with-override-entrypoint
    spec:
      containers:
        - image: "example/fedora-for-ts-remote-plugin-without-endpoint:latest"
          memoryLimit: 512Mi
          name: vscode-typescript
          command:
            - sh
            - -c
          args:
            - ${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE}
      extensions:
        - "https://github.com/che-incubator/ms-code.typescript/releases/download/v1.35.1/che-typescript-language-1.35.1.vsix"
    Copy to Clipboard Toggle word wrap
  • ラッパースクリプトのパターンでイメージを使用し、entrypoint.sh スクリプトの呼び出しを保持するには、command ではなく args を変更します。

    apiVersion: v2
    category: Language
    description: "Typescript language features"
    displayName: Typescript
    firstPublicationDate: "2019-10-28"
    icon: "https://www.eclipse.org/che/images/logo-eclipseche.svg"
    name: typescript
    publisher: che-incubator
    repository: "https://github.com/Microsoft/vscode"
    title: "Typescript language features"
    type: "VS Code extension"
    version: remote-bin-with-override-entrypoint
    spec:
      containers:
        - image: "example/fedora-for-ts-remote-plugin-without-endpoint:latest"
          memoryLimit: 512Mi
          name: vscode-typescript
          args:
            - sh
            - -c
            - ${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE}
      extensions:
        - "https://github.com/che-incubator/ms-code.typescript/releases/download/v1.35.1/che-typescript-language-1.35.1.vsix"
    Copy to Clipboard Toggle word wrap

    Red Hat CodeReady Workspaces は、Dockerfile の ENTRYPOINT コマンドで定義された entrypoint.sh ラッパースクリプトを呼び出します。このスクリプトは、exec “$@” コマンドを使用して [ ‘sh’, ‘-c”, ‘ ${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE}’ ] を実行します。

注記

コンテナーの起動時にサービスを実行してリモートプラグインエンドポイントを開始する場合は、変更した command および args プロパティーで meta.yaml を使用します。サービスを起動し、プロセスの割り当てを解除し、リモートプラグインエンドポイントを開始してから並行して動作します。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat