與On Premise和Managed Services解決方案相AEM比,代碼開發的AEM基礎在as a Cloud Service上相似。 開發人員編寫代碼並在本地test,然後將代碼推送到遠AEM程as a Cloud Service環境。 Cloud Manager是Managed Services的可選內容交付工具,是必需的。 現在,這是將代碼部署到as a Cloud Service環境的AEM唯一機制。
更新 AEM版本 始終是單獨的部署事件與推送 自定義代碼。 換種方式來看,定制代碼版本應針對生產版AEM本進行測試,因為這是將在頂部部署的版本。 之後AEM發生的版本更新,此更新將頻繁且自動應用。 它們旨在向後相容已部署的客戶代碼。
本文檔的其餘部分將介紹開發人員應如何調整其做法,以便他們能夠AEM同時使用as a Cloud Service的版本更新和客戶更新。
對於以前AEM的解決方案,最新版AEM本不常更改(大約每年使用季度Service Pack),客戶將自己的時間將生產實例更新為最新的快速啟動,並引用API Jar。 但是,AEMas a Cloud Service應用程式會更頻繁地自動更新到最新AEM版本,因此內部版本的自定義代碼應根據最新版本AEM生成。
與現有非雲版本AEM類似,將支援基於特定快速啟動的本地離線開發,並且在大多數情況下,它將是調試的首選工具。
應用程式在本地電腦上的行為與Adobe雲之間存在細微的操作差異。 這些架構差異必須在本地開發過程中得到尊重,並可能導致在雲基礎架構上部署時出現不同的行為。 由於這些差異,在生產中推出新的自定義代碼之前,必須對開發和階段環境執行詳盡的test。
為開發內部版本的自定義代碼, AEMas a Cloud ServiceSDK 應下載並安裝。 有關使用as a Cloud Service調度器工AEM具的其他資訊,請參見 此頁。
以下視頻提供了有關如何將代碼部署到AEMas a Cloud Service的高級概述:
客戶通過Cloud Manager將自定義代碼部署到雲環境。 應該注意的是,Cloud Manager將本地組裝的內容包轉換為符合Sling Feature Model的工件,Sling Feature Model是在雲環境中運行時對AEMas a Cloud Service應用程式的描述。 因此,在查看 包管理器 在雲環境中,名稱將包含「cp2fm」,轉換後的包刪除了所有元資料。 它們無法相互作用,這意味著它們無法下載、複製或開啟。 有關轉換器的詳細文檔可以 此處。
為as a Cloud Service應用程AEM序編寫的內容包必須在不可變內容和可變內容之間保持乾淨的隔離,Cloud Manager將只安裝可變內容,並輸出如下消息:
Generated content-package <PACKAGE_ID> located in file <PATH> is of MIXED type
本節的其餘部分將介紹不可變和可變軟體包的組成和含義。
必須將保留在不可變儲存庫中的所有內容和代碼簽入git並通過雲管理器進行部署。 換句話說,與當前解決AEM方案不同,代碼從未直接部署到正在運行的AEM實例。 這可確保在任何雲環境中為給定版本運行的代碼都完全相同,從而消除了在生產過程中意外發生代碼變化的風險。 例如,OSGI配置應提交到原始碼管理,而不是通過Web控制台的AEM配置管理器在運行時進行管理。
由於交換機啟用了藍綠部署模式導致的應用程式更改,因此它們不能依賴於可變儲存庫中的更改,但服務用戶、其ACL、節點類型和索引定義更改除外。
對於具有現有代碼庫的客戶,必須完成文檔中介紹的儲存庫重組練習AEM,以確保以前在/etc下的內容移動到正確的位置。
對這些代碼包應用一些附加限制,例如 安裝掛接 不支援。
如上所述,OSGI配置應提交到原始碼管理,而不是通過Web控制台。 這樣做的技術包括:
閱讀有關OSGI配置的更多資訊,請訪問 配置OSGiAEM以as a Cloud Service。
在某些情況下,在原始碼管理中準備內容更改可能會非常有用,以便在更新環境時,Cloud Manager可以部署此內容。 例如,可以合理地植入某些根資料夾結構,或在可編輯模板中排列更改,以啟用應用程式部署更新的元件的策略。
有兩種策略可描述Cloud Manager將部署到可變儲存庫、可變內容包和重新指向語句的內容。
資料夾路徑層次結構、服務用戶和訪問控制(ACL)等內容通常被提交到基於主原型的項AEM目中。 技術包括從XMLAEM導出或直接寫入。 在生成和部署過程中,Cloud Manager會將生成的可變內容包打包。 可變內容在管道的部署階段中以3個不同的時間安裝:
在啟動新版本的應用程式之前:
在啟動新版本的應用程式期間但在切換之前:
切換到新版本的應用程式後:
/conf
)(添加、修改、刪除)通過將包嵌入install.author或install.publish資料夾中,可以將可變內容安裝限制為創作或發佈 /apps
。 6.5中進行了重組,以AEM反映這一分離,建議的項目重組詳情見 AEM6.5文檔。
內容包將部署到所有環境類型(dev、stage、prod)。 無法將部署限制到特定環境。 此限制是為了確保test運行自動執行選項。 特定於環境的內容需要通過 包管理器。
此外,在應用可變內容包更改後,沒有回滾這些更改的機制。 如果客戶檢測到問題,他們可以選擇在下次代碼發行時解決它,或者作為最後手段,將整個系統恢復到部署前的某個時間點。
任何包含的第三方包都必須驗證為與AEMas a Cloud Service服務相容,否則其包含將導致部署失敗。
如上所述,具有現有代碼庫的客戶應遵守中介紹的6.5儲存庫更改所需的儲存庫重組操作 AEM6.5文檔。
對於以下情況,最好採用手工編碼顯式內容建立的方法 repoinit
OSGI工廠配置中的語句:
建立/刪除/禁用服務用戶
建立/刪除組
建立/刪除用戶
添加ACL
ACL的定義要求節點結構已存在。 因此,可能需要在建立路徑語句之前執行。
添加路徑(例如根資料夾結構)
添加CND(nodetype定義)
由於以下優點,對於這些受支援的內容修改使用案例,重點說明是可取的:
Cloud Manager部署應用程式時,它將執行這些語句,與任何內容包的安裝無關。
要建立repoint語句,請按照以下步驟操作:
org.apache.sling.jcr.repoinit.RepositoryInitializer
的子菜單。 使用配置的描述性名稱,如 org.apache.sling.jcr.repoinit.RepositoryInitializer~initstructure。/content
先 /content/myfolder
在 /content/myfolder/mysubfolder
。 對於在低級結構上設定的ACL,建議將其設定在更高級別上,並使用 rep:glob
限制。 例如 (allow jcr:read on /apps restriction(rep:glob,/msm/wcm/rolloutconfigs))
。為下面的節點定義的ACL /apps
或 /libs
將在空白儲存庫上啟動重新定位執行。 這些包在重新指向後安裝,因此語句不能依賴於包中定義的任何內容,但必須定義先決條件,如下面的父結構。
對於ACL,建立深層結構可能比較麻煩,因此,在更高級別上定義ACL並通過rep:glob限制約束它應在何處操作更合理。
有關重點位置的詳細資訊,請參閱 Sling文檔
有些使用情形中,內容包應作為「一次性」安裝。 例如,將特定內容從生產導入到暫存以調試生產問題。 對於這些情景, 包管理器 可用於AEMas a Cloud Service環境。
由於包管理器是運行時概念,因此無法將內容或代碼安裝到不可變的儲存庫中,因此這些內容包只應由可變內容(主要是 /content
或 /conf
)。 如果內容包包含混合的內容(可變內容和不可變內容),則只安裝可變內容。
包管理器UI可能返回 未定義 如果安裝軟體包需要10分鐘以上,則會出現錯誤消息。
這不是因為安裝錯誤,而是由於Cloud Service對所有請求的超時。
如果您看到此類錯誤,請不要重試安裝。 安裝在後台正在正確進行。 如果您確實重新啟動安裝,則多個併發導入進程可能會引入一些衝突。
通過Cloud Manager安裝的任何內容包(可變和不可變)都將在AEMPackage Manager的用戶介面中以凍結狀態顯示。 無法重新安裝、重建甚至下載這些軟體包,並將隨 "cp2fm" 尾碼,表示其安裝由雲管理器管理。
客戶通常會包括來自第三方來源的預構建軟體包,如Adobe翻譯合作夥伴等軟體供應商。 建議將這些軟體包托管在遠程儲存庫中,並在 pom.xml
。 這對於公共儲存庫和具有密碼保護的專用儲存庫是可能的,如中所述 受密碼保護的maven主要儲存庫。
如果無法將包儲存在遠程儲存庫中,則客戶可以將其放置在基於本地檔案系統的Maven儲存庫中,該儲存庫作為項目的一部分提交給SCM,並由任何依賴它的資訊引用。 儲存庫將在項目pom中聲明,如下所示:
<repository>
<id>project.local</id>
<name>project</name>
<url>file:${maven.multiModuleProjectDirectory}/repository</url>
</repository>
任何包含的第三方包都必須遵守本文中AEM描述的as a Cloud Service服務編碼和打包指南,否則,包含它將導致部署失敗。
以下馬文 POM.xml
代碼段顯示如何將第三方包嵌入項目的「容器」包(通常名為 「全部」,通過 filevault-package-maven-plugin Maven插件配置。
...
<plugin>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>filevault-package-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
...
<embeddeds>
...
<!-- Include any other extra packages -->
<embedded>
<groupId>com.vendor.x</groupId>
<artifactId>vendor.plug-in.all</artifactId>
<type>zip</type>
<target>/apps/vendor-packages/container/install</target>
</embedded>
<embeddeds>
</configuration>
</plugin>
...
與更AEM新一樣,客戶版本使用滾動部署策略進行部署,以在適當的情況下消除作者群集停機時間。 事件的一般順序如下所述,其中 藍色 是舊版本的客戶代碼 綠色 是新版本。 藍色和綠色都運行相同版本的代AEM碼。
新索引或已修改的索引將導致在新(綠色)版本開始通信之前執行額外的索引或重新索引步驟。 有關as a Cloud Service中索引管AEM理的詳細資訊,請參閱 這篇文章。 您可以在Cloud Manager生成頁上檢查索引作業的狀態,並在新版本準備接收通信時收到通知。
滾動部署所需的時間會因索引的大小而異,因為在生成新索引之前,綠色版本不能接受通信。
目前,AEMas a Cloud Service不能使用索引管理工具,如ACS Commons Ensure Oak Index工具。
發佈機制與 復AEM制Java API。
為了利用雲就緒快速啟動開發和test復AEM制功能,需要將經典複製功能與「作者/發佈」設定一起使用。 如果AEM作者上的UI入口點已被刪除,則用戶將轉到 http://localhost:4502/etc/replication
的子菜單。
如上所述,AEMas a Cloud Service的滾動部署策略意味著舊版本和新版本可能同時運行。 因此,請謹慎處理代碼更改,這些代碼更改與仍在運行的AEM舊版本不向後相容。
此外,應測試舊版本是否與新版本在回滾時應用的任何新可變內容結構相容,因為不會刪除可變內容。
更改訪問內容或代碼所需的服務用戶或ACL可能會導致較舊版本中的錯誤AEM,從而導致過時的服務用戶訪問該內容或代碼。 要解決此行為,建議在至少2個版本之間進行更改,第一個版本在後續版本中清理之前充當橋梁。
如果對索引進行了更改,則藍色版本繼續使用其索引直到終止,而綠色版本使用其自己修改的索引集是非常重要的。 開發人員應遵循描述的索引管理技術 本文。
如果在部署後報告或檢測到故障,則可能需要回滾到藍色版本。 最好確保藍色代碼與綠色版本建立的任何新結構相容,因為新結構(任何可變內容內容)不會回滾。 如果舊代碼不相容,則需要在後續客戶版本中應用修復。
在現有解AEM決方案中,客戶可以選擇以任意運行模式運行實例,並將OSGI配置或安裝OSGI捆綁包到這些特定實例。 通常定義的運行模式包括 服務 (作者和發佈)和環境(dev、stage、prod)。
另AEM一方面,as a Cloud Service的是對哪些運行模式可用以及如何將OSGI捆綁包和OSGI配置映射到它們:
<service>.<environment_type>
是受支援的,但必須按此特定順序使用(例如 author.dev
或 publish.prod
)。 OSGI令牌應直接從代碼引用,而不是使用 getRunModes
方法,該方法將不再包括 environment_type
運行時。 有關詳細資訊,請參見 配置OSGiAEM以as a Cloud Service。install/author
或 install/publish
。與現有解決AEM方案一樣,無法使用運行模式來僅安裝特定環境或服務的內容。 如果希望為開發環境植入資料或HTML,而不是在階段或生產環境中,則可以使用包管理器。
支援的運行模式配置包括:
使用具有最匹配運行模式的OSGI配置。
本地開發時,運行模式啟動參數, -r
,用於指定運行模式OSGI配置。
$ java -jar aem-sdk-quickstart-xxxx.x.xxx.xxxx-xxxx.jar -r publish,dev
維護任務配置必須保留在原始碼管理中,因為 工具>操作 雲環境中將不再提供螢幕。 這樣做的好處是確保變革被有意地持續,而不是重新應用或被遺忘。 請參考 維護任務文章 的雙曲餘切值。