2019年8月7日水曜日

Eclipse Che に java12 のスタックを追加する

この「スタック一覧」に「Java12 Gradle」が欲しいわけです。

前提

スタック用のコンテナを作成

che7 の場合、「ランタイム用」と言うのが正確っぽいのだけど、「SELECT STACK」って書いてあるし、とりあえずスタックと呼んでおく。

eclipse/stack-base:debian をベースイメージとして、環境を組み立てていく。

Docker イメージは Docker Hub の eclipse/stack-base で公開されている。

スタック用の Docker コンテナを作成

バイナリをダウンロードして展開、パス追加を行う。

Dockerfile:

FROM eclipse/stack-base:debian

LABEL maintainer "mikoto2000 <mikoto2000@gmail.com>"
LABEL version "1.0.0"
LABEL description "OpenJDK: 12.0.2, Gradle: 5.5.1"

USER root

RUN wget -q https://download.java.net/java/GA/jdk12.0.2/e482c34c86bd4bf8b56c0b35558996b9/10/GPL/openjdk-12.0.2_linux-x64_bin.tar.gz \
    && tar xf openjdk-12.0.2_linux-x64_bin.tar.gz -C /opt \
    && rm openjdk-12.0.2_linux-x64_bin.tar.gz \
    && wget -q https://services.gradle.org/distributions/gradle-5.5.1-bin.zip \
    && unzip gradle-5.5.1-bin.zip -d /opt \
    && rm gradle-5.5.1-bin.zip

USER user

ENV JAVA_HOME /opt/jdk-12.0.2
ENV PATH $JAVA_HOME/bin:/opt/gradle-5.5.1/bin:$PATH

これを使ってビルド。

docker build -t mikoto2000/che-stack_java12-gradle5:latest .

コンテナレジストリに登録

Docker Hub に push。

docker push mikoto2000/che-stack_java12-gradle5:latest

自作スタックを登録した che-devfile-registry を作成

che-server は、「どんなスタックがあるか・つかえるか」を、 che-devfile-registry に問い合わせ、 その結果を前述の「SELECT STACK」の一覧に表示している。

なので、自作プラグインを登録した che-devfile-registry を作成する必要がある。

この章で che-devfile-registry を作っていく。

eclipse/che-devfile-registry をクローン

clone して checkout。

cd ~/project
git clone https://github.com/eclipse/che-devfile-registry.git
cd che-devfile-registry
$CHE_DEVFILE_REGISTRY_SOURCE=$(pwd)

スタック情報を追加

スタック情報を記述した meta.yaml, devfile.yaml を作成・追加する。

ディレクトリ $CHE_DEVFILE_REGISTRY_SOURCE/devfiles/java12-gradle5/ に、 ファイル meta.yamldevfile.yaml を作成する。

java-gradle を参考に書き換え書き換えしていった。

meta.yaml:

---
displayName: Java12 Gradle5
description: Java Stack with OpenJDK 12 and Gradle 5.5.1
tags: ["Java", "OpenJDK", "Gradle", "Debian"]
icon: https://www.eclipse.org/che/images/logo-eclipseche.svg
globalMemoryLimit: 2674Mi

devfile.yaml

---
apiVersion: 1.0.0
metadata:
  name: java12-gradle5
projects:
  - name: console-java-simple
    source:
      type: git
      location: "https://github.com/che-samples/console-java-simple.git"
components:
  - type: chePlugin
    id: mikoto2000/java12/latest
  - type: dockerimage
    alias: gradle
    image: mikoto2000/che-stack_java12-gradle5:latest
    env:
      - name: GRADLE_USER_HOME
        value: /home/user/.gradle
      - name: JAVA_OPTS
        value: "-XX:MaxRAMPercentage=50 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10
          -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90
          -Dsun.zip.disableMemoryMapping=true -Xms20m -Djava.security.egd=file:/dev/./urandom"
      - name: JAVA_TOOL_OPTIONS
        value: "-XX:MaxRAMPercentage=50 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10
          -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90
          -Dsun.zip.disableMemoryMapping=true -Xms20m -Djava.security.egd=file:/dev/./urandom"
      - name: HOME
        value: /home/user
    memoryLimit: 512Mi
    volumes:
      - name: gradle
        containerPath: /home/gradle/.gradle
    mountSources: true

che-devfile-registry のコンテナを作成

cd $CHE_DEVFILE_REGISTRY_SOURCE
docker build -t mikoto2000/che-devfile-registry:latest -f ./build/dockerfiles/Dockerfile --target registry .

コンテナレジストリに登録

docker push mikoto2000/che-devfile-registry:latest

che の設定とデプロイ

che-server が、先ほど作った che-devfile-registry に問い合わせを投げるように設定して、デプロイしなおす。

$CHE_SOURCE/deploy/kubernetes/helm/che/custom-charts/che-devfile-registry/values.yaml を修正

che-devfile-registry/values.yamlcheDevfileRegistry で、 先ほど作った mikoto2000/che-devfile-registry を使用するように修正。

before:

cheDevfileRegistry:
  image: quay.io/eclipse/che-devfile-registry:nightly
  imagePullPolicy: Always
  memoryLimit: 32Mi
  memoryRequests: 16Mi

after:

cheDevfileRegistry:
  image: mikoto2000/che-devfile-registry:latest
  imagePullPolicy: Always
  memoryLimit: 32Mi
  memoryRequests: 16Mi

これで、 che を再デプロイした時に、改造した che-devfile-registry が使われる。

che の再デプロイ

helm upgrade の使い方がわからないので、いったん削除してからデプロイしなおす。

cd $CHE_SOURCE/deploy/kubernetes/helm/che
helm delete --purge che
helm repo update
helm dependency update
helm upgrade --install che --namespace che --set cheImage=eclipse/che-server:7.0.0-rc-4.0 --set global.cheWorkspacesNamespace="che" --set global.ingressDomain=${CHE_DOMAIN}.nip.io ./

これで、 http://che-che.${CHE_DOMAIN}.nip.io/ にアクセスすると、改造した che-devfile-registry を使用する che にアクセスできる。

スタックが追加されていることを確認

最初と同じようにワークスペースの作成画面に行くと、 SELECT STACK の一覧の中に Java12 Gradle5 が追加されていることがわかる。

参考資料

更新履歴

日付 更新内容
2019/8/07 新規作成
2020/6/10 docker build のコマンド間違いを修正

0 件のコメント:

コメントを投稿