ビルド環境 build-environment

Cloud Manager ユーザーがコードを作成およびテストするための専用のビルド環境について説明します。

環境の詳細 details

Cloud Managerのビルド環境には、次の属性があります。

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

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

  • インストールされる 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 は、 フロントエンドパイプラインで使用できます。

NOTE
Cloud Manager では、jacoco-maven-plugin の特定のバージョンは定義されませんが、使用するバージョンは 0.7.5.201505241946 以上である必要があります。
TIP
Cloud Manager API の使用方法については、次のその他のリソースを参照してください。

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 バージョンの確認や強制は機能しないので、そのようなプラグインは使用しないでください。

現在利用可能なベンダー/バージョンの組み合わせは次のとおりです。

ベンダー
バージョン
Oracle
1.8
Oracle
1.11
Oracle
11
1.8
1.11
11
NOTE
2022 年 4 月以降、OracleJDK は、AEM アプリケーションの開発と運用のためのデフォルト JDK になります。 Cloud Manager のビルドプロセスは、Maven ツールチェーンで代替オプションを明示的に選択した場合でも、Oracle JDK の使用に自動的に切り替わります。詳しくは、4 月のリリースノートを参照してください。

Maven 実行の代替 JDK バージョン alternate-maven

また、Maven 実行全体の JDK として Oracle 8 または Oracle 11 を選択することもできます。この場合は、ツールチェーンオプションとは異なり、ツールチェーン設定も指定される場合を除き、すべてのプラグインに使用される JDK が変更されます。ツールチェーン設定が指定される場合は、そのツールチェーン設定が引き続きツールチェーン対応 Maven プラグインに適用されます。 その結果、Apache Maven Enforcer Plug-in を使用して Java バージョンを確認および強制することができます。

このプロセスを実行するには、パイプラインで使用される Git リポジトリーブランチに .cloudmanager/java-version というファイルを作成します。 このファイルの内容は 118 のどちらかにすることができます。その他の値は無視されます。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
ステージングパイプラインまたは実稼動パイプラインの場合、Cloud Manager で生成された合成バージョン

標準環境変数の可用性 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 を使用します。

NOTE
この方法でシステムパッケージをインストールしても、Adobe Experience Manager の実行に使用されているランタイム環境にはインストールされません。AEM 環境にシステムパッケージをインストールする必要がある場合は、アドビ担当者にお問い合わせください。
recommendation-more-help
c6cdc82b-cee9-48e0-a6ee-48149d5e72c3