建置環境 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環境變數設定為/usr/lib/jvm/jdk1.8.0_401,其中包含 Oracle JDK 8u401。 如需詳細資訊,請參閱備用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已開始對組建環境進行滾動更新(完成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版本。
Cannot find matching toolchain definitions.請使用.cloudmanager/java-version檔案來選取JDK 11、17或21。- 透過刪除任何
org.apache.maven.plugins:maven-toolchains-plugin專案以及任何認可至您原始檔控制項的toolchains.xml來移除工具鏈。 - 挑選具有
.cloudmanager/java-version(21、17或11)的JDK,如備用Maven執行JDK版本中所述。 - Adobe建議清除Cloud Manager組建快取或觸發新的管道執行。
備用 Maven 執行 JDK 版本 alternate-maven
您可以選取Oracle 8或Oracle 11作為整個Maven執行的JDK。 此方法會變更用於所有外掛程式的JDK。 因此,支援使用Apache Maven強制器外掛程式來檢查和強制執行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套件。