Amaphakheji e-Adobe Experience Manager (AEM) angamaqhawe angaqashiwe okuphatha okuqukethwe - iziqukathi ezinamandla ezihlanganisa yonke into kusukela kukhodi nokulungiselelwa kuya kokuqukethwe okubalulekile. Kodwa masibhekane nakho: ukwenza mathupha, ukumisa, nokulanda lawa maphakheji kungase kuzwakale njengomdanso oyisicefe wokuchofoza.
Kuthiwani uma ubungenza le nqubo ngokuzenzakalelayo ngokuchofoza izinkinobho ezimbalwa, uqinisekise ukuvumelana, isivinini, ukwethembeka, kanye nokuphakamisa okusindayo okuncane?
Ngizokubonisa iskripthi se-Bash esiphenyisisa iskripthi (i-pun ihlosiwe!) sokuthi onjiniyela be-AEM nabaphathi basebenza kanjani ne-Package Manager API. Cabanga ngokwenza amaphakheji ngamasekhondi, ukuthunga izihlungi endizeni, kanye nokugoqa izipele ngokunemba kokuhlinzwa - konke ngaphambi kokuba ikhofi lakho liphole lifinyelele kulelo zinga lokushisa elihle kakhulu . ☕
Ngaphambi kokuthi sicwilise, inothi elisheshayo : Lesi sihloko siwukucwila okujulile, okunemininingwane ecokeme futhi okunobuchwepheshe obungenanjongo. Sizohlukanisa ukucabanga kombhalo, sihlole izinto eziyinkimbinkimbi ze-AEM API, futhi sixazulule amacala onqenqema. Konjiniyela abamagange ukugxumela ngqo kukhodi, ungagxumela phansi kwesihloko. Kodwa uma ulapha ukuze uqonde ukuthi kanjani futhi kungani ngemuva kwe-automation, bopha phakathi - sehla njalo ngembobo kanogwaja. 🕳️
Iskripthi create-remote-aem-pkg.sh
sisebenza ngokuzenzakalelayo ukusebenzisana ne-AEM's Package Manager API, sinikeza indlela ehlelekile yokudala iphakheji, ukumisa, nokusabalalisa. Idizayinelwe abathuthukisi nabaphathi, ingena esikhundleni sokugeleza komsebenzi okwenziwa ngesandla ngenqubo eqhutshwa ngomugqa womyalo egcizelela ukungaguquguquki nokuthembeka.
/content/dam
, /apps
) ukuze zifakwe kuphakheji.curl
./etc
noma /apps
ngaphambi kokufaka izibuyekezo zesistimu. ./create-remote-aem-pkg.sh admin securepass123 localhost 4502 backup-group "Content Backup" /backups /content/dam /etc/clientlibs
Lo myalo udala iphasela eliqanjwe ngokuthi “Isipele Sokuqukethwe” ngaphansi kweqembu le backup-group
, okuhlanganisa /content/dam
kanye /etc/clientlibs
, futhi igcina okukhiphayo kuhla lwemibhalo /backups
.
Masihlukanise iskripthi create-remote-aem-pkg.sh
(ungasithola ngaphansi kwesihloko) ukuze uqonde ukuthi sihlela kanjani ukuphathwa kwephakheji ye-AEM. Sizogxila esakhiweni sayo, imisebenzi ebalulekile, kanye nokucabanga kokugeleza komsebenzi—okulungele onjiniyela abafuna ukwenza ngendlela oyifisayo noma ukulungisa iphutha lethuluzi.
_log()
: Umsebenzi osetshenziswayo ofaka iziqalo zemilayezo ngezitembu zesikhathi zomzila wokuhlola ocacile. _log () { echo "[$(date +%Y.%m.%d-%H:%M:%S)] $1" }
Kungani kubalulekile : Iqinisekisa ukuthi zonke izenzo (isb., “Iphakheji elakhiwe”) lifakwe phakathi komongo, okwenza kube lula ukuxazulula inkinga.
check_last_exec()
: Iqinisekisa impumelelo yemiyalo yangaphambili ngokuhlola amakhodi okuphuma nezimpendulo ze-API. 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 }
Kungani kubalulekile : Igwema ukwehluleka buthule ngokumisa ukwenza kumaphutha abucayi njengezinkinga zokuqinisekisa noma izindlela ezingavumelekile.
Umbhalo wamukela ama-agumenti ezindawo eziyisikhombisa alandelwa izihlungi eziguqukayo:
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")
Izimpikiswano zokuma ziqinisekisa ubulula, kuyilapho shift
iphatha izindlela zokuhlunga eziguquguqukayo kalula.
PKG_NAME
ngama-underscore ukuze kugwenywe izinkinga ze-URL. PKG_NAME=${PKG_NAME// /_}
curl
ukuze ifake uhlu lwamaphakheji nge-API ye-AEM, igwema ukudalwa okungafuneki. if [ $(curl ... | grep "$PKG_NAME.zip" | wc -l) -eq 1 ]; then _log "Package exists—skipping creation." else curl -X POST ... # Creates the package fi
Yakha izihlungi ze-JSON eziphuma ezindleleni zokufaka:
FILTERS_PARAM="" for i in "${!FILTERS[@]}"; do FILTERS_PARAM+="{\"root\": \"${FILTERS[$i]}\", \"rules\": []}" # Adds commas between entries, but not after the last done
Isibonelo esiphumayo :
[{"root": "/content/dam"}, {"root": "/apps"}]
Le JSON ifakwa encazelweni yephakheji nge-AEM's /crx/packmgr/update.jsp
endpoint.
build
we-AEM: curl -X POST … -F "cmd=build"
Qaphela : Umbhalo ulinda ukuthi ukwakhiwa kuqedwe ngaphambi kokuqhubeka.
curl
ukuze ilande .zip
futhi iyilondoloze ngegama lefayela elinesitembu sesikhathi: BK_FILE="$PKG_NAME-$(date +%Y%m%d-%H%M%S).zip" curl -o "$BK_FOLDER/$BK_FILE" ...
Ukuphatha amaphutha aqinile nokuloga kubalulekile kumaskripthi angagadiwe afana create-remote-aem-pkg.sh
, ukuqinisekisa ukuthi ukwehluleka kubanjwa kusenesikhathi futhi kufakwe ngokusobala. Nansi indlela iskripthi sivikela ngayo ezinkingeni ezingalindelekile futhi sinikeza imininingwane engenzeka.
_log
ufaka isiqalo somlayezo wonke ngesitembu sesikhathi esingu- [YYYY.MM.DD-HH:MM:SS]
, udala umzila wokuhlola wokususa iphutha: _log "Starting backup process..." # Output: [2023.10.25-14:30:45] Starting backup process...
Kungani kubalulekile : Izitembu zesikhathi zisiza ukuhlobanisa umsebenzi weskripthi namalogu eseva ye-AEM noma imicimbi yangaphandle (isb, amashejuli emisebenzi ye-cron).
Ukuhlola Ngaphambi Kokundiza :
BK_FOLDER
) ngaphambi kokuqhubeka: if [ ! -d "$BK_FOLDER" ]; then _log "Backup folder '$BK_FOLDER' does not exist!" && exit 1 fi
PKG_NAME
ukuze igweme izinkinga ze-URL (isb, izikhala ezithathelwa indawo ama-underscore).
Ukuqinisekiswa Kwempendulo ye-API :
Umsebenzi check_last_exec
uhlola womabili amakhodi okuphuma egobolondweni ( $?
) kanye nezimpendulo ze-AEM API:
check_last_exec "Error message" "$CURL_OUTPUT" $CURL_STATUS
curl
) aqala ukuphuma ngokushesha.
success\":false
noma iyunithi yezinhlamvu ethi "HTTP ERROR" ekuphumeni kwe-AEM.
3.3 Ukuqinisekiswa Kwesimo Se-HTTP : Lapho ulanda iphakheji, umbhalo uhlola ikhodi yesimo 200
:
if [ "$(curl -w "%{http_code}" ...)" -eq "200" ]; then # Proceed if download succeeds else _log "Error downloading the package!" && exit 1 fi
check_last_exec
ibamba izimpendulo 401 Unauthorized
futhi iphuma ngomlayezo wephutha ocacile.success:false
, amalogi ombhalo "Iphutha lokwengeza izihlungi" futhi iyanqamula.BK_FILE
, ihlola usayizi wefayela nge -s
ifulegi kanye nezixwayiso ngaphambi kokuphuma.curl
iphuma ngekhodi okungelona uziro, umbhalo ubhalwe ukuthi "Iphutha ekwakheni iphakheji".curl -k
ukuze kube lula, okweqa ukuqinisekiswa kwe-SSL. Isincomo Sokukhiqiza : Faka esikhundleni ngokuthi --cacert
ukuze ucacise inqwaba ye-CA.
$AEM_PASSWORD
).set -x
ekuqaleni kweskripthi ukuze uphrinte imiyalo ekhishiwe.curl
ebalulekile ngaphandle kweskripthi ./create-remote-aem-pkg.sh ... >> /var/log/aem_backup.log 2>&1
Iskripthi create-remote-aem-pkg.sh
siklanyelwe ukuba isiqalo—isisekelo ongakwazi ukusishintsha ukuze sihambisane nezidingo zeqembu lakho. Ngezansi kukhona ukwenza ngokwezifiso okuvamile, kanye neziqondiso zokusetshenziswa, ukuze kunwetshwe ukusebenza kwayo noma kuzivumelanise nezimo ezithile zokusetshenziswa.
Igama lefayela elizenzakalelayo lisebenzisa isitembu sesikhathi ( $PKG_NAME-$(date +%Y%m%d-%H%M%S).zip
). Lungisa lokhu ukuze ufake amagama emvelo, ama-ID wephrojekthi, noma inguqulo ye-semantic:
# 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"
Ithiphu : Qinisekisa ukuthi amafomethi osuku/isikhathi agwema izinhlamvu ezenqatshelwe emagameni wefayela (isb., amakholoni :
ku-Windows).
Iskripthi samukela izindlela eziguquguqukayo njengezihlungi kodwa ungakwazi futhi ukufaka ikhodi eqinile izindlela ezisetshenziswa njalo noma wengeze okungafakwanga:
# 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/*\"}]}"
Gwema Amagama Ayimfihlo Ayimfihlo :
Sebenzisa okuguquguqukayo kwendawo noma umphathi wezimfihlo ukuze ujove izifakazelo:
# 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)
Qinisekisa ukuqinisekiswa kwe-SSL :
Faka esikhundleni curl -k
(engavikelekile) ngesitifiketi se-CA esithenjwayo:
curl --cacert /path/to/ca-bundle.crt -u "$USR":"$PWD" ...
Nweba umbhalo ukuze uqalise izinqubo eziya phansi ngemva kokulanda ngempumelelo:
# 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 {} \;
Yazisa amaqembu ngempumelelo/ukwehluleka nge-Slack, i-imeyili, noma amathuluzi okuqapha:
# 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
Ukuphatha amaphakheji e-AEM akudingeki kube umsebenzi owenziwa ngesandla, onephutha. Ngeskripthi create-remote-aem-pkg.sh
, ungakwazi ukuguqula ukudalwa kwephakheji, ukuhlunga, nokusabalalisa kube inqubo elula, ephindaphindwayo. Leli thuluzi alikona nje ukonga isikhathi, limayelana nokunika amandla ukungaguquguquki, ukwethembeka, kanye nokulinganisa emisebenzini yakho ye-AEM.
Okuzenzakalelayo Kuyawina : Ngokususa ukusebenzisana okuphindaphindayo kwe-GUI, umbhalo wehlisa amaphutha abantu futhi ukhulula amaqembu ukuthi agxile emisebenzini yenani eliphezulu.
Izindaba Ezivumelana Nezimo : Noma ngabe yenza ikhophi yasenqolobaneni yokuqukethwe okubalulekile, izindawo zokuvumelanisa, noma ukulungiselela izibuyekezo, umbhalo uzivumelanisa nezimo ezihlukahlukene zokusetshenziswa ezinokulungiswa okuncane.
Ukuqina Kungukhiye : Ukungena okwakhelwe ngaphakathi, ukuhlolwa kwamaphutha, nokucatshangelwa kokuvikeleka kuqinisekisa ukuthi iskripthi siziphatha ngendlela ebikezelwayo, noma ngabe izinto ziya eceleni.
Amathuluzi amahle azalwa ngezinselele zomhlaba wangempela. Lesi script siyisiqalo; kucabange njengesisekelo ongakhela phezu kwaso njengoba izidingo zeqembu lakho zikhula. Kungakhathaliseki ukuthi ungunjiniyela oyedwa noma uyingxenye yeqembu elikhulu le-DevOps, ukuzenzela okufana nalokhu kuyisibonelo sokuthi ukutshalwa kwezimali okuncane kwekhodi kungaletha izinzuzo ezinkulu ekukhiqizeni nasekuthuleni kwengqondo.
Ulungele ukuthatha isinyathelo esilandelayo?
Siyabonga ngokulandela - manje phuma wenze ngokuzenzakalela! 🚀
#!/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
[¹] Ukweqa ukuqinisekiswa kwe-SSL nge curl -k
kuyasiza ekuhlolweni, kodwa uzofuna okuthile okuqinile ekukhiqizeni (ngokwesibonelo --cacert
)!