---
title: "V. Κατασκευή, έκδοση, εκτέλεση"
source: Twelve-Factor App
source_url: https://github.com/heroku/12factor
licence: MIT
domain: engineering
subdomain: 12factor
date_added: 2026-04-25
---

## V. Κατασκευή, έκδοση, εκτέλεση
### Αυστηρός διαχωρισμός μεταξύ των σταδίων μεταγλώττισης/κατασκευής και εκτέλεσης

Μια [βάση κώδικα](./codebase) μετασχηματίζεται σε μια ανάπτυξη εφαρμογής (deploy) (όχι για υλοποίηση) μέσω τριών σταδίων:

* Το *στάδιο κατασκευής* (*build stage*) είναι ένας μετασχηματισμός που μετατρέπει ένα αποθετήριο κώδικα σε μία εκτελέσιμη δέσμη γνωστή ως *κατασκευή* (*build*).  Χρησιμοποιώντας μια έκδοση του κώδικα σε κάποιο σημείο δοσμένο απο τη διεργασία ανάπτυξης, το στάδιο κατασκευής μαζέυει τις όποιες [εξαρτήσεις](./dependencies) που πρέπει να προμηθευθούν στην εφαρμογή και μεταγλωττίζει και συνενώνει τα δυαδικά αρχεια και άλλα πρόσθετα.
* Το *στάδιο έκδοσης* (*release stage*) παίρνει το αποτέλεσμα του σταδίου κατασκευής και το συνδυάζει με τις τρέχουσες [παραμέτρους](./config) της ανάπτυξης της εφαρμογής.  Η τελική *έκδοση* (*release*) περιέχει την κατασκευή και τις παραμέτρους και είναι έτοιμη για άμεση εκτέλεση στο περιβάλλον εκτέλεσης.
* Το *στάδιο εκτέλεσης* (*run stage*) (επίσης γνωστό ως "εκτελέσιμο", "runtime") τρέχει την εφαρμογή στο περιβάλλον εκτέλεσης, ξεκινώντας ένα σύνολο απο τις [διεργασίες](./processes) της εφαρμογής με βάση μια επιλεγμένη έκδοση της εφαρμογής.

![Ο κώδικας γίνεται κατασκευή, η οποία συνδυάζεται με παραμέτρους για να δημιουργήσει μια έκδοση της εφαρμογής.](/images/release.png)

**Η εφαρμογή δώδεκα παραγόντων διαχωρίζει αυστηρά τα στάδια κατασκευής, έκδοσης και εκτέλεσης.**  Για παράδειγμα, είναι αδύνατο να πραγματοποιηθούν αλλαγές στον κώδικα κατά την εκτέλεση, καθώς δεν υπάρχει τρόπος να περάσουν αυτές οι αλλαγές πίσω στο στάδιο κατασκευής.

Τα εργαλεία ανάπτυξης εφαρμογών (deployment tools) τυπικά προσφέρουν εργαλεία διαχείρισης εκδόσεων (release management tools), κυρίως την ικανότητα να γυρίσουν πίσω σε μία προηγούμενη έκδοση της εφαρμογής.  Για παράδειγμα, το εργαλείο [Capistrano](https://github.com/capistrano/capistrano/wiki) αποθηκέυει τις εκδόσεις σε ένα υποφάκελο με όνομα `releases`, όπου η τρέχουσα έκδοση είναι ένας συμβολικός σύνδεσμος στο φάκελο της τρέχουσας έκδοσης.  Με την εντολή του `rollback` έυκολα και γρήγορα γυρίζει πίσω σε μία προηγούμενη έκδοση της εφαρμογής.

Κάθε έκδοση της εφαρμογής θα πρέπει πάντα να φέρει ένα μοναδικό αναγνωριστικό έκδοσης (release ID), όπως μια χρονοσφραγίδα της έκδοσης (όπως το `2011-04-06-20:32:17`) ή έναν άυξοντα αριθμό (όπως το `v100`).  Οι εκδόσεις της εφαρμογής είναι σαν ένα λογιστικό βιβλίο όπου μόνο προσθέσεις μπορούν να γίνουν και μία έκδοση δεν μπορεί να μεταβληθεί αφού έχει δημιουργηθεί.  Κάθε μεταβολή πρέπει να δημιουργήσει μια νέα έκδοση της εφαρμογής.

Οι κατασκευές (builds) ξεκινούν απο τους προγραμματιστές της εφαρμογής όποια στιγμή καινούργιος κώδικας αναπτύσσεται (deployed).  Η εκτέλεση, αντιθέτως, μπορεί να συμβεί αυτόματα σε περιπτώσεις όπως επανεκκίνηση εξυπηρετητή (server restart), ή όταν μια διεργασία που έχει καταρρέυσει επανεκκινείται από τον διαχειριστή διεργασιών (process manager).  Επομένως, το στάδιο εκτέλεσης θα πρέπει να έχει όσο πιο λίγα κινούμενα μέρη γίνεται, καθώς προβλήματα που μπορεί να εμποδίσουν μία εφαρμογή απο το να τρέξει μπορεί να την κάνουν να καταρρέυσει εν τω μέσω της νυκτός όπου δεν θα υπάρχει κανένας προγραμματιστής διαθέσιμος.  Το στάδιο κατασκευής μπορεί να είναι πιο περίπλοκο, καθώς τα σφάλματα είναι πάντα στο προσκήνιο για ένα προγραμματιστή που καθοδηγεί την ανάπτυξη της εφαρμογής (deploy).
