本文件提供了 AEM as a Cloud Service 中 Cloud Manager 常見問題的解答。
可以。使用 Java™ 11 的適當設定新增 maven-toolchains-plugin
。
本流程的記錄在此處。
如需範例,請參閱 wknd 專案範例專案程式碼。
嘗試將組建從 Java™ 8 切換到 11 時,您的 AEM Cloud Manager 組建可能會失敗。如果您遇到下列錯誤,則必須移除 maven-scr-plugin
並將所有 OSGi 註解轉換成 OSGi R6 註解。
[main] [ERROR] Failed to execute goal org.apache.felix:maven-scr-plugin:1.26.4:scr (generate-scr-scrdescriptor) on project helloworld.core: /build_root/build/testsite/src/main/java/com/adobe/HelloWorldServiceImpl.java : Unable to load compiled class: com.adobe.HelloWorldServiceImpl: com/adobe/HelloWorldServiceImpl has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 -> [Help 1]
如需有關如何移除此外掛程式的說明,請參閱此處。
對於 Cloud Manager 組建,maven-enforcer-plugin
可能由於此錯誤而失敗。
"[main] [WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireJavaVersion".
此錯誤是一個已知問題,原因在於 Cloud Manager 使用不同版本的 Java™ 來執行 maven 命令而不是編譯程式碼。只需忽略您的 maven-enforcer-plugin
設定中的 requireJavaVersion
。
可以。除了安全評等之外,所有程式碼品質檢查失敗都是非關鍵性量度,因此可透過擴展結果 UI 中的專案將其視為部署管道的一部分而略過。
具有部署管理員、專案管理員或業務負責人角色的使用者可覆寫此問題,這種情況下,管道會繼續進行,或者他們可接受此問題,這種情況下,管道會因失敗而停止。
可以。對於開發人員部署,Git 分支 pom.xml
檔案在 <version>
值的末尾必須包含 -SNAPSHOT
。
此值允許在版本未變更時仍可安裝後續部署。在開發人員部署中,不會為 Maven 組建新增或產生自動版本。
您還可以將版本設定為 -SNAPSHOT
,以用於測試和生產組建或部署。Cloud Manager 會自動設定適當的版本編號並在 Git 中為您建立標記。如有需要,可在稍後參照此標記。
如需有關版本處理的進一步詳細資訊記錄在此處。
在測試和生產部署中,會產生自動化版本,如此處的紀錄。
對於測試和生產部署中的自訂版本設定,請設定適當的三部分 Maven 版本,例如 1.0.0
。每次部署到生產時,都需增加版本。
Cloud Manager 會自動將其版本新增到測試和生產組建,並建立 Git 分支。不需要特別設定。如果您並未依照之前的說明設定 Maven 版本,部署仍會成功,並會自動設定版本。
如需更多詳細資訊,請參閱此 Git 資源。
部署失敗的最常見原因是 sling-distribution-importer
使用者權限不足。在這種情況下,Cloud Manager 部署期間部署步驟會失敗,並會產生如下錯誤。
[Queue Processor for Subscriber agent forwardPublisherSubscriber] org.apache.jackrabbit.vault.fs.io.Importer Error while committing changes. Retrying import from checkpoint at /. Retries 4/10
[Queue Processor for Subscriber agent forwardPublisherSubscriber] org.apache.sling.distribution.journal.impl.subscriber DistributionSubscriber Error processing queue item
org.apache.sling.distribution.common.DistributionException: Error processing distribution package
dstrpck-1583514457813-c81e7751-2da6-4d00-9814-434187f08d32. Retry attempts 162/infinite.
Caused by: org.apache.sling.api.resource.PersistenceException: Unable to commit changes to session.
Caused by: javax.jcr.AccessDeniedException: OakAccess0000: Access denied [EventAdminAsyncThread #7] org.apache.sling.distribution.journal.impl.publisher.DistributionPublisher [null] Error processing distribution package` `dstrpck-1583514457813-c81e7751-2da6-4d00-9814-434187f08d32. Retry attempts 344/infinite. Message: Error trying to extract package at path /etc/packages/com.myapp/myapp-base.ui.content-5.1.0-SNAPSHOT.
sling-distribution-importer
使用者需要 ui.content package
中定義內容路徑的額外權限。此規則通常代表您必須為 /conf
和 /var
新增權限。
解決方案是新增 RepositoryInitializer OSGi 設定指令碼到您的應用程式部署套件中,以為 sling-distribution-importer
使用者新增 ACL。
在先前的錯誤範例中,myapp-base.ui.content-*.zip
套件包括 /conf
和 /var/workflow
底下的內容。為了部署成功,需要這些路徑底下的 sling-distribution-importer
權限。
以下是為 sling-distribution-importer
使用者新增額外權限的 org.apache.sling.jcr.repoinit.RepositoryInitializer-DistributionService.config
OSGi 設定範例。設定在 /var
底下新增權限。這類設定必須新增到 /apps/myapp/config
底下的應用程式套件中 (其中 myapp 是儲存應用程式程式碼的資料夾)。
如果新增 RepositoryInitializer OSGi 設定沒有解決錯誤,可能是由於以下其他問題造成的。
由於錯誤的 OSGi 設定破壞了現成的服務,部署可能會失敗。
由於 Dispatcher 或 Apache 設定錯誤,部署可能會失敗。
在將內容套件 (Sling 指派) 從作者複製到發佈執行個體期間,部署可能會因某些其他錯誤而失敗。
嘗試透過 aio
命令列出或設定管道變數時,您可能會收到類似以下的 403
錯誤。
$ aio cloudmanager:list-pipeline-variables 222
Cannot get variables: https://cloudmanager.adobe.io/api/program/111/pipeline/222/variables (403 Forbidden)
$ aio cloudmanager:set-pipeline-variables 222 --variable TEST 1
Cannot get variables: https://cloudmanager.adobe.io/api/program/111/pipeline/222/variables (403 Forbidden)
$ aio cloudmanager:set-environment-variables 1755 --variable TEST 1
setting variables... !
Cannot set variables: https://cloudmanager.adobe.io/api/program/111/environment/222/variables (403 Forbidden)
這種情況下,必須將執行這些命令的使用者新增到 Admin Console 中的部署管理員角色。
如需更多詳細資訊,請參閱 API 權限。