runnerhut
Οδηγοί
Λύσεις για τα προβλήματα CI που αντιμετωπίζουν πραγματικά οι ομάδες.
Ταχύτητα13
Πώς να επιταχύνετε τις GitHub ActionsΟ αγωγός σας διαρκεί περισσότερο από όσο θέλει κανείς να περιμένει και δεν είναι προφανές πού πηγαίνει ο χρόνος.Πώς να βρείτε το αργό βήμα σε μια ροή εργασίαςΟ αγωγός είναι αργός, αλλά κάθε μεμονωμένο βήμα φαίνεται λογικό.Πώς να μειώσετε τις GitHub Actions κρύες εκκινήσειςΟι εργασίες παραμένουν για 30 έως 90 δευτερόλεπτα πριν ξεκινήσει το πρώτο βήμα.Τρόπος διάγνωσης GitHub Actions χρόνων αναμονήςΟι εργασίες βρίσκονται στην ουρά για λεπτά πριν τις παραλάβει ένας δρομέας.Πώς να κάνετε το git checkout πιο γρήγοραΟι ενέργειες/το checkout χρειάζονται λίγα λεπτά σε ένα μεγάλο αποθετήριο.Πώς να εκτελέσετε το CI σε ένα πολύ μεγάλο αποθετήριοΤο ταμείο, η ευρετηρίαση και η αναφορά κατάστασης υποβαθμίζονται καθώς μεγαλώνει το αποθετήριο.Πώς να επιταχύνετε τα ταμεία του Git LFSΤα αντικείμενα LFS κατεβαίνουν σειριακά και κυριαρχούν στον χρόνο ολοκλήρωσης αγοράς.Πώς να εξαλείψετε το χρόνο αδράνειας στις εργασίεςΟι δουλειές αφιερώνουν χρόνο χωρίς να κάνουν τίποτα — περιμένοντας για μια υπηρεσία, έναν ύπνο ή έναν βρόχο δημοσκόπησης.Πώς να χειριστείτε μακροχρόνιες εργασίεςΟρισμένες δουλειές λειτουργούν για ώρες και περιστασιακά αγγίζουν το όριο των έξι ωρών.Πώς να τρέχετε αποτελεσματικά τις νυχτερινές κατασκευέςΟι νυχτερινές κατασκευές είναι ακριβές και κανείς δεν διαβάζει τα αποτελέσματα.Πώς να σταματήσετε τις επαναλαμβανόμενες καταιγίδες CIΟι προγραμματιστές επαναλαμβάνουν τις αποτυχημένες εργασίες επανειλημμένα, πολλαπλασιάζοντας το κόστος και κρύβοντας πραγματικές αποτυχίες.Πώς να μοιραστείτε δοκιμές σε μια μήτραΜια μεγάλη δοκιμαστική εργασία κυριαρχεί στον αγωγό.Πώς να εκτελέσετε μόνο τις δοκιμές που επηρεάζονται από μια αλλαγήΚάθε ώθηση εκτελεί ολόκληρη τη δοκιμαστική σουίτα ανεξάρτητα από το τι άλλαξε.
Κόστος13
Πώς να μειώσετε το κόστος GitHub ActionsΟ λογαριασμός CI μεγαλώνει πιο γρήγορα από την ομάδα και κανείς δεν είναι σίγουρος γιατί.Πώς να μετρήσετε το κόστος CI ανά αίτημα έλξηςΓνωρίζετε το μηνιαίο σύνολο, αλλά όχι πόσο κοστίζει ένα μόνο αίτημα έλξης.Πώς να αποδοθεί το κόστος CI στις ομάδεςΗ δαπάνη CI είναι μία γραμμή στο τιμολόγιο και καμία ομάδα δεν αισθάνεται υπεύθυνη για αυτό.Πώς να ορίσετε έναν προϋπολογισμό λεπτών CIΟι δαπάνες ανακαλύπτονται στο τέλος του μήνα αντί να ελέγχονται κατά τη διάρκεια αυτού.Όταν οι μεγαλύτεροι δρομείς εξοικονομούν πραγματικά χρήματαΈνας μεγαλύτερος δρομέας κοστίζει περισσότερο ανά λεπτό, επομένως δεν είναι σαφές εάν είναι φθηνότερο συνολικά.Πώς να μειώσετε το κόστος λειτουργίας του macOSΤο macOS κυριαρχεί στον λογαριασμό CI.Πώς να μειώσετε το κόστος εξόδου CIΗ μεταφορά δεδομένων είναι ένα μεγάλο και αυξανόμενο μερίδιο του λογαριασμού BYOC.Πώς να μειώσετε το κόστος έλξης ECRΤα τραβήγματα εικόνας κοντέινερ δημιουργούν σημαντικές χρεώσεις μεταφοράς δεδομένων.Πώς να μειώσετε το κόστος μεταφοράς S3 στο CIΗ κίνηση της κρυφής μνήμης και των τεχνουργημάτων στο S3 είναι ακριβή.Το πραγματικό κόστος των αυτο-φιλοξενούμενων δρομέωνΟι δρομείς που φιλοξενούνται μόνοι τους φαίνονται δωρεάν δίπλα στη χρέωση ανά λεπτό.Πώς να χρησιμοποιήσετε spot instances για δρομείς CIΟι παρουσίες κατ' απαίτηση είναι ακριβές για φόρτους εργασίας που είναι εγγενώς επαναδοκιμάσιμοι.Πώς να κάνετε σωστό μέγεθος στους δρομείς σαςΤα μεγέθη δρομέων επιλέχθηκαν μία φορά και δεν επανεξετάστηκαν ποτέ.Πώς να εκτελέσετε οικονομικά το CI σε ανοιχτό κώδικαΤο CI ανοιχτού κώδικα είναι δωρεάν σε δρομείς που φιλοξενούνται από το GitHub αλλά είναι αργό και η αυτο-φιλοξενία δεν είναι ασφαλής.
Προσωρινή αποθήκευση16
Πώς να κάνετε τις κρυφές μνήμες CI να παραμένουν στην πραγματικότηταΟι κρυφές μνήμες έχουν διαμορφωθεί, αλλά το ποσοστό επιτυχίας είναι χαμηλό.Πώς να εργαστείτε γύρω από το όριο των 10 GB προσωρινής μνήμηςΟι κρυφές μνήμες σας ξεπερνούν τα 10 GB ανά αποθετήριο και αρχίζουν σιωπηλά να εξωθούνται.Πώς να μοιραστείτε μια προσωρινή μνήμη κατασκευής σε αποθετήριαΚάθε αποθετήριο διατηρεί τη δική του κρυφή μνήμη για τις ίδιες κοινόχρηστες εξαρτήσεις.Τρόπος κοινής χρήσης μιας προσωρινής μνήμης Docker μεταξύ εργασιώνΚάθε σκέλος μήτρας αναδομεί τα ίδια στρώματα.Πώς να διορθώσετε την ακύρωση της προσωρινής μνήμης DockerΤα επίπεδα Docker αναδημιουργούνται ακόμη και όταν τα σχετικά αρχεία δεν άλλαξαν.Πώς να γράψετε ένα κλειδί κρυφής μνήμης που χτυπάΗ κρυφή μνήμη είναι ρυθμισμένη αλλά χάνει σε κάθε εκτέλεση.Πώς να χρησιμοποιήσετε την κρυφή μνήμη στις GitHub ActionsΟι εκδόσεις C και C++ επαναμεταγλωττίζουν τα πάντα σε κάθε εκτέλεση.Τρόπος χρήσης scache για εκδόσεις RustΤο Cargo αναδημιουργεί τις εξαρτήσεις κάθε φορά που λείπει η προσωρινή μνήμη καταλόγου προορισμού.Πώς να ενεργοποιήσετε τη μνήμη cache διαμόρφωσης GradleΟ Gradle ξοδεύει 30 έως 60 δευτερόλεπτα για τη διαμόρφωση πριν από τη μεταγλώττιση οτιδήποτε.Πώς να αποθηκεύσετε στην προσωρινή μνήμη διαχειριστές αλυσίδας εργαλείωνmise, asdf ή proto επανεγκατάσταση χρόνου εκτέλεσης γλώσσας σε κάθε εκτέλεση.Πώς να αποθηκεύσετε στην προσωρινή μνήμη πακέτα NuGetΗ επαναφορά dotnet κατεβάζει τα ίδια πακέτα σε κάθε εκτέλεση.Πώς να αποθηκεύσετε προσωρινά τους μετασχηματισμούς JestΤο Jest μεταμορφώνει εκ νέου κάθε αρχείο σε κάθε εκτέλεση.Πώς να αποθηκεύσετε στην προσωρινή μνήμη πακέτα vcpkg και ConanΟι διαχειριστές εξαρτήσεων C++ αναδημιουργούν πακέτα από την πηγή σε κάθε εκτέλεση.Πώς να αποθηκεύσετε στην προσωρινή μνήμη Xcode DerivedDataΤο Xcode αναδομεί ολόκληρο το έργο σε κάθε εκτέλεση CI.Επιλογή ενός backend κρυφής μνήμης buildxΥπάρχουν τέσσερα backend της κρυφής μνήμης και δεν είναι σαφές ποιο να χρησιμοποιηθεί.Πώς να διατηρήσετε ζεστή τη βασική κρυφή μνήμηΟι κλάδοι νέων χαρακτηριστικών ξεκινούν πάντα με μια ψυχρή κρυφή μνήμη.
Docker12
Πώς να ρυθμίσετε την προσωρινή αποθήκευση επιπέδου DockerΗ δημιουργία Docker διαρκεί δέκα λεπτά γιατί κάθε επίπεδο ανακατασκευάζεται.Πώς να βελτιστοποιήσετε ένα Dockerfile για CIΜικρές αλλαγές κώδικα ενεργοποιούν μακρές ανακατασκευές.Τρόπος χρήσης εκδόσεων Docker πολλαπλών σταδίωνΟι εικόνες είναι μεγάλες και περιέχουν εργαλεία κατασκευής που δεν πρέπει να αποστέλλονται.Τρόπος εκτέλεσης ταυτόχρονων εκδόσεων Docker με ασφάλειαΤα σκέλη παράλληλης μήτρας αντιμάχονται και οι δομές επιβραδύνουν ή αποτυγχάνουν.Πώς να χρησιμοποιήσετε ένα απομακρυσμένο πρόγραμμα δημιουργίας DockerΗ κρυφή μνήμη στρώματος μεταφέρεται προς και από τον runner σε κάθε κατασκευή.Πώς να δημιουργήσετε γρήγορα εικόνες πολλαπλών πλατφορμώνΗ προσθήκη linux/arm64 κάνει την κατασκευή να διαρκέσει είκοσι λεπτά.Πώς να μειώσετε το μέγεθος της εικόνας του κοντέινερΟι εικόνες είναι εκατοντάδες megabyte και αργούν να τραβήξουν σε κάθε εργασία.Πώς να μεταβιβάσετε μυστικά σε μια κατασκευή DockerΧρειάζεστε ένα ιδιωτικό διακριτικό μητρώου ή κλειδί SSH κατά τη διάρκεια της κατασκευής.Πώς να διαμορφώσετε τα προφίλ δημιουργού DockerΟι διαφορετικές εικόνες χρειάζονται διαφορετικούς πόρους δημιουργίας.Πώς να δημιουργήσετε πολλές εικόνες από ένα monorepoΚάθε πάτημα δημιουργεί κάθε εικόνα στο αποθετήριο.Πώς να δημοσιεύσετε σε πολλαπλά μητρώαΗ ίδια εικόνα δημιουργείται μία φορά ανά μητρώο.Πώς να ρυθμίσετε μια προσωρινή μνήμη pull-through μητρώουΟι λήψεις εικόνας είναι αργές και συνεχίζετε να αγγίζετε Docker Όρια ταχύτητας Hub.
βραχίονας647
Πώς να μετακινήσετε το CI σε δρομείς arm64Αναπτύσσεστε στο Graviton ή στο Ampere αλλά χτίζετε σε x64.Λίστα ελέγχου μετεγκατάστασης arm64Θέλετε να μετακινηθείτε στο arm64 χωρίς να σπάσετε τον αγωγό.Cross-compiling έναντι εγγενούς βραχίονα64Χρειάζεστε δυαδικά αρχεία arm64 και δεν είστε σίγουροι αν θα κάνετε cross-compile ή εγγενή δημιουργία.Γιατί οι εκδόσεις QEMU arm64 είναι τόσο αργέςΗ προσθήκη linux/arm64 σε μια έκδοση Docker το κάνει είκοσι φορές πιο αργό.Διόρθωση εγγενών λειτουργικών μονάδων Node στο arm64Η εγκατάσταση npm αποτυγχάνει ή μεταγλωττίζεται από την πηγή στους runners arm64.Διόρθωση τροχών Python στο arm64Το pip install μεταγλωττίζει πακέτα από την πηγή στο arm64.Χτίζοντας σε δρομείς AWS GravitonΘέλετε το πλεονέκτημα τιμής-απόδοσης Graviton στο CI.
macOS και iOS8
Πώς να μειώσετε τους χρόνους δημιουργίας του Xcode σε CIΟι εκδόσεις Xcode χρειάζονται είκοσι λεπτά σε κάθε εκτέλεση.Πώς να επιταχύνετε τις δοκιμές προσομοιωτή iOSΟι δοκιμές προσομοιωτή διαρκούν μισή ώρα.Πώς να χειριστείτε την υπογραφή κώδικα iOS στο CIΗ υπογραφή λειτουργεί τοπικά και αποτυγχάνει κατά διαστήματα στο CI.Πώς να επικυρώσετε τις εφαρμογές macOS στο CIΗ συμβολαιογραφική διαδικασία είναι αργή και περιστασιακά λήγει.Διόρθωση της εξάντλησης του δίσκου runner macOSΟι εργασίες αποτυγχάνουν χωρίς να υπάρχει χώρος στη συσκευή στο macOS.Πώς να παραλληλίσετε το iOS CIΤο iOS CI είναι σειριακό και τα λεπτά macOS είναι ακριβά.Πώς να ανεβάσετε στο TestFlight από το CIΟι μεταφορτώσεις TestFlight είναι αργές και μερικές φορές αποτυγχάνουν μετά από μια επιτυχημένη κατασκευή.Πώς να καρφιτσώσετε εκδόσεις XcodeΜια ενημέρωση εικόνας runner άλλαξε σιωπηλά την έκδοση Xcode και η κατασκευή σας άλλαξε μαζί της.
Windows5
Πώς να κάνετε τα Windows CI πιο γρήγοραΟι εργασίες των Windows διαρκούν τρεις φορές περισσότερο από τις αντίστοιχες εργασίες Linux.Πώς να αποθηκεύσετε προσωρινά την έξοδο MSBuildΚάθε κατασκευή μεταγλωττίζει ξανά όλα τα έργα.Εγκατάσταση στοιχείων του Visual Studio σε CIΛείπει ένας απαιτούμενος φόρτος εργασίας VS και η εγκατάστασή του διαρκεί δεκαπέντε λεπτά.Πώς να υπογράψετε τα δυαδικά αρχεία των Windows στο CIΗ υπογραφή αυθεντικού κωδικού χρειάζεται πιστοποιητικό που δεν πρέπει να εκτίθεται.Πώς να παραλληλίσετε τις δοκιμές .NETΟι δοκιμές .NET εκτελούνται σειριακά και διαρκούν είκοσι λεπτά.
Ασφάλεια6
Πώς να διαχειριστείτε μυστικά στις GitHub ActionsΤα μυστικά απλώνονται στις ρυθμίσεις αποθετηρίου και κανείς δεν ξέρει τι χρησιμοποιείται ακόμα.Πώς να εκτελέσετε CI runners μέσα στο VPC σαςΟι κατασκευές πρέπει να προσεγγίζουν μια εσωτερική υπηρεσία που δεν εκτίθεται δημόσια.Πώς να δώσετε στους δρομείς μια στατική IPΜια υπηρεσία τρίτου κατασκευαστή απαιτεί λίστα επιτρεπόμενων IP και οι φιλοξενούμενες διευθύνσεις IP αλλάζουν συνεχώς.Πώς να εκτελέσετε σαρώσεις ασφαλείας χωρίς επιβράδυνση του CIΗ σάρωση ευπάθειας προσθέτει λεπτά σε κάθε αίτημα έλξης.Πώς να ασφαλίσετε την αλυσίδα εφοδιασμού CI σαςΟι ενέργειες τρίτων εκτελούνται με πρόσβαση στο αποθετήριο και τα μυστικά σας.Πώς να σκληρύνετε τα δικαιώματα ροής εργασίαςΚάθε ροή εργασίας εκτελείται με πρόσβαση εγγραφής που δεν χρειάζεται.
Παρατηρησιμότητα10
Πώς να συλλέξετε μετρήσεις δρομέωνΔεν μπορείτε να πείτε εάν μια εργασία είναι συνδεδεμένη με CPU, μνήμη ή δίσκο.Πώς να παρακολουθείτε τα εκατοστημόρια διάρκειας κατασκευήςΟ μέσος χρόνος κατασκευής φαίνεται καλός, αλλά οι προγραμματιστές εξακολουθούν να παραπονιούνται.Πώς να εξαγάγετε ίχνη CI με το OpenTelemetryΤα δεδομένα χρονισμού CI ζουν σε ένα ξεχωριστό εργαλείο από την υπόλοιπη παρατηρησιμότητα.Τρόπος αναζήτησης δεδομένων CI μέσω προγραμματισμούΧρειάζεστε δεδομένα CI σε έναν πίνακα εργαλείων ή μια εβδομαδιαία αναφορά.Πώς να εκτελέσετε μια εβδομαδιαία αναφορά υγείας CIΤο CI υποβαθμίζεται σταδιακά και κανείς δεν το παρατηρεί μέχρι να είναι κακό.Πώς να ειδοποιήσετε για παλινδρομήσεις CIΜια αλλαγή κάνει το CI πιο αργό κατά 40% και περνά απαρατήρητο για εβδομάδες.Πώς να αντιμετωπίσετε τις ασταθείς εργασίες CIΟι δοκιμές αποτυγχάνουν τυχαία και οι άνθρωποι προσπαθούν ξανά μέχρι να περάσουν.Τρόπος εντοπισμού σφαλμάτων σε μια αποτυχημένη ροή εργασίαςΜια δουλειά αποτυγχάνει στο CI και λειτουργεί οπουδήποτε αλλού.Πώς να ρυθμίσετε τα επίπεδα υπηρεσιών CIΚανείς δεν συμφωνεί σχετικά με το πόσο γρήγορο θα πρέπει να είναι το CI, επομένως δεν τίθεται ποτέ προτεραιότητα.Πώς να εκθέσετε δεδομένα CI σε πράκτορες AIΟι πράκτορες που διορθώνουν σφάλματα CI έχουν μόνο κείμενο αρχείου καταγραφής για εργασία.
Κλίμακα28
Πώς να κλιμακώσετε τους δρομείς που φιλοξενούνται μόνοι σαςΟι αυτοφιλοξενούμενοι δρομείς είτε κάνουν ουρά στην αιχμή είτε κάθονται αδρανείς και ακριβοί.Πώς να χρησιμοποιήσετε τις ομάδες δρομέωνΟποιοδήποτε αποθετήριο μπορεί να προγραμματίσει εργασίες σε οποιονδήποτε δρομέα.Πώς να σχεδιάσετε μια στρατηγική για το runner labelΟι ετικέτες μεγάλωσαν οργανικά και κανείς δεν ξέρει ποια να χρησιμοποιήσει.Φιλοξενείται ή BYOC: πώς να επιλέξετεΔεν είστε σίγουροι αν θα χρησιμοποιήσετε φιλοξενούμενους δρομείς ή αν θα αναπτύξετε στο δικό σας σύννεφο.Πώς να χρησιμοποιήσετε επαναχρησιμοποιήσιμες ροές εργασίας σε κλίμακαΠενήντα αποθετήρια έχουν πενήντα ελαφρώς διαφορετικά αντίγραφα του ίδιου αγωγού.Πώς να συντονίσετε τις ροές εργασίας μεταξύ των αποθετηρίωνΜια αλλαγή σε ένα αποθετήριο πρέπει να ενεργοποιήσει build σε άλλα.Πώς να δημιουργήσετε προσαρμοσμένες εικόνες δρομέωνΚάθε εργασία ξοδεύει λεπτά εγκαθιστώντας τα ίδια εργαλεία.Πώς να διαθέσετε με ασφάλεια τις ενημερώσεις βασικών εικόνωνΜια βασική ενημέρωση εικόνας διασπά τα build σε πολλά αποθετήρια ταυτόχρονα.Πώς να χειριστείτε το φορτίο CI για bot εξάρτησηςΤο Dependabot ανοίγει τριάντα αιτήματα έλξης και αυξήσεις κόστους CI.Πώς να εργαστείτε με όρια ταυτόχρονης χρήσηςΟι εργασίες βρίσκονται στην ουρά και δεν είναι σαφές ποιο όριο είναι δεσμευτικό.Πώς να χρησιμοποιήσετε αποτελεσματικά τις εργασίες κοντέινερΟι εργασίες κοντέινερ παρέχουν αναπαραγωγιμότητα αλλά διακόπτουν την προσωρινή αποθήκευση.Πώς να χρησιμοποιείτε σωστά τα κοντέινερ σέρβιςΟι δοκιμές αποτυγχάνουν κατά διαστήματα κατά την εκκίνηση.Πώς να δημιουργήσετε μία φορά και να αναπτύξετε πολλές φορέςΤο ίδιο τεχνούργημα ξαναχτίζεται για κάθε περιβάλλον.Πώς να δομήσετε τις εργασίες ανάπτυξηςΟι αναπτύξεις είναι αργές, επικίνδυνες και δύσκολο να ελεγχθούν.Πώς να εκτελείτε αποτελεσματικά περιβάλλοντα προεπισκόπησηςΚάθε αίτημα έλξης περιμένει σε μια πλήρη κατασκευή περιβάλλοντος.Πώς να δομήσετε τις κατασκευές απελευθέρωσηςΟι εκδόσεις εκδόσεων είναι αργές και περιστασιακά μη αναπαραγώγιμες.Πώς να δημοσιεύσετε αντικείμενα κατασκευήςΤο κόστος αποθήκευσης αντικειμένων αυξάνεται και η διατήρηση δεν διαμορφώθηκε ποτέ.Πώς να χειριστείτε μεταφορτώσεις μεγάλων αντικειμένωνΗ μεταφόρτωση του αποτελέσματος κατασκευής διαρκεί λίγα λεπτά.Πώς να αποκτήσετε σταδιακά build σε CIΤο CI κάνει πάντα μια καθαρή κατασκευή, παρόλο που το σύστημα κατασκευής σας υποστηρίζει σταδιακή μεταγλώττιση.Πώς να μεταβιβάζετε δεδομένα μεταξύ εργασιώνΟι θέσεις εργασίας πρέπει να μοιράζονται το αποτέλεσμα κατασκευής και δεν είναι σαφές πώς.Πώς να χρησιμοποιήσετε το matrix builds καλάΗ μήτρα έχει μεγαλώσει και κανείς δεν θυμάται γιατί υπάρχει κάθε συνδυασμός.Πώς να ελέγξετε την έκρηξη μήτραςΜια μικρή αλλαγή πίνακα τριπλασίασε τον αριθμό των θέσεων εργασίας και τον λογαριασμό.Πώς να κάνετε το μέγεθος των runners για εκδόσεις JavaΜαντεύετε σε μέγεθος δρομέα για κατασκευή Maven ή Gradle.Πώς να κάνετε το μέγεθος των runners για τις σουίτες δοκιμής NodeΟι εργάτες του Jest ή του Vitest είτε λιμοκτονούν είτε αλώνουν και δεν είστε σίγουροι για ποιο.Πώς να κάνετε το μέγεθος των runners για σουίτες δοκιμών PythonΤο pytest εκτελείται σε έναν πυρήνα ενώ ο δρομέας έχει οκτώ αδρανείς.Πώς να κάνετε το μέγεθος των δρομέων για τις κατασκευές RustΤο φορτίο δημιουργεί κλίμακα με πυρήνες, αλλά δεν είναι σαφές πόσο μακριά φτάνει αυτό.Τρόπος διαμόρφωσης μεγέθους δρομέων για εκδόσεις DockerΕπιλέγετε ένα μέγεθος runner για τις κατασκευές εικόνων.Πώς να κάνετε μέγεθος runners για εκδόσεις AndroidΟι συναρμολογήσεις βαθμίδων και οι δοκιμές οργάνων χρειάζονται πολύ διαφορετικά μηχανήματα.