构建环境 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环境变量设置为包含 Oracle JDK 8u401 的 /usr/lib/jvm/jdk1.8.0_401。 有关更多详细信息,请参阅替代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 存储库了解详情。

  • 对于前端管道有 Node.js 18 可用。

IMPORTANT
自Cloud Manager 2025.06.0起,移除了Maven工具链支持。 现在仅通过.cloudmanager/java-version支持JDK选择。 有关详细信息,请参阅使用特定的Java版本
NOTE
虽然Cloud Manager未定义jacoco-maven-plugin的特定版本,但使用的版本必须至少为0.7.5.201505241946
TIP
要了解如何使用Cloud Manager API,请参阅以下其他资源:

HTTPS Maven 存储库 https-maven

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

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

为了确保更新版本的流畅体验,Adobe 建议用户更新其 Maven 存储库以使用 HTTPS 代替 HTTP。 这一调整支持行业向安全通信协议过渡,并维护安全可靠的构建过程。

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

默认情况下,由 Cloud Manager 构建过程构建的项目会使用 Oracle 8 JDK。 希望使用替代JDK的客户可以为整个Maven执行过程选择替代JDK版本。

IMPORTANT
Cloud Manager 2025.06.0不再支持Maven工具链。 请注意,包含maven-toolchains-plugin配置的管道因Cannot find matching toolchain definitions.而失败。请使用.cloudmanager/java-version文件选择JDK 11、17或21。
迁移指南:
  1. 通过删除任何org.apache.maven.plugins:maven-toolchains-plugin条目和提交到源代码管理的任何toolchains.xml来移除工具链。
  2. 按照替代Maven执行JDK版本中的说明,选择具有.cloudmanager/java-version (21、17或11)的JDK。
  3. Adobe建议清除Cloud Manager内部版本缓存或触发新的管道运行。

替代 Maven 执行 JDK 版本 alternate-maven

可以选择将Oracle 8或Oracle 11作为整个Maven执行的JDK。 此方法会更改用于所有插件的JDK。 因此,支持使用Apache Maven Enforcer插件检查和强制实施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

在某些情况下,必须根据项目或管道的相关信息来更改构建过程。

例如,当使用诸如gulp之类的工具进行JavaScript缩小时,请将不同的缩小级别用于开发环境与暂存和生产环境。

为了支持这一点,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 指令中使用环境变量。

TIP
在部署之前,使用 Dispatcher 在本地验证环境变量的使用情况。

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>

此方法还可用于安装特定于语言的包。 即,将gem用于RubyGems,或将pip用于Python包。

NOTE
通过此方式安装系统包并不会将它安装在用于运行 Adobe Experience Manager 的运行时环境中。 如果您需要在AEM环境中安装系统包,请联系您的Adobe代表。
recommendation-more-help
experience-manager-cloud-manager-help-main-toc