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

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

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

  • 代替 IDE は、Red Hat CodeReady Workspaces に特化したツールを提供します。たとえば、データ分析用の Jupyter ノートブックなどです。代替 IDE は Eclipse Theia またはその他の IDE(Web またはデスクトップベース) をベースに使用できます。Red Hat CodeReady Workspaces のデフォルト IDE は Che-Theia です。
  • Che-Theia プラグインは各種機能を Che-Theia IDE に追加します。これらは、Visual Studio Code と互換性のあるプラグイン API に依存します。プラグインは IDE 自体から分離されます。それらはファイルとしてパッケージ化されるか、またはコンテナーとしてパッケージ化でき、独自の依存関係を提供できます。

  • Stacks は、異なる開発者の担当者に対応する、専用のツールセットを含む事前に設定された CodeReady Workspaces ワークスペースです。たとえば、該当する目的に必要なツールのみを含むテスター用のワークベンチを事前に設定できます。

図5.1 CodeReady Workspaces の拡張性

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

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

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

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

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

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

機能詳細利点

高速ロード

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

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

セキュアなロード

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

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

ツールの依存関係

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

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

コードの分離

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

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

VS Code 拡張機能の互換性

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

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

5.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 と互換性があります。

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

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

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

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

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

5.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 を使用します。

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

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

プラグイン詳細リポジトリー

CodeReady Workspaces の拡張タスク

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

タスクプラグイン

CodeReady Workspaces 拡張ターミナル

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

拡張ターミナルの拡張機能

CodeReady Workspaces Factory

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

ワークスペースプラグイン

CodeReady Workspaces コンテナー

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

コンテナープラグイン

ダッシュボード

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

Che-Theia Dashbord 拡張機能

CodeReady Workspaces API

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

Che-Theia API 拡張

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

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

Visual Studio Code 拡張機能
VS Code 拡張機能を独自の依存関係セットを含む Che-Theia プラグインとして再パッケージ化するには、依存関係をコンテナーにパッケージ化します。これにより、エクステンションの使用時に Red Hat CodeReady Workspaces ユーザーが拡張機能の使用時に依存関係をインストールする必要がなくなります。「VS Code 拡張機能のワークスペースへの追加」を参照してください。
Eclipse Theia プラグイン
Eclipse Theia プラグインを実装し、Red Hat CodeReady Workspaces にパッケージ化することで、Che-Theia プラグインを構築できます。

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

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

それぞれの特定のプラグインの Che-Theia プラグインメタデータは、meta.yaml ファイルに定義されます。これらのファイルは devfile で参照し、ワークスペースに Che-Theia プラグインを含めることができます。

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

表5.1 meta.yml

apiVersion

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

category

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

description

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

displayName

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

deprecate

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

* autoMigrate - ブール値

* migrateTo - 新しい org/plugin-id/version(例: redhat/vscode-apache-camel/latest

firstPublicationDate

YAML には不要です。これが含まれない場合には、プラグインレジストリー dockerimage ビルドがこれを生成します。

latestUpdateDate

YAML には不要です。これが含まれない場合には、プラグインレジストリー dockerimage ビルドがこれを生成します。

icon

SVG または PNG アイコンの URL

name

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

publisher

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

repository

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

title

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

type

Che PluginVS Code extension

バージョン

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

spec

仕様 (以下を参照)

表5.2 spec 属性

endpoint

オプション: プラグインエンドポイント

containers

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

initContainers

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

workspaceEnv

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

extensions

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

表5.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

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

ポート

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

commands

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

mountSources

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

initContainers

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

ライフサイクル

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

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

name

環境変数名

value

環境変数の値

表5.5 spec.containers.volumes および spec.initContainers.volumes 属性

mountPath

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

name

ボリューム名

ephemeral

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

表5.6 spec.containers.ports および spec.initContainers.ports 属性

exposedPort

公開されるポート

表5.7 spec.containers.commands および spec.initContainers.commands 属性

name

コマンド名

workingDir

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

command

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

表5.8 spec.endpoints 属性

name

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

public

true, false

targetPort

ターゲットポート

attributes

エンドポイント属性

表5.9 spec.endpoints.attributes 属性

protocol

プロトコル (例: ws)

type

ide, ide-dev

discoverable

true, false

secure

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

cookiesAuthEnabled

true, false

requireSubdomain

truefalse.true の場合、エンドポイントは単一ホストモードでサブドメインで公開されます。

表5.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/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']

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

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

ユーザーが Che ワークスペースを起動するたびに、Che-Theia プラグインライフサイクルプロセスが開始します。このプロセスの手順は以下のとおりです。

  1. CodeReady Workspaces サーバーは、プラグインがワークスペース定義から起動するかどうかを確認します。
  2. CodeReady Workspaces サーバーはプラグインメタデータを取得し、各プラグインタイプを認識し、それらをメモリーに保存します。
  3. CodeReady Workspaces サーバーは、プラグインタイプに応じてブローカーを選択します。
  4. ブローカーはプラグインのインストールおよびデプロイメントを処理します。プラグインのインストールプロセスは、特定のブローカーごとに異なります。
注記

プラグインはさまざまなタイプで使用できます。ブローカーは、すべてのインストール要件を満たすことで、プラグインのデプロイメントを正常に実行します。

図5.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 (バックエンド)
  2. Che-Theia は、トリガーされたそれぞれのプラグインの start() 関数を呼び出して、すべての Che-Theia プラグインに対して新規セッションの開始を通知します。
  3. Che-Theia プラグインセッションが実行され、Che-Theia バックエンドおよびフロントエンドと対話します。
  4. ユーザーが Che-Theia ブラウザータブを閉じるか、またはセッションがタイムアウトの制限で終了すると、Che-Theia はすべてのプラグインに対して、トリガーされたそれぞれのプラグインの stop() 関数で通知します。

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

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

必要な依存関係に基づいて、Che-Theia プラグインは以下のように実行できます。

  • 埋め込み (ローカル)
  • リモート

5.1.5.1. 埋め込み (ローカル) プラグイン

埋め込みプラグインは、Che-Theia IDE に挿入される特定の依存関係のないプラグインです。これらのプラグインは IDE コンテナーで実行される Node.js ランタイムを使用します。

例:

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

Che-Theia プラグインまたは VS Code 拡張を含めるには、meta.yaml ファイルでプラグインの .theia アーカイブバイナリーへの URL を定義します。「VS Code 拡張機能のワークスペースへの追加」を参照してください。

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

5.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 エディターは起動時にリモートプラグインに接続します。

5.1.5.3. 比較マトリックス

  • 埋め込みプラグインは、コンテナー内で追加の依存関係を必要としない Che-Theia プラグインまたは VS Code 拡張機能です。
  • リモートプラグインは、必要なすべての依存関係を持つプラグインが含まれるコンテナーです。

表5.11 Che-Theia プラグイン比較マトリックス: 組み込み vs. リモート

 プラグインごとに RAM を設定環境の依存関係分離されたコンテナーの作成

リモート

TRUE

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

TRUE

組み込み

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

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

FALSE

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

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

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

リモートプラグインエンドポイントを起動するには、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}

  • 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}

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

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

CodeReady Workspaces はラッパースクリプトと共にイメージを使用し、高度なセキュリティーで保護される複数の異なるインフラストラクチャーに対するパーミッション設定を行います。OpenShift Container Platform はこのようなインフラストラクチャーの一例です。

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

    #!/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 "$@"
  • ラッパースクリプトを含む 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}

    説明:

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

5.1.6.2. meta.yaml ファイルで、launch リモートプラグインのエンドポイントを定義します。

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

手順

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

  • Command - CodeReady Workspaces は、command プロパティーを使用して Dockerfile#ENTRYPOINT の値を上書きします。
  • args - CodeReady Workspaces は args プロパティーを使用して 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"
  • ラッパースクリプトのパターンでイメージを使用し、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"

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

注記

meta.yaml ファイルの command および args プロパティーを変更することにより、ユーザーは以下を実行できます。

  • コンテナー起動時のサービスの実行
  • リモートプラグインのエンドポイントの開始

これらのアクションを同時に実行するには、以下を実行します。

  1. サービスを起動します。
  2. プロセスの割り当てを解除します。
  3. リモートプラグインエンドポイントを起動します。