\subsubsection{Jenkins} \label{subsection:4-2-1-3-jenkins}

\logo{chapter-4/4.2.jenkins-logo}{Jenkins logo}

Το Jenkins\footnote{\url{https://www.jenkins.io/}} είναι ένας πλήρως παραμετροποιήσιμος και επεκτάσιμος διακομιστής αυτοματοποίησης (\textenglish{automation server}). Ο διακομιστής μπορεί να αυτοματοποιήσει τις διαδικασίες ελέγχου, ολοκλήρωσης, παράδοσης και εγκατάστασης του κώδικα, υλοποιώντας έτσι βασικές διαδικασίες που ορίζει το DevOps, όπως συνεχή έλεγχο (\textenglish{continuous testing}), συνεχή ολοκλήρωση (\textenglish{continuous integration}), συνεχή παράδοση (\textenglish{continuous delivery}) και συνεχή εγκατάσταση (\textenglish{continuous deployment}). Επίσης, το Jenkins μπορεί να παραμετροποιηθεί τόσο μέσω των ενσωματωμένων ρυθμίσεων, όσο και μέσω των διαθέσιμων επεκτάσεων (plugins), παρέχοντας αυτές τις δυνατότητες για οποιαδήποτε πλατφόρμα, γλώσσα και περιβάλλον ανάπτυξης.

Στο Jenkins είναι δυνατός ο ορισμός πολλαπλών γραμμών εργασιών (pipeline) με χρήση κώδικα (σε Groovy και στο DSL που παρέχεται από το Jenkins). Οι γραμμές εργασιών συντίθενται από πολλαπλά βήματα, τα οποία επιτελούν ξεχωριστούς στόχους προς το τελικό αποτέλεσμα της γραμμής. Τα βήματα μπορούν να εκτελούνται σειριακά ή παράλληλα, ενώ παρέχεται η δυνατότητα εκτέλεσης σε πολλαπλά, διανεμημένα συστήματα, καθώς και άλλες προχωρημένες λειτουργικότητες.

Το Jenkins συνδυάζεται αποτελεσματικά με την πλατφόρμα του Docker που περιγράφηκε προηγουμένως. Μέσω του συνδυασμού δίνεται η ευκαιρία της αυτοματοποίησης του μεγαλύτερου μέρους του DevOps σε ένα απολύτως προβλέψιμο περιβάλλον, το οποίο παραμένει σταθερό από την ανάπτυξη του κώδικα μέχρι την τελική εγκατάσταση. Με αυτήν τη μέθοδο βελτιώνεται σημαντικά η αποτελεσματικότητα των ομάδων ανάπτυξης κώδικα.

% TODO: example citations
% Shahin, Mojtaba, et al. “Continuous Integration, Delivery and Deployment: A Systematic Review on Approaches, Tools, Challenges and Practices.” IEEE Access, vol. 5, 2017, pp. 3909–3943.
% Meyer, Mathias. “Continuous Integration and Its Tools.” IEEE Software, vol. 31, no. 3, 2014, pp. 14–16.
% Virmani, Manish. “Understanding DevOps & Bridging the Gap from Continuous Integration to Continuous Delivery.” Fifth International Conference on the Innovative Computing Technology (INTECH 2015), 2015, pp. 78–82.
