ビルド環境 build-environment
Cloud Manager ユーザーがコードを作成およびテストするための専用のビルド環境について説明します。
環境の詳細 details
Cloud Managerのビルド環境には、次の属性があります。
-
ビルド環境は Linux ベースで、Ubuntu 22.04 から派生しています。
-
Apache Maven 3.9.4 がインストールされています。
- Adobeでは、Maven リポジトリを更新して、HTTP ではなく HTTPS を使用することをお勧めします。
-
インストールされる Java バージョンは Oracle JDK 8u401 と Oracle JDK 11.0.22 です。
/usr/lib/jvm/jdk1.8.0_401
/usr/lib/jvm/jdk-11.0.22
-
デフォルトでは、
JAVA_HOME
環境変数は/usr/lib/jvm/jdk1.8.0_401
に設定されています。これには、OracleJDK 8u401 が含まれています。 詳しくは、Maven 実行の代替 JDK バージョンの節を参照してください。 -
必要に応じてインストールされる追加のシステムパッケージが、次のようにいくつかあります。
bzip2
unzip
libpng
imagemagick
graphicsmagick
-
追加のシステムパッケージのインストールの節で説明されているように、ビルド時にその他のパッケージがインストールされる場合があります。
-
すべてのビルドは、初期状態の環境で実行されます。 ビルドコンテナは、実行から次回の実行までの間、状態を保持しません。
-
Maven は常に次の 3 つのコマンドで実行します。
mvn --batch-mode org.apache.maven.plugins:maven-dependency-plugin:3.1.2:resolve-plugins
mvn --batch-mode org.apache.maven.plugins:maven-clean-plugin:3.1.0:clean -Dmaven.clean.failOnError=false
mvn --batch-mode org.jacoco:jacoco-maven-plugin:prepare-agent package
-
Maven は、
settings.xml
ファイルを使用してシステムレベルで設定されます。このファイルには、adobe-public
というプロファイルを使用したアドビの公開アーティファクトリポジトリが自動的に含まれています詳しくは、Adobeの公開 Maven リポジトリを参照してください。 -
Node.js 18 は、 フロントエンドパイプラインで使用できます。
jacoco-maven-plugin
の特定のバージョンは定義されませんが、使用するバージョンは 0.7.5.201505241946
以上である必要があります。HTTPS Maven リポジトリ https-maven
Cloud Manager 2023.10.0 では、ビルド環境のローリングアップデート(2023.12.0 リリースで完了)を開始し、Maven 3.8.8 へのアップデートを含めました。Maven 3.8.1 で導入された重要な変更は、潜在的な脆弱性を軽減するためのセキュリティの強化でした。 特に、Maven リリースノートに記載されているように、Maven は保護されていないすべての http://*
ミラーをデフォルトで無効にするようになりました。
このセキュリティ強化の結果、一部のユーザーには、ビルド手順で、特に安全でない HTTP 接続を使用する Maven リポジトリからアーティファクトをダウンロードする際に問題が発生する場合があります。
アップデートされたバージョンでスムーズなエクスペリエンスを実現するために、アドビでは、ユーザーが Mavenリポジトリを更新して HTTP ではなく HTTPS を使用することをお勧めします。この調整は、業界でセキュアな通信プロトコルへの移行が進むのに合わせて行われ、安全で信頼性の高いビルドプロセスを維持するのに役立ちます。
特定の Java バージョンの使用 using-java-version
Cloud Manager ビルドプロセスでビルドされたプロジェクトでは、デフォルトでOracle 8 JDK が使用されます。 代替 JDK を使用する場合は、次の 2 つの選択肢があります。
Maven ツールチェーン maven-toolchains
Maven ツールチェーンプラグインを使用すると、プロジェクトは、ツールチェーン対応の Maven プラグインのコンテキストで使用する特定の JDK (またはツールチェーン)を選択できます。 この処理は、プロジェクトの pom.xml
ファイルでベンダーとバージョン値を指定することによって行われます。 pom.xml
ファイルのサンプルセクションは次のとおりです。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>11</version>
<vendor>oracle</vendor>
</jdk>
</toolchains>
</configuration>
</plugin>
このプロセスにより、すべてのツールチェーン対応 Maven プラグインでOracle JDK バージョン 11 が使用されます。
この方法を使用する場合、Maven 自体は引き続きデフォルト JDK(Oracle 8)を使用して実行され、JAVA_HOME
環境変数は変更されません。したがって、Apache Maven Enforcer Plug-in などのプラグインによる Java バージョンの確認や強制は機能しないので、そのようなプラグインは使用しないでください。
現在利用可能なベンダー/バージョンの組み合わせは次のとおりです。
Maven 実行の代替 JDK バージョン alternate-maven
また、Maven 実行全体の JDK として Oracle 8 または Oracle 11 を選択することもできます。この場合は、ツールチェーンオプションとは異なり、ツールチェーン設定も指定される場合を除き、すべてのプラグインに使用される JDK が変更されます。ツールチェーン設定が指定される場合は、そのツールチェーン設定が引き続きツールチェーン対応 Maven プラグインに適用されます。 その結果、Apache Maven Enforcer Plug-in を使用して Java バージョンを確認および強制することができます。
このプロセスを実行するには、パイプラインで使用される Git リポジトリーブランチに .cloudmanager/java-version
というファイルを作成します。 このファイルの内容は 11
か 8
のどちらかにすることができます。その他の値は無視されます。11
を指定した場合は、Oracle 11 が使用され、JAVA_HOME
環境変数が /usr/lib/jvm/jdk-11.0.22
に設定されます。8
を指定した場合は、Oracle 8 が使用され、JAVA_HOME
環境変数が /usr/lib/jvm/jdk1.8.0_401
に設定されます。
環境変数 environment-variables
標準環境変数 standard-environ-variables
場合によっては、プログラムやパイプラインに関する情報に基づいてビルドプロセスを変更する必要があります。
例えば、JavaScriptの縮小に gulp などのツールを使用する場合、開発環境とステージング環境および実稼動環境で縮小レベルが異なることが望ましい場合があります。
これをサポートするために、Cloud Manager では、実行ごとに標準環境変数をビルドコンテナに追加します。
CM_BUILD
true
に設定BRANCH
CM_PIPELINE_ID
CM_PIPELINE_NAME
CM_PROGRAM_ID
CM_PROGRAM_NAME
ARTIFACTS_VERSION
標準環境変数の可用性 availability
標準環境変数は、様々な場所で使用できます。
オーサー、プレビュー、パブリッシュ環境 author-preview-publish
オーサー、プレビュー、パブリッシュの各環境では、通常の環境変数とシークレットの両方を使用できます。
Dispatcher dispatcher
Dispatcher で使用できるのは、通常の環境変数のみです。 秘密鍵は使用できません。
ただし、環境変数は IfDefine
ディレクティブでは使用できません。
OSGi 設定 osgi
OSGi 設定では、通常の環境変数とシークレットの両方を使用できます。
パイプライン変数 pipeline-variables
場合によっては、ビルドプロセスが、特定の設定変数に依存している可能性があります。これらの変数が Git リポジトリーに配置するのに適していない場合や、同じブランチを使用するパイプライン実行間で変更する必要がある場合もあります。
Cloud Manager では、これらの変数を Cloud Manager API または Cloud Manager CLI を介してパイプラインごとに設定できます。変数は、プレーンテキストとして保存することも、保存時に暗号化することもできます。どちらの場合も、変数は環境変数としてビルド環境内で使用できるようになります。この環境変数は、pom.xml
ファイルまたは他のビルドスクリプト内から参照できます。
CLI を使用して変数を設定するには、次のようなコマンドを実行します。
$ aio cloudmanager:set-pipeline-variables PIPELINEID --variable MY_CUSTOM_VARIABLE test
現在の変数は、次のようなコマンドを使用して一覧表示できます。
$ aio cloudmanager:list-pipeline-variables PIPELINEID
変数は、一定の制限に従う必要があります。
- 変数名には、英数字とアンダースコア(
_
)のみを含めることができます。- 慣例により、名前はすべて大文字にする必要があります。
- 変数の数はパイプラインあたり最大 200 個までです。
- 名前は 100 文字未満にする必要があります。
- 各文字列値は 2048 文字未満にする必要があります。
secretString
値は 500 文字未満にする必要があります。
Maven pom.xml
ファイル内で使用する場合は、通常、次のような構文を使用して、これらの変数を Maven プロパティにマッピングすると便利です。
<profile>
<id>cmBuild</id>
<activation>
<property>
<name>env.CM_BUILD</name>
</property>
</activation>
<properties>
<my.custom.property>${env.MY_CUSTOM_VARIABLE}</my.custom.property>
</properties>
</profile>
追加のシステムパッケージのインストール installing-additional-system-packages
完全に機能させるために、一部のビルドでは追加のシステムパッケージをインストールする必要があります。 例えば、Python や Ruby のスクリプトを呼び出す可能性のあるビルドでは、適切な言語インタープリターをインストールしておく必要があります。その場合は、exec-maven-plugin
を呼び出して、APT を起動します。 この実行は通常、Cloud Manager 固有の Maven プロファイルにラップされます。例えば、Python をインストールするには、次の操作を実行します。
<profile>
<id>install-python</id>
<activation>
<property>
<name>env.CM_BUILD</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>apt-get-update</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>apt-get</executable>
<arguments>
<argument>update</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>install-python</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>apt-get</executable>
<arguments>
<argument>install</argument>
<argument>-y</argument>
<argument>--no-install-recommends</argument>
<argument>python</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
この手法は、言語固有のパッケージをインストールする場合にも使用できます。 つまり、RubyGems には gem
を使用し、Python パッケージには pip
を使用します。