paint-brush
ДевОпс приступ АЕМ пакетима: аутоматизација креирања, конфигурисања и још много тогаод стране@realgpp
Нова историја

ДевОпс приступ АЕМ пакетима: аутоматизација креирања, конфигурисања и још много тога

од стране Giuseppe Baglio11m2025/02/16
Read on Terminal Reader

Предуго; Читати

Скрипта `цреате-ремоте-аем-пкг.сх аутоматизује интеракције са АЕМ-овим АПИ-јем менаџера пакета, нудећи структурирани приступ креирању, конфигурацији и дистрибуцији пакета. Дизајниран за програмере и администраторе, замењује ручне токове посла процесом вођеним командном линијом који наглашава доследност и поузданост.
featured image - ДевОпс приступ АЕМ пакетима: аутоматизација креирања, конфигурисања и још много тога
Giuseppe Baglio HackerNoon profile picture

Адобе Екпериенце Манагер (АЕМ) пакети су неопевани хероји управљања садржајем — моћни контејнери који спајају све, од кода и конфигурација до критичног садржаја. Али хајде да се суочимо са тим: ручно креирање, конфигурисање и преузимање ових пакета може изгледати као досадан плес кликова.


Шта ако бисте могли да аутоматизујете овај процес са неколико притисака на тастере, обезбеђујући доследност, брзину, поузданост и мање подизање терета?


Показаћу вам Басх скрипту која преокреће скрипту (намера речи!) о томе како АЕМ програмери и администратори раде са АПИ менаџера пакета. Размислите о изради пакета за неколико секунди, кројењу филтера у ходу и прављењу резервних копија са хируршком прецизношћу — све пре него што се ваша кафа охлади до савршене температуре за испијање. ☕


Пре него што заронимо, кратка напомена : Овај чланак је детаљан , детаљно детаљан и технички без извињења. Размотрићемо логику скрипте, истражити замршености АЕМ АПИ-ја и решити ивичне случајеве. За програмере који желе да ускоче директно у код, можете скочити на дно чланка. Али ако сте овде да разумете како и зашто стоји иза аутоматизације, причврстите се – идемо скроз доле до зечје рупе. 🕳

1. Преглед скрипте

create-remote-aem-pkg.sh скрипта аутоматизује интеракције са АЕМ-овим АПИ менаџера пакета, нудећи структурирани приступ креирању, конфигурацији и дистрибуцији пакета. Дизајниран за програмере и администраторе, замењује ручне токове посла процесом вођеним командном линијом који наглашава доследност и поузданост.

1.1 Основне функције

  • Валидација пакета : Проверава постојеће пакете да би се избегла редундантност пре него што започне креирање.
  • Убацивање динамичког филтера : Програмски дефинише путање садржаја (нпр. /content/dam , /apps ) које треба укључити у пакет.
  • Аутоматизација изградње : Покреће компилацију пакета и преузима излаз у одређени директоријум, додајући временску ознаку именима датотека за контролу верзија.
  • Руковање грешкама : Потврђује ХТТП одговоре, путање фасцикли и аутентификацију да би се пружиле повратне информације које се могу предузети током неуспеха.
  • Аутентификација : Подржава основну¹ аутентификацију засновану на акредитивима преко curl .

1.2 Кључне предности

  • Ефикасност : Смањује ручне кораке потребне за креирање, конфигурацију и преузимање пакета.
  • Конзистентност : Осигурава униформне структуре пакета и конвенције именовања у свим окружењима.
  • Следљивост : Детаљно евидентирање у свакој фази (креирање, филтрирање, изградња, преузимање) помаже у ревизији и решавању проблема.

1.3 Практичне примене

  • Планиране резервне копије : Интегришите се са црон пословима да бисте редовно архивирали путање критичног садржаја.
  • Синхронизација окружења : Реплицирајте конфигурације или садржај између АЕМ инстанци током имплементације.
  • Снимци пре ажурирања : Снимите стабилна стања /etc или /apps пре примене системских ажурирања.

1.4 Предуслови

  • Приступ АЕМ инстанци (акредитиви, сервер, порт).
  • Основно познавање Басх скриптовања и АЕМ-овог менаџера пакета.
  • Дозвола за креирање и преузимање пакета преко АЕМ АПИ-ја.

1.5 Пример употребе

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


Ова команда креира пакет под називом „Резервна копија садржаја“ у оквиру групе backup-group , укључујући /content/dam и /etc/clientlibs , и чува излаз у директоријуму /backups .

2. Разбијање скрипте

Хајде да сецирамо скрипту create-remote-aem-pkg.sh (можете је пронаћи на дну чланка) да бисмо разумели како она организује управљање АЕМ пакетима. Фокусираћемо се на његову структуру, кључне функције и логику тока посла—идеално за програмере који желе да прилагоде или отклоне грешке у алату.

2.1 Основне функције

  • _log() : Услужна функција која порукама ставља префикс са временским ознакама за јасне трагове ревизије.
 _log () { echo "[$(date +%Y.%m.%d-%H:%M:%S)] $1" }


Зашто је то важно : Обезбеђује да се свака радња (нпр. „Изграђен пакет“) евидентира у контексту, што поједностављује решавање проблема.

  • check_last_exec() : Потврђује успех претходних команди провером излазних кодова и АПИ одговора.
 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 }

Зашто је то важно : Спречава тихе грешке заустављањем извршавања критичних грешака као што су проблеми са аутентификацијом или неважеће путање.

2.2 Улазни параметри

Скрипта прихвата седам позиционих аргумената праћених динамичким филтерима:

 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")


Позициони аргументи обезбеђују једноставност, док shift флексибилно управља променљивим путањама филтера.

2.3 Валидација и креирање пакета

  • Санитизе Намес : Замењује размаке у PKG_NAME са доњим цртама да би се избегли проблеми са УРЛ-ом.
 PKG_NAME=${PKG_NAME// /_}
  • Проверите постојеће пакете : Користи curl за листање пакета преко АЕМ-овог АПИ-ја, избегавајући сувишне креације.
 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 Конфигурација динамичког филтера

Конструише ЈСОН низ филтера од улазних путања:

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


Пример излаза :

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

Овај ЈСОН се убацује у дефиницију пакета преко АЕМ-ове /crx/packmgr/update.jsp крајње тачке.

2.5 Ток рада изградње и преузимања

  • Направи пакет : Покреће компилацију помоћу АЕМ-ове команде build :

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


Напомена : Скрипта чека да се изградња заврши пре него што настави.

  • Преузимање : Користи curl да преузме .zip и сачува га са временским ознакама имена датотеке:
 BK_FILE="$PKG_NAME-$(date +%Y%m%d-%H%M%S).zip" curl -o "$BK_FOLDER/$BK_FILE" ...

3. Руковање грешкама, безбедносне напомене и евидентирање

Робусно руковање грешкама и евидентирање су критични за ненадзиране скрипте као што је create-remote-aem-pkg.sh , обезбеђујући да се грешке рано ухвате и јасно евидентирају. Ево како скрипта штити од неочекиваних проблема и пружа корисне увиде.

3.1 Механизам евидентирања

  • Евиденције са временским ознакама : Функција _log ставља префикс сваке поруке временском ознаком [YYYY.MM.DD-HH:MM:SS] , стварајући ревизијски траг за отклањање грешака:

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


Зашто је то важно : Временске ознаке помажу у повезивању активности скрипте са евиденцијама АЕМ сервера или спољним догађајима (нпр. распореди црон послова).

  • Опширни излаз : Критични кораци, попут креирања пакета, ажурирања филтера и преузимања, се експлицитно евидентирају да би се пратио напредак.

3.2 Ток рада валидације грешке

Провере пре лета :

  • Потврђује постојање фасцикле резервне копије ( BK_FOLDER ) пре него што наставите:
 if [ ! -d "$BK_FOLDER" ]; then _log "Backup folder '$BK_FOLDER' does not exist!" && exit 1 fi
  • Чисти PKG_NAME да би се избегли проблеми са УРЛ-ом (нпр. размаци замењени доњом цртом).


АПИ валидација одговора :

Функција check_last_exec испитује оба излазна кода ( $? ) и АЕМ АПИ одговоре:

check_last_exec "Error message" "$CURL_OUTPUT" $CURL_STATUS

  • Излазни кодови : вредности које нису нула (нпр. curl на мрежи) покрећу тренутне излазе.


  • АПИ грешке : Открива success\":false ЈСОН одговоре или стрингове „ХТТП ГРЕШКА“ у АЕМ излазу.


3.3 ХТТП провера статуса : Приликом преузимања пакета, скрипта проверава статусни код 200 :

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

3.4 Уобичајени сценарији кварова

  • Неважећи акредитиви: check_last_exec хвата 401 Unauthorized одговоре и излази са јасном поруком о грешци.
  • Неважећа путања филтера: АЕМ АПИ враћа success:false , скрипта бележи „Грешка при додавању филтера“ и завршава се.
  • Диск пун: не успева да се упише BK_FILE , проверава величину датотеке са заставицом -s и упозорава пре изласка.
  • АЕМ инстанца је недоступна: curl излази са кодом који није нула, скрипта бележи „Грешка у изградњи пакета“.

3.5 Безбедносна разматрања

  • Заобилажење ССЛ сертификата : Скрипта користи curl -k ради једноставности, која прескаче ССЛ верификацију. Препорука за производњу : Замените са --cacert да бисте навели ЦА пакет.


  • Лозинке отвореног текста : акредитиви се прослеђују као аргументи, који се могу појавити у евиденцији процеса. Ублажавање : Користите променљиве окружења или тајни трезор (нпр. $AEM_PASSWORD ).

3.6 Савети за отклањање грешака

  • Омогући детаљан излаз : Привремено додајте set -x на почетку скрипте да бисте одштампали извршене команде.
  • Тестирајте АПИ позиве ручно : Изолујте проблеме покретањем критичних curl команди ван скрипте
  • Прегледајте евиденције : Преусмерите излаз скрипте у датотеку за каснију анализу:

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

4. Прилагођавање алата вашем току рада

Скрипта create-remote-aem-pkg.sh је дизајнирана да буде почетна тачка—основа коју можете да измените да бисте ускладили са потребама вашег тима. Испод су уобичајена прилагођавања, заједно са упутствима за имплементацију, како би се проширила његова функционалност или прилагодила специфичним случајевима употребе.

4.1 Подешавање формата имена датотеке резервне копије

Подразумевано име датотеке користи временску ознаку ( $PKG_NAME-$(date +%Y%m%d-%H%M%S).zip ). Измените ово да бисте укључили имена окружења, ИД-ове пројекта или семантичко верзионисање:

 # 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"

Савет : Уверите се да формати датума/времена избегавају знакове забрањене у називима датотека (нпр. двотачке : на Виндовс-у).

4.2 Проширивање или измена филтера

Скрипта прихвата динамичке путање као филтере, али такође можете хардкодирати често коришћене путање или додати изузетке:

 # 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 Повећање безбедности


Избегавајте лозинке отвореног текста :

Користите променљиве окружења или менаџер тајни да бисте убацили акредитиве:

 # 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)


Примени ССЛ валидацију :
Замените curl -k (несигурно) са поузданим ЦА сертификатом:

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

4.4 Додавање радњи након изградње

Проширите скрипту да бисте покренули низводне процесе након успешног преузимања:

 # 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 Додавање обавештења упозорења

Обавестите тимове о успеху/неуспеху путем Слацк-а, е-поште или алата за праћење:

 # 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. Закључак

Управљање АЕМ пакетима не мора да буде ручни посао склон грешкама. Помоћу скрипте create-remote-aem-pkg.sh можете трансформисати креирање пакета, филтрирање и дистрибуцију у поједностављен, поновљив процес. Овај алат није само уштеда времена, већ и омогућавање доследности, поузданости и скалабилности у вашим АЕМ операцијама.

Кеи Такеаваис

  1. Аутоматизација побеђује : Елиминишући понављајуће ГУИ интеракције, скрипта смањује људску грешку и ослобађа тимове да се фокусирају на задатке веће вредности.


  2. Флексибилност је важна : Било да прави резервну копију критичног садржаја, синхронизује окружења или се припрема за ажурирања, скрипта се прилагођава различитим случајевима коришћења уз минимално подешавање.


  3. Отпорност је кључна : Уграђено евидентирање, провере грешака и безбедносна разматрања обезбеђују да се скрипта понаша предвидљиво, чак и када ствари иду у страну.


Сјајни алати се рађају из изазова у стварном свету. Ова скрипта је полазна тачка; размислите о томе као о темељу на којем ћете се надограђивати како потребе вашег тима расту. Без обзира да ли сте соло програмер или део великог ДевОпс тима, оваква аутоматизација показује како мала улагања у код могу донети огромне поврате у продуктивности и безбрижности.


Спремни за следећи корак?

  • 🛠 Прилагодите : Прилагодите скрипту користећи одељак 6 као водич.
  • 🔍 Ревизија : Прегледајте своје постојеће АЕМ радне токове ради могућности аутоматизације.
  • 🤝 Подели : Менторирајте свој тим или напишите блог о својим модификацијама.


Хвала вам што пратите – сада идите и аутоматизујте се! 🚀

Додатак

Комплетан код

 #!/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


Референце

[¹] Прескакање ССЛ верификације помоћу curl -k је згодно за тестирање, али ћете желети нешто чвршће у производњи (на пример --cacert )!


[²] Званична документација АЕМ менаџера пакета