ビルド環境 build-environment
Cloud Manager のビルド環境と、そこでコードがどのようにビルドされテストされるかを説明します。
ビルド環境の詳細 build-environment-details
Cloud Manager では、専用のビルド環境を使用して、コードのビルドおよびテストを行います。
-
ビルド環境は Linux ベースで、Ubuntu 22.04 から派生しています。
-
Apache Maven 3.9.4 がインストールされています。
- アドビでは、ユーザーに HTTP ではなく HTTPS を使用するように Maven リポジトリを更新することをお勧めします。
-
インストールされる Java バージョンは、Oracle JDK 11.0.22 と Oracle JDK 8u401 です。
-
重要: デフォルトでは、
JAVA_HOME
環境変数は/usr/lib/jvm/jdk1.8.0_401
に設定されています。これには、OracleJDK 8u401 が含まれています。 AEM Cloud プロジェクトで JDK 11 を使用するには、このデフォルトを上書きする必要があります。 詳しくは、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
というプロファイルを使用したアドビの公開アーティファクトリポジトリが自動的に含まれています(詳しくは、アドビの公開 Maven リポジトリを参照してください)。
jacoco-maven-plugin
の特定のバージョンは定義されませんが、0.7.5.201505241946
異常のバージョンを使用する必要があります。HTTPS Maven リポジトリ https-maven
Cloud Manager リリース 2023.10.0 では、Maven 3.8.8 へのアップデートを含む、ビルド環境へのローリングアップデートが開始されました(リリース 2023.12.0 で完了)。Maven 3.8.1 で導入された重要な変更は、潜在的な脆弱性を軽減することを目的としたセキュリティ強化でした。具体的には、Maven リリースノートで説明するように、Maven では安全でないすべての http://*
ミラーをデフォルトで無効にするようになりました。
このセキュリティ強化の結果、一部のユーザーには、ビルド手順で、特に安全でない HTTP 接続を使用する Maven リポジトリからアーティファクトをダウンロードする際に問題が発生する場合があります。
アップデートされたバージョンでスムーズなエクスペリエンスを実現するために、アドビでは、ユーザーが Mavenリポジトリを更新して HTTP ではなく HTTPS を使用することをお勧めします。この調整は、業界でセキュアな通信プロトコルへの移行が進むのに合わせて行われ、安全で信頼性の高いビルドプロセスを維持するのに役立ちます。
特定の Java バージョンを使用 using-java-support
Cloud Managerのビルドプロセスでは、デフォルトでOracle 8 JDK を使用してプロジェクトをビルドしますが、AEM Cloud Serviceのお客様は、Maven 実行 JDK バージョンを 11
に設定する必要があります。
Maven JDK バージョンの設定 alternate-maven-jdk-version
Adobeでは、Maven 実行全体の JDK バージョンを .cloudmanager/java-version
ファイルに 11
定することをお勧めします。
それには、パイプラインで使用される Git リポジトリーブランチに .cloudmanager/java-version
というファイルを作成します。 11
というテキストのみが含まれるようにファイルを編集します。Cloud Manager は値 8
も受け入れますが、このバージョンは AEM Cloud Service プロジェクトではサポートされなくなりました。その他の値は無視されます。11
を指定した場合は、Oracle 11 が使用され、JAVA_HOME
環境変数が /usr/lib/jvm/jdk-11.0.22
に設定されます。
環境変数 – 標準 environment-variables
場合によっては、プログラムやパイプラインに関する情報に基づいてビルドプロセスを変更する必要があります。
例えば、gulp のようなツールを使用してビルド時にJavaScriptの縮小が行われる場合、様々な環境で異なる縮小レベルが望ましい場合があります。 開発ビルドでは、ステージングおよび実稼動環境と比較して、より軽い縮小レベルを使用する場合があります。
これをサポートするために、Cloud Manager は、これらの標準環境変数を各実行のビルドコンテナに追加します。
CM_BUILD
true
に設定BRANCH
CM_PIPELINE_ID
CM_PIPELINE_NAME
CM_PROGRAM_ID
CM_PROGRAM_NAME
ARTIFACTS_VERSION
CM_AEM_PRODUCT_VERSION
環境変数 – パイプライン pipeline-variables
ビルドプロセスには、Git リポジトリに保存してはいけない特定の設定変数が必要になる場合があります。 さらに、場合によっては、同じブランチを使用してパイプライン実行間でこれらの変数を調整する必要があります。
詳しくは、 パイプライン変数を設定も参照してください。
追加のシステムパッケージのインストール installing-additional-system-packages
完全に機能するために、追加のシステムパッケージが必要なビルドもあります。 例えば、Python や Ruby のスクリプトが呼び出される可能性のあるビルドでは、適切な言語インタープリターのインストールが必要になります。このインストールプロセスを管理するには、pom.xml
で 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
を使用します。