构建环境 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 开始了对构建环境的一项滚动更新(在发布版本 2023.12.0 时完成更新),其中包括对 Maven 3.8.8 的更新。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. 按照.cloudmanager/java-version替代Maven执行JDK版本中的说明,选取具有(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>

该方法还可用于安装特定语言的包。 也就是说,对于 RubyGems 使用 gem,或者对于 Python 包使用 pip

NOTE
通过此方式安装系统包并不会将它安装在用于运行 Adobe Experience Manager 的运行时环境中。 如果您需要在 AEM 环境中安装系统包,请联系您的 Adobe 代表。
recommendation-more-help
c6cdc82b-cee9-48e0-a6ee-48149d5e72c3