第6章 制限された環境でのアーティファクトリポジトリーの使用
本セクションでは、自己署名証明書を使用して、インハウスリポジトリーのアーティファクトと連携するようにさまざまなテクノロジースタックを手動で設定する方法を説明します。
6.1. Maven アーティファクトリポジトリーの使用 リンクのコピーリンクがクリップボードにコピーされました!
Maven は 2 つの場所に定義されたアーティファクトをダウンロードします。
-
プロジェクトの
pom.xmlファイルで定義されるアーティファクトリポジトリー。pom.xmlでのリポジトリーの設定は Red Hat CodeReady Workspaces に固有のものではありません。詳細は、POM に関する Maven のドキュメントを参照し てください。 -
settings.xmlファイルで定義されるアーティファクトリポジトリー。デフォルトでは、settings.xmlは'~/.m2/settings.xml" にあります。
6.1.1. settings.xmlでのリポジトリーの定義 リンクのコピーリンクがクリップボードにコピーされました!
example.server.org で独自のアーティファクトリポジトリーを指定するには、settings.xml ファイルを使用します。これには、settings.xml が Maven ツールを使用するすべてのコンテナー(特に Maven コンテナーおよび Java プラグインコンテナー)にあることを確認します。
デフォルトでは、settings.xml は Maven プラグインコンテナーの永続ボリューム上にある <home dir>/.m2 ディレクトリーにあり、一時モードにない場合はワークスペースを再起動するたびにファイルを再作成する必要はありません。
Maven ツールを使用する別のコンテナーがあり、このコンテナーと <home dir>/.m2 フォルダーを共有する場合は、devfile でこの特定のコンポーネントのカスタムボリュームを指定する必要があります。
apiVersion: 1.0.0
metadata:
name: MyDevfile
components:
- type: chePlugin
alias: maven-tool
id: plugin/id
volumes:
- name: m2
containerPath: <home dir>/.m2
手順
example.serverします。.org でアーティファクトリポジトリーを使用するように settings.xml ファイルを設定<settings> <profiles> <profile> <id>my-nexus</id> <pluginRepositories> <pluginRepository> <id>my-nexus-snapshots</id> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> <url>http://example.server.org/repository/maven-snapshots/</url> </pluginRepository> <pluginRepository> <id>my-nexus-releases</id> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> <url>http://example.server.org/repository/maven-releases/</url> </pluginRepository> </pluginRepositories> <repositories> <repository> <id>my-nexus-snapshots</id> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> <url>http://example.server.org/repository/maven-snapshots/</url> </repository> <repository> <id>my-nexus-releases</id> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> <url>http://example.server.org/repository/maven-releases/</url> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>my-nexus</activeProfile> </activeProfiles> </settings>
6.1.2. ワークスペース全体にまたがる Maven settings.xml ファイルの定義 リンクのコピーリンクがクリップボードにコピーされました!
すべてのワークスペースで独自の settings.xml ファイルを使用するには、ワークスペースと同じプロジェクトに Secret オブジェクト(希望の名前)を作成します。必要な settings.xml の内容を Secret の data セクションに配置します(同じディレクトリーに存在する必要のある他のファイルとともに該当する可能性があります)。ファイルまたは環境変数をワークスペースコンテナーにマウントすることで、シークレットのラベル付けおよびこのシークレットにアノテーションを付けます。これにより、Secret の内容がワークス ペース Pod にマウントされるようにします。この Secret を使用するには、以前に実行したワークスペースを再起動する必要があります。
前提条件
これは、プライベート認証情報を Maven リポジトリーに設定するために必要です。詳細は、Maven ドキュメント Settings.xml#Servers を参照してください。
この settings.xml をマウントするには、以下を実行します。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>repository-id</id>
<username>username</username>
<password>password123</password>
</server>
</servers>
</settings>
手順
settings.xmlを base64 に変換します。$ cat settings.xml | base64必要なアノテーションおよびラベルも定義する新規ファイル
secret.yamlに出力をコピーします。apiVersion: v1 kind: Secret metadata: name: maven-settings-secret labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspace-secret annotations: che.eclipse.org/automount-workspace-secret: true che.eclipse.org/mount-path: /home/user/.m2 che.eclipse.org/mount-as: file type: Opaque data: settings.xml: PHNldHRpbmdzIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMCIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1NFVFRJTkdTLzEuMC4wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2Qvc2V0dGluZ3MtMS4wLjAueHNkIj4KICA8c2VydmVycz4KICAgIDxzZXJ2ZXI+CiAgICAgIDxpZD5yZXBvc2l0b3J5LWlkPC9pZD4KICAgICAgPHVzZXJuYW1lPnVzZXJuYW1lPC91c2VybmFtZT4KICAgICAgPHBhc3N3b3JkPnBhc3N3b3JkMTIzPC9wYXNzd29yZD4KICAgIDwvc2VydmVyPgogIDwvc2VydmVycz4KPC9zZXR0aW5ncz4Kこのシークレットをクラスターに作成します。
$ oc apply -f secret.yaml-
新しいワークスペースを開始します。Maven コンテナーには、元のコンテンツと共に
/home/user/.m2/settings.xmlが表示されます。
6.1.2.1. OpenShift 3.11 および OpenShift <1.13 リンクのコピーリンクがクリップボードにコピーされました!
1.13 よりも古いバージョンの OpenShift では、複数の VolumeMounts が同じパスに配置することができません。したがって、devfile のボリューム /home/user/.m2 および /home/user/.m2/settings.xml でシークレットを設定すると競合に解決されます。これらのクラスターでは、devfile の Maven リポジトリーのボリュームとして /home/user/.m2/repository を使用します。
apiVersion: 1.0.0
metadata:
...
components:
- type: dockerimage
alias: maven
image: maven:3.11
volumes:
- name: m2
containerPath: /home/user/.m2/repository
...
6.1.3. Java プロジェクトでの自己署名証明書の使用 リンクのコピーリンクがクリップボードにコピーされました!
内部アーティファクトリポジトリーには、Java ではデフォルトで信頼される認証局によって署名された証明書がありません。通常は、内部企業の認証局によって署名されるか、自己署名されます。Java トラストストアに追加して、これらの証明書を受け入れるツールを設定します。
手順
リポジトリーサーバーからサーバー証明書ファイルを取得します。多くの場合、これは
tls.crtという名前のファイルです。Java トラストストアファイルを作成します。
$ keytool -import -file tls.crt -alias nexus -keystore truststore.jks -storepass changeit Trust this certificate? [no]: yes Certificate was added to keystore Owner: CN=example.com Issuer: CN=example.com Serial number: 80ca0f6980c6019a Valid from: Thu Feb 06 11:00:29 CET 2020 until: Fri Feb 05 11:00:29 CET 2021 Certificate fingerprints: MD5: 88:3C:EC:E1:BE:57:DD:9D:46:36:8E:DD:BF:14:04:22 SHA1: 08:D8:79:D3:F8:6B:5C:3D:71:AA:23:CA:72:01:47:BD:9D:91:0A:AD SHA256: 5C:BB:66:81:44:D2:50:EE:EB:CE:D6:15:7E:63:E1:9A:71:EA:58:3F:14:01:15:4E:68:5D:71:0A:A0:31:33:29 Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 4096-bit RSA key Version: 3 Extensions: #1: ObjectId: 2.5.29.17 Criticality=false SubjectAlternativeName [ DNSName: *.apps.example.com ] Trust this certificate? [no]: yes Certificate was added to keystore-
/projects/maven/truststore.jksにトラストストアファイルをアップロードして、すべてのコンテナーで利用できるようにします。
トラストストアファイルを追加します。
Maven コンテナーで以下を行います。
javax.net.sslシステムプロパティーをMAVEN_OPTS環境変数に追加します。- mountSources: true alias: maven type: dockerimage ... env: -name: MAVEN_OPTS value: >- -Duser.home=/projects/maven -Djavax.net.ssl.trustStore=/projects/truststore.jks- ワークスペースを再起動します。
Java プラグインコンテナーで以下を行います。
devfile に、Java 言語サーバーの
javax.net.sslシステムプロパティーを追加します。components: - id: redhat/java11/latest type: chePlugin preferences: java.jdt.ls.vmargs: >- -noverify -Xmx1G -XX:+UseG1GC -XX:+UseStringDeduplication -Duser.home=/projects/maven -Djavax.net.ssl.trustStore=/projects/truststore.jks [...]