paint-brush
'n DevOps-benadering tot AEM-pakkette: outomatisering van skepping, konfigurasie en meerdeur@realgpp
Nuwe geskiedenis

'n DevOps-benadering tot AEM-pakkette: outomatisering van skepping, konfigurasie en meer

deur Giuseppe Baglio11m2025/02/16
Read on Terminal Reader

Te lank; Om te lees

Die `create-remote-aem-pkg.sh script outomatiseer interaksies met AEM se Package Manager API, wat 'n gestruktureerde benadering tot pakketskepping, konfigurasie en verspreiding bied. Dit is ontwerp vir ontwikkelaars en administrateurs en vervang handmatige werkvloei met 'n opdraglyngedrewe proses wat konsekwentheid en betroubaarheid beklemtoon.
featured image - 'n DevOps-benadering tot AEM-pakkette: outomatisering van skepping, konfigurasie en meer
Giuseppe Baglio HackerNoon profile picture

Adobe Experience Manager (AEM)-pakkette is die onbesonge helde van inhoudbestuur - kragtige houers wat alles van kode en konfigurasies tot kritieke inhoud saambind. Maar kom ons erken dit: om hierdie pakkette met die hand te skep, op te stel en af te laai, kan soos 'n vervelige dans van klik voel.


Wat as jy hierdie proses met 'n paar toetsaanslagen kan outomatiseer, wat konsekwentheid, spoed, betroubaarheid en minder swaar opheffing verseker?


Ek sal vir jou 'n Bash-skrip wys wat die skrif omdraai (woordspeling bedoel!) oor hoe AEM-ontwikkelaars en -administrateurs met die Package Manager API werk. Dink daaraan om pakkette binne sekondes te maak, filters dadelik aan te pas, en rugsteun met chirurgiese akkuraatheid vas te maak - alles voordat jou koffie afkoel tot daardie perfekte teugtemperatuur. ☕


Voordat ons induik, 'n vinnige nota : Hierdie artikel is 'n diep duik, noukeurig gedetailleerd en onverskoonbaar tegnies. Ons sal die skrif se logika dissekteer, AEM API-verwikkelinge verken en randgevalle oplos. Vir ontwikkelaars wat gretig is om reguit in die kode te spring, kan jy na die onderkant van die artikel spring. Maar as jy hier is om die hoe en hoekom agter die outomatisering te verstaan, maak vas - ons gaan al die pad af in die konyngat. 🕳️

1. Skripoorsig

Die create-remote-aem-pkg.sh script outomatiseer interaksies met AEM se Package Manager API, en bied 'n gestruktureerde benadering tot pakketskepping, konfigurasie en verspreiding. Dit is ontwerp vir ontwikkelaars en administrateurs en vervang handmatige werkvloei met 'n opdraglyngedrewe proses wat konsekwentheid en betroubaarheid beklemtoon.

1.1 Kernfunksies

  • Pakketvalidering : Kontroleer vir bestaande pakkette om oortolligheid te vermy voordat die skepping begin word.
  • Dinamiese filterinspuiting : Definieer inhoudspaaie (bv. /content/dam , /apps ) programmatig om by die pakket in te sluit.
  • Bou-outomatisering : aktiveer pakketsamestelling en laai die uitvoer af na 'n gespesifiseerde gids, en voeg 'n tydstempel by lêername vir weergawebeheer.
  • Fouthantering : Valideer HTTP-antwoorde, vouerpaaie en stawing om uitvoerbare terugvoer te gee tydens mislukkings.
  • Stawing : Ondersteun basiese¹ geloofsbriewe-gebaseerde stawing via curl .

1.2 Sleutelvoordele

  • Doeltreffendheid : Verminder handmatige stappe wat nodig is vir pakketskepping, opstelling en aflaai.
  • Konsekwentheid : Verseker eenvormige pakketstrukture en naamkonvensies oor omgewings heen.
  • Naspeurbaarheid : Gedetailleerde aantekening in elke stadium (skepping, filtering, bou, aflaai) help met ouditering en probleemoplossing.

1.3 Praktiese toepassings

  • Geskeduleerde rugsteune : Integreer met cron-take om kritiese inhoudpaaie gereeld te argiveer.
  • Omgewingssinchronisasie : Repliseer konfigurasies of inhoud tussen AEM-gevalle tydens ontplooiings.
  • Vooropdateer kiekies : Vang stabiele toestande van /etc of /apps vas voordat stelselopdaterings toegepas word.

1.4 Voorvereistes

  • Toegang tot 'n AEM-instansie (geloofsbriewe, bediener, poort).
  • Basiese vertroudheid met Bash scripting en AEM se pakketbestuurder.
  • Toestemming om pakkette te skep en af te laai via die AEM API.

1.5 Voorbeeld Gebruik

 ./create-remote-aem-pkg.sh admin securepass123 localhost 4502 backup-group "Content Backup" /backups /content/dam /etc/clientlibs


Hierdie opdrag skep 'n pakket met die naam "Content Backup" onder die groep backup-group , insluitend /content/dam en /etc/clientlibs , en stoor die uitvoer na die /backups -gids.

2. Skripontleding

Kom ons dissekteer die create-remote-aem-pkg.sh -skrip (jy kan dit onderaan die artikel vind) om te verstaan hoe dit AEM-pakketbestuur orkestreer. Ons sal fokus op die struktuur, sleutelfunksies en werkvloeilogika – ideaal vir ontwikkelaars wat die nutsding wil aanpas of ontfout.

2.1 Kernfunksies

  • _log() : 'n Nutsfunksie wat boodskappe met tydstempels voorvoeg vir duidelike ouditroetes.
 _log () { echo "[$(date +%Y.%m.%d-%H:%M:%S)] $1" }


Hoekom dit saak maak : Verseker dat elke aksie (bv. "Pakket gebou") met konteks aangeteken word, wat die probleemoplossing vereenvoudig.

  • check_last_exec() : Bekragtig die sukses van vorige opdragte deur uitgangkodes en API-antwoorde na te gaan.
 check_last_exec () { # Checks $? (exit status) and $CURL_OUTPUT for errors if [ "$status" -ne 0 ] || [[ $output =~ .*success\":false* ]]; then _log "Error detected!"; exit 1; fi }

Hoekom dit saak maak : Voorkom stille mislukkings deur die uitvoering van kritieke foute soos stawingkwessies of ongeldige paaie te staak.

2.2 Invoerparameters

Die skrif aanvaar sewe posisionele argumente gevolg deur dinamiese filters:

 USR="$1" # AEM username PWD="$2" # AEM password SVR="$3" # Server host (eg, localhost) PORT="$4" # Port (eg, 4502) PKG_GROUP="$5" # Package group (eg, "backups") PKG_NAME="$6" # Package name (eg, "dam-backup") BK_FOLDER="$7" # Backup directory (eg, "/backups") shift 7 # Remaining arguments become filters (eg, "/content/dam")


Posisionele argumente verseker eenvoud, terwyl shift veranderlike filterpaaie buigsaam hanteer.

2.3 Pakketvalidering en -skepping

  • Ontsmet name : Vervang spasies in PKG_NAME met onderstrepings om URL-kwessies te vermy.
 PKG_NAME=${PKG_NAME// /_}
  • Kontroleer bestaande pakkette : Gebruik curl om pakkette via AEM se API te lys, om oortollige skeppings te vermy.
 if [ $(curl ... | grep "$PKG_NAME.zip" | wc -l) -eq 1 ]; then _log "Package exists—skipping creation." else curl -X POST ... # Creates the package fi

2.4 Dinamiese filterkonfigurasie

Konstrueer 'n JSON-reeks filters vanaf invoerpaaie:

 FILTERS_PARAM="" for i in "${!FILTERS[@]}"; do FILTERS_PARAM+="{\"root\": \"${FILTERS[$i]}\", \"rules\": []}" # Adds commas between entries, but not after the last done


Voorbeeld uitset :

[{"root": "/content/dam"}, {"root": "/apps"}]

Hierdie JSON word in die pakketdefinisie ingespuit via AEM se /crx/packmgr/update.jsp eindpunt.

2.5 Bou en laai werkvloei af

  • Bou die pakket : Begin samestelling met behulp van AEM se build -opdrag:

curl -X POST … -F "cmd=build"


Let wel : Die skrip wag vir die bou om te voltooi voordat u voortgaan.

  • Aflaai : Gebruik curl om die .zip te gaan haal en stoor dit met 'n tydstempel lêernaam:
 BK_FILE="$PKG_NAME-$(date +%Y%m%d-%H%M%S).zip" curl -o "$BK_FOLDER/$BK_FILE" ...

3. Fouthantering, Sekuriteitsnotas en aanteken

Robuuste fouthantering en aanteken is van kritieke belang vir onbewaakte skrifte soos create-remote-aem-pkg.sh , om te verseker dat foute vroeg opgespoor en duidelik aangeteken word. Hier is hoe die skrif teen onverwagte kwessies beskerm en uitvoerbare insigte verskaf.

3.1 Tekenmeganisme

  • Tydstempellogs : Die _log funksie voeg 'n [YYYY.MM.DD-HH:MM:SS] voor elke boodskap voor, wat 'n ouditspoor vir ontfouting skep:

_log "Starting backup process..." # Output: [2023.10.25-14:30:45] Starting backup process...


Hoekom dit saak maak : Tydstempels help om skrifaktiwiteit te korreleer met AEM-bedienerlogboeke of eksterne gebeurtenisse (bv. cron-werkskedules).

  • Uitgebreide uitvoer : Kritiese stappe, soos pakketskepping, filteropdaterings en aflaaie, word uitdruklik aangeteken om vordering na te spoor.

3.2 Foutvalideringswerkvloei

Voorvlugkontroles :

  • Bekragtig die bestaan van die rugsteunlêer ( BK_FOLDER ) voordat u voortgaan:
 if [ ! -d "$BK_FOLDER" ]; then _log "Backup folder '$BK_FOLDER' does not exist!" && exit 1 fi
  • Sanitiseer PKG_NAME om URL-kwessies te vermy (bv. spasies vervang met onderstrepe).


API-antwoordbekragtiging :

Die check_last_exec -funksie ondersoek beide dopuitgangskodes ( $? ) en AEM API-antwoorde:

check_last_exec "Error message" "$CURL_OUTPUT" $CURL_STATUS

  • Uittreekodes : Nie-nul waardes (bv. curl ) veroorsaak onmiddellike uitgange.


  • API-foute : Bespeur success\":false JSON-antwoorde of "HTTP-FOUT"-stringe in AEM-uitvoer.


3.3 HTTP-statusverifikasie : Wanneer die pakket afgelaai word, kyk die skrip vir 'n 200 statuskode:

 if [ "$(curl -w "%{http_code}" ...)" -eq "200" ]; then # Proceed if download succeeds else _log "Error downloading the package!" && exit 1 fi

3.4 Algemene Mislukkingscenario's

  • Ongeldige geloofsbriewe: check_last_exec vang 401 Unauthorized antwoorde op en gaan uit met 'n duidelike foutboodskap.
  • Ongeldige filterpad: AEM API gee success:false terug, die skrip registreer "Fout byvoeging van filters" en beëindig.
  • Skyf vol: Versuim om BK_FILE te skryf, kontroleer lêergrootte met -s vlag en waarskuwings voor jy verlaat.
  • AEM-instansie onbereikbaar: curl uitgange met 'n nie-nul-kode, die skrip teken "Fout met die bou van die pakket".

3.5 Sekuriteitsoorwegings

  • SSL-sertifikaat-omseil : Die skrip gebruik curl -k vir eenvoud, wat SSL-verifikasie oorslaan. Aanbeveling vir produksie : Vervang met --cacert om 'n CA-bundel te spesifiseer.


  • Plaintext Wagwoorde : Geloofsbriewe word as argumente deurgegee, wat in proseslogboeke kan verskyn. Versagting : Gebruik omgewingsveranderlikes of 'n geheime kluis (bv. $AEM_PASSWORD ).

3.6 Ontfoutingswenke

  • Aktiveer uitgebreide uitvoer : Voeg tydelik set -x by die skrif se begin by om uitgevoerde opdragte te druk.
  • Toets API-oproepe handmatig : Isoleer probleme deur kritieke curl -opdragte buite die skrif uit te voer
  • Inspekteer logs : Herlei skripuitvoer na 'n lêer vir latere ontleding:

./create-remote-aem-pkg.sh ... >> /var/log/aem_backup.log 2>&1

4. Pas die instrument aan by jou werkvloei

Die create-remote-aem-pkg.sh -skrip is ontwerp om 'n beginpunt te wees - 'n fondasie wat jy kan verander om by jou span se behoeftes te pas. Hieronder is algemene aanpassings, tesame met implementeringsleiding, om die funksionaliteit daarvan uit te brei of aan te pas by spesifieke gebruiksgevalle.

4.1 Aanpassing van die rugsteunlêernaamformaat

Die verstek lêernaam gebruik 'n tydstempel ( $PKG_NAME-$(date +%Y%m%d-%H%M%S).zip ). Verander dit om omgewingsname, projek-ID's of semantiese weergawe in te sluit:

 # Example: Include environment (eg, "dev", "prod") BK_FILE="${PKG_NAME}-${ENV}-$(date +%Y%m%d).zip" # Example: Add Git commit SHA for traceability COMMIT_SHA=$(git rev-parse --short HEAD) BK_FILE="${PKG_NAME}-${COMMIT_SHA}.zip"

Wenk : Maak seker dat datum/tyd-formate karakters vermy wat in lêername verbode is (bv. dubbelpunte : op Windows).

4.2 Uitbreiding of wysiging van filters

Die skrip aanvaar dinamiese paaie as filters, maar jy kan ook gereeld gebruikte paaie hardkodeer of uitsluitings byvoeg:

 # Hardcode essential paths (eg, "/var/audit") DEFAULT_FILTERS=("/content/dam" "/apps" "/var/audit") FILTERS=("${DEFAULT_FILTERS[@]}" "${@}") # Merge with command-line inputs # Add exclusion rules (requires AEM API support) FILTERS_PARAM+="{\"root\": \"${FILTERS[$i]}\", \"rules\": [{\"modifier\": \"exclude\", \"pattern\": \".*/test/*\"}]}"

4.3 Verbetering van sekuriteit


Vermy gewone teks wagwoorde :

Gebruik omgewingsveranderlikes of 'n geheime bestuurder om geloofsbriewe in te spuit:

 # Fetch password from environment variable PWD="$AEM_PASSWORD" # Use AWS Secrets Manager (example) PWD=$(aws secretsmanager get-secret-value --secret-id aem/prod/password --query SecretString --output text)


Dwing SSL-bekragtiging af :
Vervang curl -k (onseker) met 'n vertroude CA-sertifikaat:

 curl --cacert /path/to/ca-bundle.crt -u "$USR":"$PWD" ...

4.4 Byvoeging van na-bou-aksies

Brei die skrip uit om stroomaf-prosesse te aktiveer na 'n suksesvolle aflaai:

 # Example: Upload to cloud storage aws s3 cp "$BK_FOLDER/$BK_FILE" s3://my-backup-bucket/ # Example: Validate package integrity CHECKSUM=$(sha256sum "$BK_FOLDER/$BK_FILE" | cut -d ' ' -f 1) _log "SHA-256 checksum: $CHECKSUM" # Example: Clean up old backups (retain last 7 days) find "$BK_FOLDER" -name "*.zip" -mtime +7 -exec rm {} \;

4.5 Byvoeging van kennisgewingwaarskuwings

Stel spanne in kennis van sukses/mislukking via Slack-, e-pos- of moniteringsinstrumente:

 # Post to Slack on failure curl -X POST -H 'Content-type: application/json' \ --data "{\"text\":\"🚨 AEM backup failed: $(hostname)\"}" \ https://hooks.slack.com/services/YOUR/WEBHOOK/URL # Send email via sendmail if [ $? -ne 0 ]; then echo "Subject: Backup Failed" | sendmail [email protected] fi

5. Gevolgtrekking

Die bestuur van AEM-pakkette hoef nie 'n handmatige, foutgevoelige taak te wees nie. Met die create-remote-aem-pkg.sh aem-pkg.sh-skrip kan u pakketskepping, -filtrering en -verspreiding omskep in 'n vaartbelynde, herhaalbare proses. Hierdie instrument gaan nie net oor tydbesparing nie, dit gaan daaroor om konsekwentheid, betroubaarheid en skaalbaarheid in jou AEM-bedrywighede moontlik te maak.

Sleutel wegneemetes

  1. Outomatisering wen : Deur herhalende GUI-interaksies uit te skakel, verminder die skrif menslike foute en stel spanne vry om op take van hoër waarde te fokus.


  2. Buigsaamheid maak saak : Of u kritiese inhoud rugsteun, omgewings sinkroniseer of voorberei vir opdaterings, die skrif pas aan by uiteenlopende gebruiksgevalle met minimale aanpassings.


  3. Veerkragtigheid is die sleutel : Ingeboude aantekening, foutkontroles en sekuriteitsoorwegings verseker dat die skrif voorspelbaar optree, selfs wanneer dinge sywaarts gaan.


Groot gereedskap word gebore uit werklike uitdagings. Hierdie draaiboek is 'n beginpunt; dink daaraan as 'n fondament om op voort te bou soos wat jou span se behoeftes groei. Of jy nou 'n solo-ontwikkelaar of deel van 'n groot DevOps-span is, outomatisering soos hierdie is 'n voorbeeld van hoe klein beleggings in kode buitensporige opbrengste in produktiwiteit en gemoedsrus kan oplewer.


Gereed om die volgende stap te neem?

  • 🛠️ Pasmaak : Pas die skrif aan deur afdeling 6 as jou gids te gebruik.
  • 🔍 Oudit : Gaan jou bestaande AEM-werkvloei na vir outomatiseringsgeleenthede.
  • 🤝 Deel : Mentor jou span of skryf 'n blogplasing oor jou wysigings.


Dankie dat jy saam volg - gaan nou voort en outomatiseer! 🚀

Bylaag

Voltooi kode

 #!/bin/bash set -eo pipefail # The script will create a package thought the package manager api: # - The package is created, if not already present # - Package filters are populated accordingly to specified paths # - Package is builded # - Package is download to the specified folder _log () { echo "[$(date +%Y.%m.%d-%H:%M:%S)] $1" } check_last_exec () { local message="$1" local output="$2" local status=$3 if [ "$status" -ne 0 ]; then echo && echo "$message" && echo exit 1 fi if [[ $output =~ .*success\":false* ]] || [[ $output =~ .*"HTTP ERROR"* ]]; then _log "$message" exit 1 fi } USR="$1" PWD="$2" SVR="$3" PORT="$4" PKG_GROUP="$5" PKG_NAME="$6" BK_FOLDER="$7" shift 7 # The following paths will be included in the package FILTERS=($@) BK_FILE=$PKG_NAME"-"$(date +%Y%m%d-%H%M%S).zip _log "Starting backup process..." echo "AEM instance: '$SVR':'$PORT' AEM User: '$USR' Package group: $PKG_GROUP Package name: '$PKG_NAME' Destination folder: $BK_FOLDER Destination file: '$BK_FILE' Filter paths: " printf '\t%s\n\n' "${FILTERS[@]}" if [ ! -d "$BK_FOLDER" ]; then _log "Backup folder '$BK_FOLDER' does not exist!" && echo exit 1 fi PKG_NAME=${PKG_NAME// /_} check_last_exec "Error replacing white space chars from package name!" "" $? || exit 1 _log "Removed whitespaces from package name: '$PKG_NAME'" BK_FILE=$PKG_NAME.zip _log "Backup file: '$BK_FILE'" _log "Creating the package..." if [ $(curl -k -u "$USR":"$PWD" "$SVR:$PORT/crx/packmgr/service.jsp?cmd=ls" 2>/dev/null | grep "$PKG_NAME.zip" | wc -l) -eq 1 ]; then _log " Package '$PKG_GROUP/$PKG_NAME' is already present: skipping creation." else curl -k --silent -u "$USR":"$PWD" -X POST \ "$SVR:$PORT/crx/packmgr/service/.json/etc/packages/$PKG_GROUP/$PKG_NAME?cmd=create" \ -d packageName="$PKG_NAME" -d groupName="$PKG_GROUP" check_last_exec " Error creating the package!" "" $? _log " Package created" fi # create filters variable FILTERS_PARAM="" ARR_LEN="${#FILTERS[@]}" for i in "${!FILTERS[@]}"; do FILTERS_PARAM=$FILTERS_PARAM"{\"root\": \"${FILTERS[$i]}\", \"rules\": []}" T=$((i+1)) if [ $T -ne $ARR_LEN ]; then FILTERS_PARAM=$FILTERS_PARAM", " fi done # add filters _log "Adding filters to the package..." CURL_OUTPUT=$(curl -k --silent -u "$USR":"$PWD" -X POST "$SVR:$PORT/crx/packmgr/update.jsp" \ -F path=/etc/packages/"$PKG_GROUP"/"$PKG_NAME".zip -F packageName="$PKG_NAME" \ -F groupName="$PKG_GROUP" \ -F filter="[$FILTERS_PARAM]" \ -F "_charset_=UTF-8") CURL_STATUS=$? # Pass the status to the check_last_exec function check_last_exec "Error adding filters to the package!" "$CURL_OUTPUT" $CURL_STATUS _log " Package filters updated successfully." # build package _log "Building the package..." CURL_OUTPUT=$(curl -k -u "$USR":"$PWD" -X POST \ "$SVR:$PORT/crx/packmgr/service/script.html/etc/packages/$PKG_GROUP/$PKG_NAME.zip" \ -F "cmd=build") check_last_exec " Error building the package!" "$CURL_OUTPUT" $? _log " Package built." # download package _log "Downloading the package..." if [ "$(curl -w "%{http_code}" -o "$BK_FOLDER/$BK_FILE" -k --silent -u "$USR":"$PWD" "$SVR:$PORT/etc/packages/$PKG_GROUP/$PKG_NAME.zip")" -eq "200" ]; then if [ -f "$BK_FOLDER/$BK_FILE" ] && [ -s "$BK_FOLDER/$BK_FILE" ]; then _log " Package $BK_FILE downloaded in $BK_FOLDER." exit 0 fi fi _log " Error downloading the package!" exit 1


Verwysings

[¹] Om SSL-verifikasie oor te slaan met curl -k is handig om te toets, maar jy sal iets stewiger in produksie wil hê (byvoorbeeld --cacert )!


[²] AEM Pakketbestuurder Amptelike Dokumentasie