ビルド環境 build-environment

Cloud Manager のビルド環境と、そこでコードがどのようにビルドされテストされるかを説明します。

ビルド環境の詳細 build-environment-details

Cloud Manager では、専用のビルド環境を使用して、コードのビルドおよびテストを行います。

  • ビルド環境は Linux ベースで、Ubuntu 22.04 から派生しています。

  • Apache Maven 3.9.4 がインストールされています。

  • インストールされる 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 リポジトリを参照してください)。

NOTE
Cloud Manager では、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
ステージまたは実稼動パイプラインの場合、Cloud Manager で生成された合成バージョン
CM_AEM_PRODUCT_VERSION
リリースバージョン

環境変数 – パイプライン pipeline-variables

ビルドプロセスには、Git リポジトリに保存してはいけない特定の設定変数が必要になる場合があります。 さらに、場合によっては、同じブランチを使用してパイプライン実行間でこれらの変数を調整する必要があります。

詳しくは、 パイプライン変数を設定も参照してください。

追加のシステムパッケージのインストール installing-additional-system-packages

完全に機能するために、追加のシステムパッケージが必要なビルドもあります。 例えば、Python や Ruby のスクリプトが呼び出される可能性のあるビルドでは、適切な言語インタープリターのインストールが必要になります。このインストールプロセスを管理するには、pom.xmlexec-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 を使用します。

NOTE
この方法でシステムパッケージをインストールしても、Adobe Experience Manager の実行に使用されているランタイム環境にはインストールされません。AEM 環境にシステムパッケージをインストールする必要がある場合は、アドビ担当者にお問い合わせください。
TIP
フロントエンドビルド環境について詳しくは、フロントエンドパイプラインを使用したサイトの開発のドキュメントを参照してください。
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab