ビルド環境 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 に設定されています。これには、Oracle JDK 8u401 が含まれています。AEM Cloud プロジェクトで JDK 11 を使用するには、このデフォルトを上書きする必要があります。 ​詳しくは、Maven JDK バージョンの設定の節を参照してください。

  • 必要に応じてインストールされる追加のシステムパッケージが、次のようにいくつかあります。

    • bzip2
    • unzip
    • libpng
    • imagemagick
    • graphicsmagick
  • 追加のシステムパッケージのインストールの節で説明されているように、ビルド時にその他のパッケージがインストールされる場合があります。

  • すべてのビルドは、Pristine 環境で実行されます。ビルドコンテナは実行から次回の実行までの間、状態を保持しません。

  • 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

デフォルトでは、プロジェクトは Oracle 8 JDK を使用して Cloud Manager ビルドプロセスで作成されますが、AEM Cloud Service のお客様は、Maven の実行に使用する JDK バージョンを 11 に設定することを強くお勧めします。

Maven JDK バージョンの設定 alternate-maven-jdk-version

.cloudmanager/java-version ファイルで、Maven 実行全体の JDK バージョンを 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

標準環境変数 standard-environ-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