Τα πακέτα Adobe Experience Manager (AEM) είναι οι αφανείς ήρωες της διαχείρισης περιεχομένου — ισχυρά κοντέινερ που συνδυάζουν τα πάντα, από κώδικα και διαμορφώσεις έως κρίσιμο περιεχόμενο. Αλλά ας το παραδεχτούμε: η μη αυτόματη δημιουργία, διαμόρφωση και λήψη αυτών των πακέτων μπορεί να μοιάζει σαν ένας κουραστικός χορός κλικ. Τι θα γινόταν αν μπορούσατε να αυτοματοποιήσετε αυτή τη διαδικασία με μερικά πλήκτρα, διασφαλίζοντας συνέπεια, ταχύτητα, αξιοπιστία και λιγότερη άρση βαρών; Θα σας δείξω ένα σενάριο Bash που ανατρέπει το σενάριο (λογοπαίγνιο!) σχετικά με τον τρόπο με τον οποίο οι προγραμματιστές και οι διαχειριστές AEM λειτουργούν με το API του Package Manager. Σκεφτείτε να δημιουργήσετε πακέτα σε δευτερόλεπτα, να προσαρμόσετε τα φίλτρα εν κινήσει και να δημιουργήσετε αντίγραφα ασφαλείας με χειρουργική ακρίβεια — όλα αυτά πριν κρυώσει ο καφές σας σε αυτήν την θερμοκρασία. ☕ τέλεια : 🕳️ Πριν βουτήξουμε, μια γρήγορη σημείωση Αυτό το άρθρο είναι μια βαθιά κατάδυση, σχολαστικά λεπτομερής και μη απολογητικά τεχνικό. Θα αναλύσουμε τη λογική του σεναρίου, θα εξερευνήσουμε τις περιπλοκές του AEM API και θα αντιμετωπίσουμε προβλήματα αιχμής. Για προγραμματιστές που θέλουν να μεταβούν κατευθείαν στον κώδικα, μπορείτε να μεταβείτε στο κάτω μέρος του άρθρου. Αλλά αν είστε εδώ για να καταλάβετε πώς και γιατί πίσω από τον αυτοματισμό, βάλτε τον ιμάντα - πηγαίνουμε μέχρι την τρύπα του κουνελιού. 1. Επισκόπηση σεναρίου Το σενάριο αυτοματοποιεί τις αλληλεπιδράσεις με το API Package Manager της AEM, προσφέροντας μια δομημένη προσέγγιση για τη δημιουργία, τη διαμόρφωση και τη διανομή πακέτων. Σχεδιασμένο για προγραμματιστές και διαχειριστές, αντικαθιστά τις μη αυτόματες ροές εργασίας με μια διαδικασία που βασίζεται στη γραμμή εντολών που δίνει έμφαση στη συνέπεια και την αξιοπιστία. create-remote-aem-pkg.sh 1.1 Βασικές λειτουργίες : Ελέγχει για υπάρχοντα πακέτα για να αποφύγει τον πλεονασμό πριν από την έναρξη της δημιουργίας. Επικύρωση πακέτου : Ορίζει μέσω προγραμματισμού διαδρομές περιεχομένου (π.χ. , ) που θα συμπεριληφθούν στο πακέτο. Δυναμική Έγχυση φίλτρου /content/dam /apps : Ενεργοποιεί τη μεταγλώττιση πακέτων και πραγματοποιεί λήψη της εξόδου σε έναν καθορισμένο κατάλογο, προσαρτώντας μια χρονική σήμανση στα ονόματα αρχείων για έλεγχο έκδοσης. Build Automation : Επικυρώνει τις αποκρίσεις HTTP, τις διαδρομές φακέλων και τον έλεγχο ταυτότητας για να παρέχει ανατροφοδότηση με δυνατότητα ενέργειας κατά τη διάρκεια αποτυχιών. Χειρισμός σφαλμάτων : Υποστηρίζει βασικό¹ έλεγχο ταυτότητας βάσει διαπιστευτηρίων μέσω . Έλεγχος ταυτότητας curl 1.2 Βασικά πλεονεκτήματα : Μειώνει τα μη αυτόματα βήματα που απαιτούνται για τη δημιουργία, τη διαμόρφωση και τη λήψη πακέτου. Αποδοτικότητα : Εξασφαλίζει ομοιόμορφες δομές πακέτων και συμβάσεις ονομασίας σε όλα τα περιβάλλοντα. Συνέπεια : Η λεπτομερής καταγραφή σε κάθε στάδιο (δημιουργία, φιλτράρισμα, κατασκευή, λήψη) βοηθά στον έλεγχο και την αντιμετώπιση προβλημάτων. Ιχνηλασιμότητα 1.3 Πρακτικές Εφαρμογές : Ενσωματώστε τις εργασίες cron για να αρχειοθετείτε τακτικά κρίσιμες διαδρομές περιεχομένου. Προγραμματισμένα αντίγραφα ασφαλείας : Αναπαράγετε διαμορφώσεις ή περιεχόμενο μεταξύ παρουσιών AEM κατά την ανάπτυξη. Environment Synchronization : Καταγράψτε σταθερές καταστάσεις ή πριν από την εφαρμογή ενημερώσεων συστήματος. Στιγμιότυπα προ-ενημέρωσης /etc /apps 1.4 Προαπαιτούμενα Πρόσβαση σε μια παρουσία AEM (διαπιστευτήρια, διακομιστής, θύρα). Βασική εξοικείωση με το scripting Bash και τον Package Manager της AEM. Άδεια δημιουργίας και λήψης πακέτων μέσω του AEM API. 1.5 Παράδειγμα χρήσης ./create-remote-aem-pkg.sh admin securepass123 localhost 4502 backup-group "Content Backup" /backups /content/dam /etc/clientlibs Αυτή η εντολή δημιουργεί ένα πακέτο με το όνομα "Content Backup" κάτω από την ομάδα , συμπεριλαμβανομένων και , και αποθηκεύει την έξοδο στον κατάλογο . backup-group /content/dam /etc/clientlibs /backups 2. Ανάλυση σεναρίου Ας αναλύσουμε το σενάριο (μπορείτε να το βρείτε στο κάτω μέρος του άρθρου) για να κατανοήσουμε πώς ενορχηστρώνει τη διαχείριση πακέτων AEM. Θα εστιάσουμε στη δομή του, τις βασικές λειτουργίες και τη λογική ροής εργασίας — ιδανικό για προγραμματιστές που θέλουν να προσαρμόσουν ή να διορθώσουν το εργαλείο. create-remote-aem-pkg.sh 2.1 Βασικές λειτουργίες : Μια βοηθητική συνάρτηση που προσαρτά μηνύματα με χρονικές σημάνσεις για σαφείς διαδρομές ελέγχου. _log() _log () { echo "[$(date +%Y.%m.%d-%H:%M:%S)] $1" } : Διασφαλίζει ότι κάθε ενέργεια (π.χ. "Έγινε δημιουργία πακέτου") καταγράφεται με το περιβάλλον, απλοποιώντας την αντιμετώπιση προβλημάτων. Γιατί έχει σημασία : Επικυρώνει την επιτυχία προηγούμενων εντολών ελέγχοντας τους κωδικούς εξόδου και τις αποκρίσεις API. 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 Επικύρωση & δημιουργία πακέτου : Αντικαθιστά τα κενά στο με υπογράμμιση για την αποφυγή προβλημάτων διεύθυνσης URL. Sanitize Names PKG_NAME PKG_NAME=${PKG_NAME// /_} : Χρησιμοποιεί για τη λίστα πακέτων μέσω του API της AEM, αποφεύγοντας περιττές δημιουργίες. Έλεγχος υπαρχόντων πακέτων 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 Δυναμική διαμόρφωση φίλτρου Κατασκευάζει έναν πίνακα JSON φίλτρων από διαδρομές εισόδου: 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"}] Αυτό το JSON εισάγεται στον ορισμό του πακέτου μέσω του τερματικού σημείου της AEM. /crx/packmgr/update.jsp 2.5 Δημιουργία & Λήψη ροής εργασιών : Ενεργοποιεί τη μεταγλώττιση χρησιμοποιώντας την εντολή της AEM: Δημιουργία του πακέτου 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 Μηχανισμός υλοτομίας : Η συνάρτηση δίνει πρόθεμα σε κάθε μήνυμα με μια χρονική σήμανση , δημιουργώντας μια διαδρομή ελέγχου για τον εντοπισμό σφαλμάτων: Timestamped Logs _log [YYYY.MM.DD-HH:MM:SS] _log "Starting backup process..." # Output: [2023.10.25-14:30:45] Starting backup process... : Οι χρονικές σημάνσεις βοηθούν στο συσχετισμό της δραστηριότητας σεναρίου με αρχεία καταγραφής διακομιστή AEM ή εξωτερικά συμβάντα (π.χ. προγράμματα εργασιών cron). Γιατί έχει σημασία : Τα κρίσιμα βήματα, όπως η δημιουργία πακέτων, οι ενημερώσεις φίλτρων και οι λήψεις, καταγράφονται ρητά για την παρακολούθηση της προόδου. Αναλυτική έξοδος 3.2 Ροή εργασιών επικύρωσης σφαλμάτων : Έλεγχοι πριν από την πτήση Επικυρώνει την ύπαρξη του φακέλου αντιγράφων ασφαλείας ( ) πριν συνεχίσετε: BK_FOLDER if [ ! -d "$BK_FOLDER" ]; then _log "Backup folder '$BK_FOLDER' does not exist!" && exit 1 fi Απολυμαίνει για να αποφύγει προβλήματα διεύθυνσης URL (π.χ. αντικατάσταση διαστημάτων με κάτω παύλες). PKG_NAME : Επικύρωση απόκρισης API Η συνάρτηση εξετάζει τόσο τους κωδικούς εξόδου φλοιού ( ) όσο και τις αποκρίσεις AEM API: check_last_exec $? check_last_exec "Error message" "$CURL_OUTPUT" $CURL_STATUS : Μη μηδενικές τιμές (π.χ. αποτυχίες δικτύου ) ενεργοποιούν άμεσες εξόδους. Κωδικοί εξόδου curl : Εντοπίζει απαντήσεις JSON ή συμβολοσειρές "ΣΦΑΛΜΑ HTTP" στην έξοδο AEM. Σφάλματα API success\":false : Κατά τη λήψη του πακέτου, το σενάριο ελέγχει για κωδικό κατάστασης : 3.3 Επαλήθευση κατάστασης HTTP 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 Μη έγκυρη διαδρομή φίλτρου: Το AEM API επιστρέφει , το σενάριο καταγράφει "Σφάλμα προσθήκης φίλτρων" και τερματίζει. success:false Ο δίσκος είναι γεμάτος: Αποτυγχάνει η εγγραφή , ελέγχει το μέγεθος του αρχείου με σημαία και ειδοποιήσεις πριν από την έξοδο. BK_FILE -s Η παρουσία AEM δεν είναι προσβάσιμη: εξέρχεται με έναν μη μηδενικό κωδικό, το σενάριο καταγράφει "Σφάλμα κατά τη δημιουργία του πακέτου". curl 3.5 Θέματα ασφαλείας : Το σενάριο χρησιμοποιεί για απλότητα, το οποίο παρακάμπτει την επαλήθευση SSL. : Αντικαταστήστε με για να καθορίσετε ένα πακέτο CA. Παράκαμψη πιστοποιητικού SSL curl -k Σύσταση για παραγωγή --cacert : Τα διαπιστευτήρια μεταβιβάζονται ως ορίσματα, τα οποία μπορεί να εμφανίζονται στα αρχεία καταγραφής διεργασιών. : Χρησιμοποιήστε μεταβλητές περιβάλλοντος ή θησαυροφυλάκιο μυστικών (π.χ. ). Κωδικοί πρόσβασης απλού κειμένου Μετριασμός $AEM_PASSWORD 3.6 Συμβουλές εντοπισμού σφαλμάτων : Προσθέστε προσωρινά στην αρχή του σεναρίου για να εκτυπώσετε τις εκτελεσμένες εντολές. Enable Verbose Output set -x : Απομονώστε ζητήματα εκτελώντας κρίσιμες εντολές εκτός του σεναρίου Δοκιμή κλήσεων API με μη αυτόματο τρόπο 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" : Βεβαιωθείτε ότι οι μορφές ημερομηνίας/ώρας αποφεύγουν τους χαρακτήρες που απαγορεύονται στα ονόματα αρχείων (π.χ. άνω και κάτω τελεία στα Windows). Συμβουλή : 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) : Αντικαταστήστε (μη ασφαλές) με ένα αξιόπιστο πιστοποιητικό CA: Επιβολή επικύρωσης SSL 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 Προσθήκη ειδοποιήσεων ειδοποιήσεων Ειδοποιήστε τις ομάδες για επιτυχία/αποτυχία μέσω Slack, email ή εργαλείων παρακολούθησης: # 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 admin@mycompany.com fi 5. Συμπέρασμα Η διαχείριση πακέτων AEM δεν χρειάζεται να είναι μια χειροκίνητη, επιρρεπής σε σφάλματα αγγαρεία. Με το σενάριο , μπορείτε να μετατρέψετε τη δημιουργία, το φιλτράρισμα και τη διανομή πακέτων σε μια απλοποιημένη, επαναλαμβανόμενη διαδικασία. Αυτό το εργαλείο δεν αφορά μόνο την εξοικονόμηση χρόνου, αλλά και την ενεργοποίηση της συνέπειας, της αξιοπιστίας και της επεκτασιμότητας στις λειτουργίες AEM. create-remote-aem-pkg.sh Βασικά Takeaways : Με την εξάλειψη των επαναλαμβανόμενων αλληλεπιδράσεων GUI, το σενάριο μειώνει το ανθρώπινο σφάλμα και ελευθερώνει τις ομάδες να επικεντρωθούν σε εργασίες υψηλότερης αξίας. Ο αυτοματισμός κερδίζει : Είτε δημιουργείτε αντίγραφα ασφαλείας κρίσιμου περιεχομένου, συγχρονίζετε περιβάλλοντα ή προετοιμαζόμαστε για ενημερώσεις, το σενάριο προσαρμόζεται σε διάφορες περιπτώσεις χρήσης με ελάχιστες τροποποιήσεις. Θέματα ευελιξίας : Η ενσωματωμένη σύνδεση, οι έλεγχοι σφαλμάτων και τα ζητήματα ασφαλείας διασφαλίζουν ότι το σενάριο συμπεριφέρεται προβλέψιμα, ακόμη και όταν τα πράγματα πάνε στο πλάι. Η ανθεκτικότητα είναι το κλειδί Τα σπουδαία εργαλεία γεννιούνται από τις προκλήσεις του πραγματικού κόσμου. Αυτό το σενάριο είναι ένα σημείο εκκίνησης. σκεφτείτε το ως ένα θεμέλιο πάνω στο οποίο θα χτίσετε καθώς αυξάνονται οι ανάγκες της ομάδας σας. Είτε είστε μεμονωμένος προγραμματιστής είτε μέλος μιας μεγάλης ομάδας DevOps, η αυτοματοποίηση όπως αυτή αποτελεί παράδειγμα του τρόπου με τον οποίο μικρές επενδύσεις σε κώδικα μπορούν να αποφέρουν μεγάλες αποδόσεις σε παραγωγικότητα και ηρεμία. Είστε έτοιμοι να κάνετε το επόμενο βήμα; 🛠️ : Προσαρμόστε το σενάριο χρησιμοποιώντας ως οδηγό σας. Προσαρμογή την Ενότητα 6 🔍 : Ελέγξτε τις υπάρχουσες ροές εργασίας AEM για ευκαιρίες αυτοματισμού. Έλεγχος 🤝 : Καθοδηγήστε την ομάδα σας ή γράψτε μια ανάρτηση ιστολογίου σχετικά με τις τροποποιήσεις σας. Κοινοποίηση Σας ευχαριστούμε που παρακολουθήσατε - τώρα προχωρήστε και αυτοματοποιήστε! 🚀 Παράρτημα Πλήρης κώδικας #!/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 Αναφορές [¹] Η παράλειψη της επαλήθευσης SSL με είναι χρήσιμη για δοκιμή, αλλά θα θέλετε κάτι πιο στιβαρό στην παραγωγή (για παράδειγμα )! curl -k --cacert [²] Επίσημη τεκμηρίωση του AEM Package Manager