Artifact (τεχνούργημα) — είναι το τελικό αποτέλεσμα της διαδικασίας build που μπορεί να αναπτυχθεί στη συσκευή-στόχο ή να χρησιμοποιηθεί ως εξάρτηση σε άλλα έργα. Τα τεχνουργήματα περιλαμβάνουν αρχεία APK και IPA εφαρμογών κινητών, εικόνες Docker, βιβλιοθήκες JAR/WAR και πακέτα εγκατάστασης. Σύμφωνα με το JFrog State of Software Supply Chain, 2025, οι οργανισμοί μπορούν να αποθηκεύσουν έως 10 terabyte τεχνουργημάτων σε ένα μητρώο, καθιστώντας τα συστήματα διαχείρισής τους κρίσιμα.
Κύρια σημεία
Artifact (τεχνούργημα build) — είναι το αποτέλεσμα μεταγλώττισης του πηγαίου κώδικα, έτοιμο για ανάπτυξη ή χρήση ως εξάρτηση. Η διαδικασία build μετατρέπει τα αρχεία πηγής (Java, Kotlin, Swift, C++ και άλλα) σε δυαδικά πακέτα που μπορούν να εκτελεστούν στη συσκευή-στόχο ή στον διακομιστή.
Η έννοια του τεχνουργήματος υπερβαίνει τα εκτελέσιμα αρχεία. Για παράδειγμα, η βιβλιοθήκη JAR — είναι ένα τεχνούργημα που χρησιμοποιείται ως εξάρτηση σε άλλα έργα. Η εικόνα Docker — ένα τεχνούργημα που περιέχει την εφαρμογή και το περιβάλλον της. Ακόμη και μια αναφορά κάλυψης δοκιμών μπορεί να θεωρηθεί τεχνούργημα στο πλαίσιο CI/CD.
Η σύγχρονη ανάπτυξη σε μεγάλες εταιρείες περιλαμβάνει τη διαχείριση εκατοντάδων χιλιάδων τεχνουργημάτων. Το Google DORA συνδέει την ωριμότητα διαχείρισης τεχνουργημάτων με τη συνολική αποτελεσματικότητα DevOps — οι ομάδες που χρησιμοποιούν μητρώα τεχνουργημάτων κυκλοφορούν εκδόσεις ταχύτερα και αντιμετωπίζουν λιγότερα προβλήματα κατά την ανάπτυξη.
Κάθε τεχνούργημα περνά από διάφορα στάδια: δημιουργία (build, μεταγλώττιση), επικύρωση (δοκιμή, έλεγχος ασφαλείας), αποθήκευση (μητρώο τεχνουργημάτων), διανομή (δημοσίευση για λήψη) και αρχειοθέτηση ή διαγραφή (όταν η έκδοση καθίσταται παρωχημένη).
Διαφορετικές πλατφόρμες και τεχνολογίες δημιουργούν διαφορετικές μορφές τεχνουργημάτων. Η κατανόηση των μορφών είναι απαραίτητη για τη σωστή διαμόρφωση του CI/CD pipeline και την επιλογή συστήματος αποθήκευσης.
APK (Android Package Kit) — παραδοσιακή μορφή πακέτου εγκατάστασης. AAB (Android App Bundle) — σύγχρονη μορφή για δημοσίευση στο Google Play, που περιέχει μόνο τους πόρους που χρειάζεται μια συγκεκριμένη συσκευή. Το AAB μειώνει το μέγεθος της εγκατεστημένης εφαρμογής κατά μέσο όρο 15-20% σε σύγκριση με το καθολικό APK.
IPA (iOS App Store Package) — αρχείο με κώδικα και πόρους για συσκευές iOS. XCArchive — ενδιάμεσο τεχνούργημα που δημιουργείται από το Xcode, από το οποίο εξάγεται το τελικό IPA. dSYM — αρχείο εντοπισμού σφαλμάτων απαραίτητο για τη συμβολοποίηση αρχείων καταγραφής σφαλμάτων.
| Πλατφόρμα | Μορφή | Επέκταση | Σκοπός |
|---|---|---|---|
| Android | APK | .apk | Πακέτο εγκατάστασης |
| Android | AAB | .aab | Δημοσίευση στο Google Play |
| iOS | IPA | .ipa | Πακέτο εγκατάστασης |
| iOS | dSYM | .dSYM.zip | Σύμβολα εντοπισμού σφαλμάτων |
| Flutter | Bundle | .zip, .tar.gz | Web/Desktop builds |
JAR (Java ARchive) — για βιβλιοθήκες Java/Kotlin. AAR (Android ARchive) — για βιβλιοθήκες Android με πόρους. Εικόνες Docker — τεχνουργήματα κοντέινερ για μικροϋπηρεσίες. Κάθε τύπος έχει το δικό του μητρώο και κανόνες διαχείρισης εκδόσεων.
Τα τεχνουργήματα — ο συνδετικός κρίκος μεταξύ των σταδίων του pipeline. Κάθε στάδιο καταναλώνει τα τεχνουργήματα του προηγούμενου και παράγει νέα. Η κατανόηση αυτής της ροής είναι κρίσιμη για τη διαμόρφωση αποτελεσματικού CI/CD.
Η τυπική ροή περιλαμβάνει: commit → ο διακομιστής build μεταγλωττίζει τον κώδικα και δημιουργεί ένα μη βελτιστοποιημένο τεχνούργημα → το τεχνούργημα δοκιμής χρησιμοποιείται για την εκτέλεση δοκιμών → με επιτυχία δημιουργείται ένα τεχνούργημα έκδοσης → υπογράφεται και δημοσιεύεται στο μητρώο τεχνουργημάτων → από το μητρώο, το τεχνούργημα λαμβάνεται για ανάπτυξη σε staging και παραγωγή. Κάθε μετάβαση μεταξύ σταδίων συνοδεύεται από επαλήθευση ακεραιότητας και συμμόρφωσης με απαιτήσεις.
Το pipeline μπορεί να δημιουργήσει πολλά τεχνουργήματα σε διαφορετικά στάδια. Τα τεχνουργήματα Debug περιέχουν πληροφορίες εντοπισμού σφαλμάτων, μη βελτιστοποιημένα — κατασκευάζονται γρήγορα για δοκιμές, τα τεχνουργήματα έκδοσης — τελικά, με βελτιστοποίηση και συσκότιση. Το σύστημα CI πρέπει να μπορεί να τα διακρίνει και να εφαρμόζει κατάλληλες πολιτικές αποθήκευσης για κάθε τύπο.
name: Artifact Flow
on: [push]
jobs:
build-debug:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew assembleDebug
- uses: actions/upload-artifact@v4
with:
name: debug-apk
path: app/build/outputs/apk/debug/app-debug.apk
retention-days: 7
test:
needs: build-debug
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: debug-apk
- run: ./gradlew testDebugUnitTest
build-release:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew assembleRelease
- uses: actions/upload-artifact@v4
with:
name: release-apk
path: app/build/outputs/apk/release/app-release.apk
retention-days: 90
Είναι σημαντικό να γίνει διάκριση μεταξύ της προσωρινής μνήμης εξαρτήσεων και των τεχνουργημάτων build. Η προσωρινή μνήμη (Gradle cache, CocoaPods cache) επιταχύνει επαναλαμβανόμενα builds, αλλά δεν προορίζεται για ανάπτυξη. Τα τεχνουργήματα — τελικό προϊόν έτοιμο για διανομή. Για την προσωρινή μνήμη ορίστε TTL λίγων ημερών, για τα τεχνουργήματα — εβδομάδες ή μήνες.
Τα τεχνουργήματα δεν πρέπει να αποθηκεύονται στον διακομιστή build — υπάρχουν εξειδικευμένα συστήματα για αυτό. Το Repository Manager παρέχει κεντρική αποθήκευση, ευρετηρίαση, έλεγχο πρόσβασης και ενσωμάτωση με εργαλεία CI/CD.
JFrog Artifactory — καθολικός διαχειριστής που υποστηρίζει Maven, Gradle, Docker, NuGet, npm, APT, YUM. Sonatype Nexus — εναλλακτική λύση ανοιχτού κώδικα με υποστήριξη για κύριες μορφές. GitHub Packages — ενσωματωμένο μητρώο στο GitHub, βολικό για ομάδες που ήδη χρησιμοποιούν GitHub. GitLab Container Registry — για εικόνες Docker.
Κύριοι παράγοντες: υποστηριζόμενες μορφές, μοντέλο αδειοδότησης (open-source/enterprise), ενσωμάτωση με υπάρχον CI/CD, δυνατότητα αναπαραγωγής μεταξύ περιοχών, ύπαρξη πολιτικών αυτόματου καθαρισμού παλαιών εκδόσεων και αναφορών συμμόρφωσης.
// Pipeline Jenkins — δημοσίευση APK στο Artifactory
def server = Artifactory.newServer(
url: 'https://artifactory.company.com',
credentialsId: 'artifactory-api-key'
)
def uploadSpec = """
{
"files": [
{
"pattern": "app/build/outputs/apk/release/*.apk",
"target": "mobile-apps/android/release/""
}
]
}
"""
server.upload(uploadSpec)
Η σωστή στρατηγική έκδοσης τεχνουργημάτων είναι κρίσιμη για την αναπαραγωγιμότητα των builds και την παρακολούθηση αλλαγών. Χωρίς έκδοση, είναι αδύνατο να προσδιοριστεί ποια έκδοση κώδικα προκάλεσε πρόβλημα στην παραγωγή.
Πρότυπο MAJOR.MINOR.PATCH: το MAJOR αλλάζει με ασύμβατες αλλαγές API, το MINOR — με προσθήκη λειτουργικότητας συμβατής προς τα πίσω, το PATCH — με συμβατές προς τα πίσω διορθώσεις. Για CI/CD, προστίθενται μεταδεδομένα build στην έκδοση: 2.4.1+build.20260703.1. Αυτό επιτρέπει τον ακριβή προσδιορισμό ποιο commit δημιούργησε ένα συγκεκριμένο τεχνούργημα και πότε κατασκευάστηκε.
Κάθε τεχνούργημα πρέπει να περιέχει μεταδεδομένα σχετικά με την προέλευσή του: commit SHA, αριθμό build CI, όνομα κλάδου, ημερομηνία build. Αυτές οι πληροφορίες καταγράφονται στο δηλωτικό του τεχνουργήματος και επιτρέπουν την ανά πάσα στιγμή ανασυγκρότηση του πλαισίου δημιουργίας του. Χωρίς ιχνηλασιμότητα, η εργασία με τεχνουργήματα μετατρέπεται σε εικασία εκδόσεων, κάτι που είναι απαράδεκτο για συστήματα παραγωγής με απαιτήσεις ελέγχου.
Σύμβαση ονομασίας: {project}-{module}-{version}.{ext}. Παράδειγμα: `messaging-sdk-2.4.1.aar` ή `app-release-2.4.1.apk`. Ο διακομιστής build μπορεί να δημιουργήσει αυτόματα έκδοση βάσει του Git tag ή του αριθμού build CI.
Στα μητρώα τεχνουργημάτων Maven/Gradle γίνεται διάκριση μεταξύ εκδόσεων release (σταθερές, αμετάβλητες) και εκδόσεων snapshot (τρέχουσα ανάπτυξη, μπορούν να αντικατασταθούν). Σε CI/CD pipelines, τα τεχνουργήματα snapshot είναι βολικά για ανάπτυξη, αλλά στην παραγωγή πρέπει να χρησιμοποιούνται μόνο εκδόσεις release.
Τα τεχνουργήματα — βασικό στοιχείο της αλυσίδας εφοδιασμού λογισμικού (software supply chain). Η παραβίαση ενός τεχνουργήματος μπορεί να οδηγήσει στην εισαγωγή κακόβουλου κώδικα στην παραγωγή. Η ασφάλεια τεχνουργημάτων περιλαμβάνει πολλά επίπεδα προστασίας.
Τα αρχεία APK υπογράφονται με jarsigner ή apksigner· τα IPA — με πιστοποιητικό Apple· οι εικόνες Docker — με Content Trust (Notary) από την Docker. Η υπογραφή εγγυάται την ακεραιότητα και επιβεβαιώνει τον συντάκτη του τεχνουργήματος. Το CI/CD pipeline πρέπει να περιλαμβάνει επαλήθευση υπογραφών όλων των εξαρτήσεων τρίτων.
Πριν από τη δημοσίευση, το τεχνούργημα ελέγχεται από αυτόματους σαρωτές: Snyk, Trivy, Sonatype Nexus IQ, GitHub Dependabot. Αναλύουν τις συμπεριλαμβανόμενες εξαρτήσεις, τις εκδόσεις των χρησιμοποιούμενων βιβλιοθηκών και γνωστές ευπάθειες CVE. Κατά τον εντοπισμό κρίσιμης ευπάθειας, η έκδοση μπλοκάρεται αμέσως έως ότου επιδιορθωθεί από τους προγραμματιστές.
SLSA (Supply chain Levels for Software Artifacts) — πλαίσιο ασφαλείας που ορίζει επίπεδα εμπιστοσύνης από SLSA 1 (βασικό) έως SLSA 4 (μέγιστο). Ο διακομιστής build πρέπει να δημιουργεί provenance attestation — κρυπτογραφικά υπογεγραμμένη μαρτυρία για το πώς και από ποιον κώδικα κατασκευάστηκε το τεχνούργημα.
Συχνές ερωτήσεις
APK — καθολικό πακέτο με όλους τους πόρους, AAB — αρθρωτή μορφή όπου το Google Play παραδίδει μόνο τους απαραίτητους πόρους για μια συγκεκριμένη συσκευή. Το AAB είναι μικρότερο σε μέγεθος και συνιστάται από την Google για νέες εφαρμογές.
Καλύτερα σε εξειδικευμένα συστήματα (Artifactory, Nexus, GitHub Packages), όχι στον διακομιστή CI ή στο αποθετήριο κώδικα. Παρέχουν έκδοση, έλεγχο πρόσβασης, ενσωμάτωση με CI/CD και αυτόματο καθαρισμό παλαιών εκδόσεων.
Ναι, όλα τα τεχνουργήματα που προορίζονται για χρήση στην παραγωγή πρέπει να υπογράφονται. Για εφαρμογές κινητών, η υπογραφή είναι υποχρεωτική για εγκατάσταση σε συσκευές και δημοσίευση σε καταστήματα.
Χρησιμοποιήστε Git tag ή αριθμό build CI. Δημιουργήστε αυτόματα έκδοση σύμφωνα με το πρότυπο MAJOR.MINOR.PATCH+build.N, όπου N είναι ο αύξων αριθμός build CI ή το commit SHA.
Διαμορφώστε πολιτική αυτόματου καθαρισμού: αποθηκεύστε τις τελευταίες 10-20 εκδόσεις release και 30-50 εκδόσεις snapshot. Οι παλαιές εκδόσεις μπορούν να αρχειοθετηθούν σε ψυχρή αποθήκευση (S3 Glacier, Google Coldline) για συμμόρφωση.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης