构建环境 build-environment
了解Cloud Manager用于构建和测试代码的专用构建环境。
环境详细信息 details
Cloud Manager 的构建环境具有以下属性。
-
该构建环境基于 Linux,并派生自 Ubuntu 22.04。
-
安装了 Apache Maven 3.9.4。
- Adobe 建议用户更新其 Maven 存储库以使用 HTTPS 代替 HTTP。
-
安装的 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版本部分。 -
安装其他必需的系统包。
bzip2unziplibpngimagemagickgraphicsmagick
-
在生成时安装其他包,如安装其他系统包部分中所述。
-
每次构建都是在新环境中完成的。 构建容器在执行之间不保留数据。
-
Maven通过以下三条命令运行:
mvn --batch-mode org.apache.maven.plugins:maven-dependency-plugin:3.1.2:resolve-pluginsmvn --batch-mode org.apache.maven.plugins:maven-clean-plugin:3.1.0:clean -Dmaven.clean.failOnError=falsemvn --batch-mode org.jacoco:jacoco-maven-plugin:prepare-agent package
-
使用
settings.xml文件在系统级别配置 Maven,并且其中会自动包含使用名为adobe-public的配置文件的公共 Adobe 工件存储库。 请参阅 Adobe 公共 Maven 存储库了解详情。 -
对于前端管道有 Node.js 18 可用。
.cloudmanager/java-version支持JDK选择。 有关详细信息,请参阅使用特定的Java版本。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 现在默认禁用所有不安全的 http://* 镜像,如 Maven 发行说明中所述。
某些用户在从使用不安全HTTP连接的Maven存储库下载工件时,在构建步骤中遇到问题。
为了确保更新版本的流畅体验,Adobe 建议用户更新其 Maven 存储库以使用 HTTPS 代替 HTTP。 这一调整支持行业向安全通信协议过渡,并维护安全可靠的构建过程。
使用特定的 Java 版本 using-java-version
默认情况下,由 Cloud Manager 构建过程构建的项目会使用 Oracle 8 JDK。 希望使用替代JDK的客户可以为整个Maven执行过程选择替代JDK版本。
Cannot find matching toolchain definitions.而失败。请使用.cloudmanager/java-version文件选择JDK 11、17或21。- 通过删除任何
org.apache.maven.plugins:maven-toolchains-plugin条目和提交到源代码管理的任何toolchains.xml来移除工具链。 - 按照替代Maven执行JDK版本中的说明,选择具有
.cloudmanager/java-version(21、17或11)的JDK。 - Adobe建议清除Cloud Manager内部版本缓存或触发新的管道运行。
替代 Maven 执行 JDK 版本 alternate-maven
可以选择将Oracle 8或Oracle 11作为整个Maven执行的JDK。 此方法会更改用于所有插件的JDK。 因此,支持使用Apache Maven Enforcer插件检查和强制实施Java版本。
要执行此过程,请在管道使用的Git存储库分支中创建名为.cloudmanager/java-version的文件。 此文件可以包含内容 11 或 8。 任何其他值将被忽略。 如果指定了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_BUILDtrueBRANCHCM_PIPELINE_IDCM_PIPELINE_NAMECM_PROGRAM_IDCM_PROGRAM_NAMEARTIFACTS_VERSION标准环境变量可用性 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>
此方法还可用于安装特定于语言的包。 即,将gem用于RubyGems,或将pip用于Python包。