De grundläggande funktionerna för kodutveckling liknar de i AEM as a Cloud Service jämfört med AEM On Premise och Managed Services. Utvecklare skriver kod och testar den lokalt, som sedan skickas till fjärrmiljöer på AEM as a Cloud Service. Cloud Manager, som var ett valfritt verktyg för innehållsleverans för Managed Services, krävs. Det här leveransverktyget är nu den enda mekanismen för att distribuera kod till AEM as a Cloud Service miljö för utveckling, scener och produktion. För snabb funktionsvalidering och felsökning innan du distribuerar de tidigare miljöerna kan koden synkroniseras från en lokal miljö till en Rapid Development Environment.
Uppdateringen av AEM är alltid en separat distributionshändelse från att trycka egen kod. Om du tittar på en annan metod bör anpassade kodreleaser testas mot den AEM versionen som är i produktion eftersom det är det som distribueras högst upp. AEM versionsuppdateringar som görs därefter, som är vanliga och som tillämpas automatiskt. De är avsedda att vara bakåtkompatibla med den kundkod som redan har distribuerats.
I resten av det här dokumentet beskrivs hur utvecklare bör anpassa sina rutiner så att de kan arbeta med både AEM as a Cloud Service versionsuppdateringar och kunduppdateringar.
För tidigare AEM ändrades den senaste AEM versionen sällan (ungefär en gång om året med kvartalsvisa servicepaket) och kunderna uppdaterar produktionsinstanserna till den senaste snabbstarten på egen tid med referens till API Jar. Program på AEM as a Cloud Service uppdateras automatiskt till den senaste versionen av AEM oftare, så anpassad kod för interna releaser bör byggas mot den senaste AEM versionen.
Precis som för befintliga AEM som inte är molnbaserade stöds en lokal offlineutveckling baserad på en specifik snabbstart och förväntas vara det verktyg som normalt används för felsökning.
Det finns små skillnader i hur programmet fungerar på en lokal dator jämfört med Adobe Cloud. Dessa arkitektoniska skillnader måste respekteras under lokal utveckling och kan leda till ett annat beteende vid driftsättning i molninfrastrukturen. På grund av dessa skillnader är det viktigt att utföra de fullständiga testerna på dev- och stage-miljöer innan ny anpassad kod distribueras i produktionen.
För att utveckla anpassad kod för en intern release, den relevanta versionen av AEM as a Cloud Service SDK ska hämtas och installeras. Mer information om hur du använder AEM as a Cloud Service Dispatcher Tools finns i den här sidan.
I följande video visas en översikt på hög nivå över hur du distribuerar kod till AEM as a Cloud Service:
Kunder distribuerar anpassad kod till molnmiljöer via Cloud Manager. Cloud Manager omvandlar lokalt sammansatta innehållspaket till en artefakt som överensstämmer med Sling-funktionsmodellen, vilket är hur ett program på AEM as a Cloud Service beskrivs när det körs i en molnmiljö. När du tittar på paketen i Pakethanteraren i molnmiljöer innehåller namnet"cp2fm" och alla metadata har tagits bort för de omformade paketen. De kan inte interagera med dem, vilket innebär att de inte kan hämtas, replikeras eller öppnas. Detaljerad dokumentation om konverteraren kan hittades här.
Innehållspaket som skrivits för program på AEM as a Cloud Service måste ha en ren separation mellan oföränderligt och muterbart innehåll och Cloud Manager installerar bara det muterbara innehållet, och ett meddelande som följande skickas:
Generated content-package <PACKAGE_ID> located in file <PATH> is of MIXED type
Resten av detta avsnitt beskriver kompositionen och konsekvenserna av oföränderliga och ändringsbara paket.
Allt innehåll och all kod som lagras i den oföränderliga databasen måste checkas in i Git och distribueras via Cloud Manager. Kod distribueras med andra ord aldrig direkt till en AEM som körs, till skillnad från den aktuella AEM. Det här arbetsflödet säkerställer att koden som körs för en viss release i valfri molnmiljö är identisk, vilket eliminerar risken för oavsiktlig kodvariation i produktionen. Som ett exempel bör OSGI-konfigurationen implementeras för källkontroll i stället för att hanteras vid körning med hjälp av AEM webbkonsols konfigurationshanterare.
När programändringar på grund av distributionsmönstret aktiveras av en växel kan de inte vara beroende av ändringar i den ändringsbara databasen förutom för tjänstanvändare, deras åtkomstkontrollistor, nodtyper och ändringar i indexdefinitioner.
För kunder med befintliga kodbaser är det viktigt att gå igenom den databasomstrukturering som beskrivs i AEM dokumentation för att se till att innehåll som tidigare fanns under /etc flyttas till rätt plats.
Vissa ytterligare begränsningar gäller för dessa kodpaket, till exempel installera kopplingar stöds inte.
Som nämnts ovan bör OSGI-konfigurationen implementeras för källkontroll i stället för via webbkonsolen. Tekniker för detta är:
Läs mer om OSGI-konfiguration på Konfigurera OSGi för AEM as a Cloud Service.
Ibland kan det vara användbart att förbereda innehållsändringar i källkontrollen så att den kan distribueras av Cloud Manager när en miljö har uppdaterats. Det kan t.ex. vara rimligt att använda vissa rotmappsstrukturer. Eller justera ändringar i redigerbara mallar för att aktivera principkomponenter som uppdaterats av programdistributionen.
Det finns två strategier för att beskriva innehållet som distribueras av Cloud Manager till den ändringsbara databasen, innehållspaket som kan ändras och repoinit
-programsatser.
Innehåll som mappsökvägshierarkier, tjänstanvändare och åtkomstkontroller (ACL:er) är vanligtvis implementerade i ett maven-arkivtypsbaserat AEM. Teknikerna är bland annat att exportera från AEM eller skriva direkt som XML. Under bygg- och distributionsprocessen paketerar Cloud Manager det resulterande innehållspaketet som kan ändras. Det muterbara innehållet installeras vid tre olika tidpunkter under distributionsfasen i pipeline:
Innan den nya versionen av programmet startas:
Under starten av den nya versionen av programmet men före bytet:
Efter övergång till en ny version av programmet:
/conf
) (lägg till, ändra, ta bort)Det går att begränsa installationer av muterbart innehåll till författare eller publicering genom att bädda in paket i en install.author- eller install.publish-mapp under /apps
. Omstrukturering för att återspegla denna uppdelning gjordes i AEM 6.5 och närmare information om den rekommenderade projektomstruktureringen finns i AEM 6.5-dokumentation.
Innehållspaket distribueras till alla miljötyper (dev, stage, prod). Det går inte att begränsa distributionen till en viss miljö. Denna begränsning finns för att säkerställa möjligheten att testa automatiserad körning. Innehåll som är specifikt för en viss miljö kräver manuell installation Pakethanteraren.
Det finns inte heller någon mekanism för att återställa ändringar i det ändringsbara innehållspaketet efter att de har tillämpats. Om kunderna upptäcker ett problem kan de välja att åtgärda det i nästa kodversion eller som en sista utväg, återställa hela systemet till en tidpunkt före distributionen.
Alla inkluderade tredjepartspaket måste valideras som AEM as a Cloud Service kompatibla, annars leder inkludering till ett distributionsfel.
Som nämnts ovan bör kunder med befintliga kodbaser uppfylla kraven i den omstrukturering av databasen som krävs för de ändringar i 6.5-databasen som beskrivs i AEM 6.5-dokumentation.
I följande fall är det att föredra att använda handkodning för att skapa explicit innehåll repoinit
programsatser i OSGI-fabrikskonfigurationer:
Skapa/ta bort/inaktivera tjänstanvändare
Skapa/ta bort grupper
Skapa/ta bort användare
Lägg till åtkomstkontrollistor
Definitionen av åtkomstkontrollistor kräver att nodstrukturerna redan finns. Därför kan det vara nödvändigt att skapa en sökvägsprogramsats innan.
Lägg till sökväg (t.ex. för rotmappsstrukturer)
Lägga till CND (nodetypdefinitioner)
Repoinit är att föredra för de här användningsområdena för innehållsändringar som stöds på grund av följande fördelar:
Repoinit
skapar resurser vid start så att logiken kan ta tillvara dessa resurser för givet. I det ändringsbara innehållspaketet skapas resurser efter start, så programkod som förlitar sig på dem kan misslyckas.Repoinit
är en relativt säker instruktionsuppsättning eftersom du uttryckligen kontrollerar vilken åtgärd som ska vidtas. De enda åtgärder som stöds är dessutom additiva, förutom några säkerhetsrelaterade fall som tillåter borttagning av användare, tjänstanvändare och grupper. En borttagning av något i det ändringsbara innehållspaketet är däremot explicit. När du definierar ett filter tas allt som ingår i ett filter bort. Försiktighet bör dock iakttas eftersom det finns scenarier där förekomsten av nytt innehåll kan ändra programmets beteende.Repoinit
utför snabba och atomiska operationer. Blandbara innehållspaket i kontrast kan i hög grad vara beroende av prestanda beroende på de strukturer som täcks av ett filter. Även om du uppdaterar en enskild nod kan en ögonblicksbild av ett stort träd skapas.repoinit
programsatser på en lokal enhetsmiljö vid körning eftersom de körs när OSGi-konfigurationen registreras.Repoinit
-programsatser är atomiska och explicita och hoppas över om läget redan matchar.När Cloud Manager distribuerar programmet körs dessa programsatser, oberoende av installationen av innehållspaket.
Skapa repoinit
-programsatser, följ proceduren nedan:
org.apache.sling.jcr.repoinit.RepositoryInitializer
i en konfigurationsmapp för projektet. Använd ett beskrivande namn för konfigurationen som org.apache.sling.jcr.repoinit.RepositoryInitializer~initstructure.repoinit
-programsatser till egenskapen script för config. Syntaxen och alternativen beskrivs i Sling-dokumentation. En överordnad mapp bör skapas explicit före de underordnade mapparna. Ett exempel på en explicit skapelse av /content
före /content/myfolder
, före /content/myfolder/mysubfolder
. För åtkomstkontrollistor som ställs in på lågnivåstrukturer bör du ställa in dem på en högre nivå och arbeta med en rep:glob
begränsning. Till exempel: (allow jcr:read on /apps restriction(rep:glob,/msm/wcm/rolloutconfigs))
.För åtkomstkontrollistor definierade för noder under /apps
eller /libs
den repoinit
körs körningen i en tom databas. Paketen installeras efter repoinit
så att programsatser inte kan förlita sig på något som definierats i paketen, utan måste definiera villkoren, som de överordnade strukturerna under.
För åtkomstkontrollistor kan det vara besvärligt att skapa djupa strukturer. Därför är det rimligare att definiera en åtkomstkontrollista på en högre nivå och begränsa var den ska agera genom en rep:glob
begränsning.
Mer information om repoinit
finns i Sling-dokumentation
I vissa fall bör ett innehållspaket installeras som en"engångspaket". Om du till exempel importerar visst innehåll från produktion till mellanlagring felsöker du ett produktionsproblem. För dessa scenarier Pakethanteraren kan användas i miljöer på AEM as a Cloud Service.
Eftersom Package Manager är ett runtime-koncept går det inte att installera innehåll eller kod i den oföränderliga databasen, så dessa innehållspaket bör endast bestå av ändringsbart innehåll (huvudsakligen /content
eller /conf
). Om innehållspaketet innehåller innehåll som är blandat (både muterbart och oföränderligt innehåll) installeras endast det muterbara innehållet.
Pakethanterarens användargränssnitt kan returnera ett undefined felmeddelande om ett paket tar längre tid än tio minuter att installera.
Den här tidpunkten beror inte på ett fel i installationen, utan på en timeout som Cloud Servicen har för alla begäranden.
Försök inte installera igen om du ser ett sådant fel. Installationen fortsätter korrekt i bakgrunden. Om du startar om installationen kan vissa konflikter uppstå vid flera samtidiga importprocesser.
Alla innehållspaket som installeras med hjälp av Cloud Manager (både ändringsbart och oföränderligt) visas i ett låst läge i AEM användargränssnitt. Dessa paket kan inte installeras om, byggas om eller laddas ned, och finns listade med en "cp2fm" som anger att installationen hanterades av Cloud Manager.
Det är vanligt att kunder inkluderar färdiga paket från tredjepartskällor som programvaruleverantörer som Adobe översättning partners. Rekommendationen är att lagra dessa paket i en fjärrdatabas och referera till dem i pom.xml
. Den här metoden är möjlig för offentliga databaser och även för privata databaser med lösenordsskydd, vilket beskrivs i lösenordsskyddade maven-databaser.
Om det inte går att lagra paketet i en fjärrdatabas kan kunderna placera det i en lokal, filsystemsbaserad Maven-databas som är kopplad till SCM som en del av projektet. Det refereras av det som beror på det. Databasen deklareras i projektsökvägen enligt nedan:
<repository>
<id>project.local</id>
<name>project</name>
<url>file:${maven.multiModuleProjectDirectory}/repository</url>
</repository>
Alla inkluderade tredjepartspaket måste följa AEM riktlinjer för as a Cloud Service kodning och paketering som beskrivs i den här artikeln, annars leder inkludering till ett distributionsfel.
The following Maven POM.xml
utdrag visar hur tredjepartspaket kan bäddas in i projektets"Behållarpaket", vanligtvis namngivna all genom filevault-package-maven-plugin Konfiguration av plugin-programmet 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>
...
Precis som AEM uppdateringar distribueras kundreleaser med hjälp av en strategi för rullande driftsättning för att eliminera driftavbrott i utvecklarkluster under rätt omständigheter. Den allmänna händelsesekvensen beskrivs nedan, där noder med både den gamla och den nya versionen av kundkoden körs i samma version AEM koden.
Nya eller ändrade index orsakar ett extra indexerings- eller omindexeringssteg innan den nya versionen kan ta över trafik. Information om indexhantering i AEM as a Cloud Service finns i den här artikeln. Du kan kontrollera indexeringsstatusen för byggsidor i Cloud Manager och få ett meddelande när den nya versionen är klar att börja trafikera.
Den tid som krävs för en rullande distribution varierar beroende på indexets storlek. Orsaken är att den nya versionen inte accepterar trafik förrän det nya indexet genereras.
För närvarande fungerar inte AEM as a Cloud Service med indexhanteringsverktyg som ACS Commons Sörja för att index bryts.
Publiceringsfunktionen är bakåtkompatibel med AEM Replication Java™ API:er.
Om du vill utveckla och testa med replikering med molnklar AEM snabbstart måste du använda de klassiska replikeringsfunktionerna med en författare-/publiceringskonfiguration. Om användargränssnittets startpunkt på AEM Author tas bort för molnet går användarna till http://localhost:4502/etc/replication
för konfiguration.
AEM as a Cloud Service strategi för rullande driftsättning innebär, som beskrivs ovan, att både den gamla och den nya versionen kan användas samtidigt. Var därför försiktig med kodändringar som inte är bakåtkompatibla med den gamla AEM som fortfarande används.
Dessutom bör den gamla versionen testas för kompatibilitet med alla nya muterbara innehållsstrukturer som tillämpas i den nya versionen om det finns en återställning, eftersom muterbart innehåll inte tas bort.
Om du ändrar tjänstanvändare, eller åtkomstkontrollistor som har åtkomst till innehåll eller kod, kan det leda till fel i de äldre AEM versionerna, vilket leder till åtkomst till innehållet eller koden för de gamla tjänstanvändarna. Rekommendationen är att göra ändringar spridda över minst två versioner, där den första versionen fungerar som en länk innan den rensas i den efterföljande versionen.
Om ändringar görs i index är det viktigt att den nya versionen fortsätter att använda sina index tills den avslutas, medan den gamla versionen använder sin egen ändrade indexuppsättning. Utvecklaren bör följa de tekniker för indexhantering som beskrivs i den här artikeln.
Om ett fel rapporteras eller upptäcks efter distributionen kan det vara nödvändigt att återställa den gamla versionen. Se till att den nya koden är kompatibel med alla nya strukturer som skapas av den nya versionen eftersom de nya strukturerna (allt innehåll som kan ändras) inte återställs. Om den gamla koden inte är kompatibel måste korrigeringar tillämpas i efterföljande kundreleaser.
Snabba utvecklingsmiljöer (eller RDE i korthet) gör det möjligt för utvecklare att snabbt driftsätta och granska ändringar, vilket minimerar den tid som krävs för att testa funktioner som redan har befunnits fungera i en lokal utvecklingsmiljö.
Till skillnad från vanliga utvecklingsmiljöer, som distribuerar kod via molnhanterarens pipeline, använder utvecklare kommandoradsverktyg för att synkronisera kod från en lokal utvecklingsmiljö till den lokala utvecklingsmiljön. När ändringarna har testats i en RDE distribuerar du dem till en vanlig Cloud Development-miljö via Cloud Manager-pipelinen, vilket placerar koden via lämpliga kvalitetsportar.
I befintliga AEM kan kunderna köra instanser med godtyckliga körningslägen och använda OSGI-konfiguration eller installera OSGI-paket för dessa specifika instanser. Körningslägen som är definierade inkluderar service (författare och publicera) och miljön (rde, dev, stage, prod).
AEM as a Cloud Service å andra sidan är mer övertygande om vilka körlägen som finns tillgängliga och hur OSGI-paket och OSGI-konfigurationer kan mappas till dem:
<service>.<environment_type>
stöds, medan dessa miljöer måste användas i just denna ordning (till exempel author.dev
eller publish.prod
). OSGI-tokens ska refereras direkt från koden i stället för att använda getRunModes
som inte längre innehåller environment_type
vid körning. Mer information finns i Konfigurera OSGi för AEM as a Cloud Service.install.author
eller install.publish
.AEM as a Cloud Service tillåter inte att körningslägen används för att installera innehåll för specifika miljöer eller tjänster. Om en utvecklingsmiljö måste sjösättas med data eller HTML som inte finns i mellanlagrings- eller produktionsmiljöerna kan du använda Package Manager.
De körlägeskonfigurationer som stöds är:
Den OSGI-konfiguration som har de mest matchande körningslägena används.
Vid lokal utveckling, en startparameter för körningsläge, -r
, används för att ange OSGI-konfigurationen för körningsläge.
$ java -jar aem-sdk-quickstart-xxxx.x.xxx.xxxx-xxxx.jar -r publish,dev
Konfigurationer för underhållsaktiviteter måste sparas i källkontrollen eftersom Verktyg > Åtgärder skärmen är inte tillgänglig i molnmiljöer. Denna förmån säkerställer att ändringarna sparas avsiktligt i stället för att tillämpas och glöms bort. Se Underhållsaktivitetsartikel om du vill ha mer information.