Cloud Manager的构建环境 build-environment

了解 Cloud Manager 的构建环境以及它如何构建和测试您的代码。

TIP
本文档介绍了Cloud Manager用于开发AEM as a Cloud Service项目的构建环境。 有关AEM as a Cloud Service支持的用于内容创作的客户端平台的详细信息,请参阅支持的客户端平台

构建环境详细信息 build-environment-details

Cloud Manager 使用专门的构建环境构建和测试代码。

  • 安装的Java版本是Oracle JDK 11.0.22、Oracle JDK 17.0.10和Oracle JDK 21.0.4。
  • 重要信息:​默认情况下,JAVA_HOME环境变量设置为/usr/lib/jvm/jdk1.8.0_401,其中包含Oracle JDK 8u401。 覆盖AEM Cloud项目的此默认值以使用JDK 21(首选)、17或11。 有关更多详细信息,请参阅设置Maven JDK版本部分。

  • 已安装一些其他必要的系统包。

    • bzip2
    • unzip
    • libpng
    • imagemagick
    • graphicsmagick
  • 在生成时安装其他包,如安装其他系统包部分中所述。

  • 每个构建都在新环境中运行;构建容器在执行之间不保留数据。

  • Maven 始终通过以下三条命令运行。

    • 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
  • 使用 settings.xml 文件在系统级别配置 Maven,并将自动包含使用名为 adobe-public 的配置文件的公共 Adobe 构件存储库。 (有关更多详细信息,请参阅 Adobe 公共 Maven 存储库)。

NOTE
Cloud Manager未指定jacoco-maven-plugin的特定版本,但所需版本取决于项目的Java版本。 对于Java 8,插件版本必须至少为0.7.5.201505241946,而较新的Java版本需要较新的版本。

HTTPS Maven 存储库 https-maven

Cloud Manager 版本2023.10.0开始对构建环境进行滚动更新(包括版本2023.12.0),其中包括对Maven 3.8.8的更新。 Maven 3.8.1中引入的一项重大更改是旨在减少潜在漏洞的安全增强功能。 具体来说,Maven 现在默认禁用所有不安全的 http://* 镜像,如 Maven 发行说明中所述

某些用户在从使用不安全HTTP连接的Maven存储库下载工件时,在构建步骤中遇到问题。

为了确保更新版本的流畅体验,Adobe 建议用户更新其 Maven 存储库以使用 HTTPS 代替 HTTP。 这一调整与业界转向安全通信协议的趋势相符,并且有助于保持安全可靠的构建过程。

使用特定的Java版本 using-java-support

默认情况下,Cloud Manager构建过程使用Oracle 8 JDK构建项目,但AEM Cloud Service客户将Maven执行JDK版本设置为21(首选)、17或11。

设置Maven JDK版本 alternate-maven-jdk-version

要设置Maven执行JDK,请在管道使用的Git存储库分支中创建名为.cloudmanager/java-version的文件。 编辑文件,使其仅包含文本2117。 虽然Cloud Manager也接受值8,但AEM Cloud Service项目不再支持此版本。 任何其他值将被忽略。 当指定2117时,将使用Oracle Java 21或Oracle Java 17。

迁移到使用Java 21或Java 17进行构建的先决条件 prereq-for-building

要使用Java 21或Java 17进行构建,Cloud Manager现在使用与这些Java版本兼容的SonarQube 9.9。 此更改已在Cloud Manager 2025.1.0版中引入。 无需客户执行任何操作即可升级SonarQube。 有关更多详细信息以及所做的更改,请参阅Cloud Manager 2025.1.0发行说明。

将应用程序迁移到新的Java内部版本和运行时版本时,请先在开发和暂存环境中进行全面测试,然后再部署到生产环境。

Adobe建议采用以下部署策略:

  1. 使用Java 21运行本地SDK(可从https://experience.adobe.com/#/downloads下载),将应用程序部署到其中并验证其功能。 要确保没有错误(指示类加载或字节码编织有问题),请检查日志。
  2. 要将Java 21用作构建时Java版本,请在Cloud Manager存储库中配置分支,配置开发管道以使用此分支,然后运行管道。 运行验证测试。
  3. 如果将Java 21用作构建时Java版本时结果令人满意,请配置暂存/生产管道并运行管道。
翻译功能 translation-features

在Java 21运行时上部署以下功能时,这些功能无法正常运行,Adobe预计将在2025年初解决这些问题:

  • 使用人工翻译时,XLIFF (XML本地化交换文件格式)失败。
  • I18n (国际化)无法正确处理希伯来语(he)、印尼语(in)和意第绪语(yi)的语言区域设置,因为较新的Java版本中更改了区域设置构造函数。

运行时要求 runtime-requirements

Java 21运行时已应用于所有符合条件的环境,这些环境在AEM发行17098本或更高版本上满足以下标准。 如果环境不符合标准,必须进行调整以确保性能、可用性和安全性。

  • ASM的最低版本:
    将通常捆绑在org.ow2.asm.*工件中的Java包org.objectweb.asm的使用情况更新到9.5或更高版本,以确保支持较新的JVM运行时。

  • Groovy的最低版本:
    将Java包org.apache.groovyorg.codehaus.groovy的使用更新到版本4.0.22或更高版本,以确保支持较新的JVM运行时。

    可以通过添加第三方依赖项(例如 AEM Groovy Console)间接包含此捆绑包。

  • Aries SPIFly的最低版本:
    将Java包org.apache.aries.spifly.dynamic.bundle的使用更新到版本1.3.6或更高版本,以确保支持更新的JVM运行时。

AEM Cloud Service SDK支持Java 21,并允许您在运行Cloud Manager管道之前验证项目与Java 21的兼容性。

  • 编辑运行时参数:
    使用Java 21在本地运行AEM时,由于MaxPermSize参数,启动脚本(crx-quickstart/bin/startcrx-quickstart/bin/start.bat)失败。 或者,从脚本中删除-XX:MaxPermSize=256M或定义环境变量CQ_JVM_OPTS,并将其设置为-Xmx1024m -Djava.awt.headless=true

    AEM Cloud Service SDK版本19149和更高版本中已解决此问题。

IMPORTANT
如果环境尚未自动更新到Java 21运行时,则可以通过使用Java 17或21构建来触发该环境。 您可通过将.cloudmanager/java-version设置为2117来配置此设置。 如有疑问,请通过aemcs-java-adopter@adobe.com联系Adobe。

构建时间要求 build-time-reqs

需要进行以下调整以允许使用Java 21和Java 17构建项目。 您可以在运行Java 21和Java 17之前更新它们,因为它们与旧版Java兼容。

我们建议AEM Cloud Service客户尽早使用Java 21构建项目,以便利用新的语言功能。

  • bnd-maven-plugin的​最低版本:
    bnd-maven-plugin的使用更新到版本6.4.0,以确保支持较新的JVM运行时。

    版本7或更高版本与Java 11或更低版本不兼容,因此不建议升级到该版本。

  • aemanalyser-maven-plugin的​最低版本:
    aemanalyser-maven-plugin的使用更新到版本1.6.16或更高版本,以确保支持较新的JVM运行时。

  • maven-bundle-plugin的​最低版本:
    maven-bundle-plugin的使用更新到版本5.1.5或更高版本,以确保支持较新的JVM运行时。

    版本6或更高版本与Java 11或更低版本不兼容,因此不建议升级到该版本。

  • 更新maven-scr-plugin中的依赖项:
    maven-scr-plugin不直接与Java 21或Java 17兼容。 但是,可以通过更新插件配置中的ASM依赖项版本来生成描述符文件,如以下示例所示:

<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-scr-plugin</artifactId>
        <version>1.26.4</version>
        <executions>
          <execution>
            <id>generate-scr-scrdescriptor</id>
            <goals>
              <goal>scr</goal>
            </goals>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-analysis</artifactId>
            <version>9.7.1</version>
            <scope>compile</scope>
          </dependency>
        </dependencies>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>

环境变量 — 标准 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.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>

可使用相同的方法安装语言特定的包,例如,使用 gem 安装 RubyGems 包或使用 pip 安装 Python 包。

NOTE
通过此方式安装系统包并不会将它安装在用于运行 Adobe Experience Manager 的运行时环境中。 如果您需要在AEM环境中安装系统包,请联系您的Adobe代表。
TIP
有关前端构建环境的详细信息,请参阅使用前端管道开发站点。
recommendation-more-help
experience-manager-cloud-service-help-main-toc