runnerhut (бігун)
Посібники
Розв'язання проблем CI, з якими команди стикаються насправді.
швидкість13
Як прискорити GitHub ActionsВаш конвеєр займає більше часу, ніж будь-хто хоче чекати, і неочевидно, куди йде час.Як знайти повільний крок у робочому процесіКонвеєр повільний, але кожен окремий крок виглядає розумним.Як зменшити кількість холодних запусків GitHub ActionsЗавдання залишаються від 30 до 90 секунд перед виконанням першого кроку.Як діагностувати час у черзі GitHub ActionsЗавдання стоять у черзі протягом кількох хвилин, перш ніж бігун забере їх.Як зробити git checkout швидшимдії/перевірка займають хвилини у великому сховищі.Як запустити CI у дуже великому сховищіПеревірка, індексування та звітування про статус погіршуються разом із зростанням сховища.Як пришвидшити перевірку Git LFSОб’єкти LFS завантажуються послідовно та домінують під час оформлення замовлення.Як усунути простої на робочих місцяхРобота витрачає час на нічого не роблячи — чекаючи на службу, сплячи або цикл опитування.Як справлятися з довготривалими роботамиДеякі роботи тривають годинами, іноді досягаючи шестигодинного ліміту.Як ефективно запускати нічні збіркиНічні збірки дорогі, а результати ніхто не читає.Як зупинити шторми повторного запуску CIРозробники неодноразово повторюють невдалі завдання, збільшуючи вартість і приховуючи справжні невдачі.Як розділити тести на матрицюОдне довге тестове завдання домінує в конвеєрі.Як запускати лише ті тести, на які вплинули зміниКожне натискання запускає весь набір тестів незалежно від змін.
Вартість13
Як зменшити витрати на GitHub ActionsРахунок CI зростає швидше, ніж команда, і ніхто не знає, чому.Як виміряти вартість CI за запит на отриманняВи знаєте загальну суму за місяць, але не знаєте, скільки коштує один запит на отримання.Як віднести вартість CI до командВитрати на CI – це один рядок у рахунку-фактурі, і жодна команда не відчуває відповідальності за це.Як встановити бюджет хвилин КІВитрати виявляються наприкінці місяця, а не контролюються протягом нього.Коли більші бігуни насправді економлять грошіБільший бігун коштує більше за хвилину, тому незрозуміло, чи він дешевший загалом.Як скоротити витрати на macOS runnermacOS домінує в рахунку CI.Як зменшити вихідні витрати КІПередача даних є значною та зростаючою часткою законопроекту BYOC.Як зменшити витрати ECRЗалучення зображень контейнера створює значні витрати на передачу даних.Як зменшити витрати на передачу S3 у CIТрафік кешу та артефактів до S3 дорогий.Справжня вартість самостійних бігунівСамостійні бігуни виглядають безкоштовно поруч із тарифікацією за хвилину.Як використовувати точкові екземпляри для бігунів CIЕкземпляри на вимогу є дорогими для робочих навантажень, які за своєю суттю можуть повторюватися.Як правильно підібрати розмір бігунокРозміри бігунів були обрані один раз і ніколи не поверталися.Як економічно використовувати CI з відкритим кодомCI з відкритим вихідним кодом є безкоштовним для запускачів, розміщених на GitHub, але повільним, а самостійне розміщення небезпечно.
Кешування16
Як зробити так, щоб кеші CI дійсно зберігалисяКеш-пам’ять налаштовано, але показник звернень низький.Як обійти ліміт кешу в 10 ГБВаші кеш-пам’яті перевищують 10 ГБ на репозиторій і починають тихо видалятися.Як надати спільний доступ до кешу збірки між сховищамиКожен репозиторій підтримує власний кеш для тих самих спільних залежностей.Як поділитися кеш-пам’яттю Docker між завданнямиКожна нога матриці перебудовує однакові шари.Як виправити недійсність кешу DockerШари Docker відновлюються, навіть якщо відповідні файли не змінюються.Як написати ключ кешу, який потрапляєКеш налаштовано, але промахується під час кожного запуску.Як використовувати ccache в GitHub ActionsЗбірки C і C++ перекомпілюють усе під час кожного запуску.Як використовувати sccache для збірок RustCargo відновлює залежності кожного разу, коли кеш цільового каталогу пропускається.Як увімкнути кеш конфігурації GradleGradle витрачає від 30 до 60 секунд на налаштування перед компіляцією.Як кешувати менеджери інструментівmise, asdf або proto перевстановлюйте середовища виконання мови під час кожного запуску.Як кешувати пакети NuGetdotnet restore завантажує ті самі пакети під час кожного запуску.Як кешувати перетворення JestJest повторно перетворює кожен файл під час кожного запуску.Як кешувати пакети vcpkg і ConanМенеджери залежностей C++ відновлюють пакети з джерела під час кожного запуску.Як кешувати Xcode DerivedDataXcode перебудовує весь проект під час кожного запуску CI.Вибір бекенда buildx кешуІснує чотири сервери кешу, і незрозуміло, який використовувати.Як підтримувати кеш базової гілки в тепліГілки нових функцій завжди починаються з холодного кешу.
Docker12
Як налаштувати кешування рівня DockerСтворення Docker займає десять хвилин, оскільки кожен шар будується заново.Як оптимізувати Dockerfile для CIНевеликі зміни коду викликають довгі перебудови.Як використовувати багатоетапні збірки DockerЗображення великі та містять інструменти для створення, які не слід надсилати.Як безпечно запускати паралельні збірки DockerПаралельні матричні ноги змагаються, а збірки сповільнюються або виходять з ладу.Як користуватися віддаленим конструктором DockerКеш шарів передається в раннер і з нього під час кожної збірки.Як швидко створювати мультиплатформенні зображенняДодавши linux/arm64, збирання займе двадцять хвилин.Як зменшити розмір зображення контейнераЗображення займають сотні мегабайт і повільно завантажуються в кожну роботу.Як передати секрети в збірку DockerПід час збірки вам потрібен маркер приватного реєстру або ключ SSH.Як налаштувати профілі конструктора DockerДля різних зображень потрібні різні ресурси конструктора.Як створити багато зображень із монорепоКожне натискання створює кожне зображення в сховищі.Як опублікувати в кількох реєстрахТой самий образ створюється один раз для кожного реєстру.Як налаштувати протягнутий кеш реєструВитягування зображень повільне, і ви постійно досягаєте обмежень швидкості Docker Hub.
arm647
Як перенести CI на раннери arm64Ви розгортаєте Graviton або Ampere, але будуєте на x64.контрольний список міграції arm64Ви хочете перейти на arm64, не порушуючи конвеєр.Крос-компіляція проти рідної arm64Вам потрібні двійкові файли arm64, і ви не впевнені, крос-компілювати чи створювати нативно.Чому збірки QEMU arm64 такі повільніДодавання linux/arm64 до збірки Docker робить її у двадцять разів повільнішою.Виправлення власних модулів Node на arm64npm інсталювати не вдається або компілюється з вихідного коду на програмах arm64.Виправлення коліс Python на arm64pip install компілює пакунки з джерела на arm64.На основі бігунків AWS GravitonВам потрібна перевага Graviton у співвідношенні ціни та якості в CI.
macOS та iOS8
Як скоротити час збирання Xcode в CIКожне складання Xcode займає двадцять хвилин.Як прискорити тестування симулятора iOSВипробування на тренажері займають півгодини.Як працювати з підписом коду iOS у CIПідписання працює локально та періодично дає збій у CI.Як нотаріально завірити програми macOS у CIНотаріальне завірення відбувається повільно та час від часу.Виправлення виснаження диска запуску macOSЗавдання не виконуються, оскільки на пристрої в macOS не залишається місця.Як розпаралелити iOS CIiOS CI є послідовним, а хвилини macOS дорогі.Як завантажити в TestFlight із CIЗавантаження TestFlight відбувається повільно і іноді не вдається після успішної збірки.Як закріпити версії XcodeОновлення образу бігуна мовчки змінило версію Xcode, і разом із цим змінилася ваша збірка.
вікна5
Як зробити Windows CI швидшоюЗавдання Windows займають утричі більше часу, ніж еквівалентні завдання Linux.Як кешувати вихід MSBuildКожна збірка перекомпілює всі проекти.Встановлення компонентів Visual Studio в CIНеобхідне робоче навантаження VS відсутнє, і його встановлення займає п’ятнадцять хвилин.Як підписати двійкові файли Windows у CIДля підписання автентичного коду потрібен сертифікат, який не можна розкривати.Як розпаралелювати тести .NETТести .NET виконуються послідовно і займають двадцять хвилин.
Безпека6
Як керувати секретами в GitHub ActionsСекрети розкидані по налаштуваннях сховища, і ніхто не знає, що досі використовується.Як запустити CI runner у вашому VPCЗбіркам потрібно досягти внутрішньої служби, яка не є загальнодоступною.Як надати бігунам статичний IPСлужба третьої сторони потребує дозволеного списку IP-адрес, а IP-адреси хостингового програмного забезпечення постійно змінюються.Як запустити сканування безпеки без уповільнення CIСканування вразливостей додає хвилини до кожного запиту на отримання.Як захистити ланцюжок поставок КІДії сторонніх розробників виконуються з доступом до вашого сховища та секретів.Як посилити дозволи робочого процесуКожен робочий процес виконується з доступом на запис, який йому не потрібен.
Спостережливість10
Як збирати метрики бігунівВи не можете визначити, чи прив’язане завдання до процесора, пам’яті чи диска.Як відстежувати процентиль тривалості збіркиСередній час збирання виглядає добре, але розробники все одно скаржаться.Як експортувати трасування CI за допомогою OpenTelemetryДані синхронізації CI знаходяться в окремому інструменті від решти вашої спостережуваності.Як запитувати дані CI програмним шляхомВам потрібні дані КІ на інформаційній панелі або в щотижневому звіті.Як запустити щотижневий звіт про стан КІКІ поступово погіршується, і ніхто цього не помічає, поки він не стане поганим.Як сповіщати про регресії CIЗміна сповільнює CI на 40%, і це залишається непоміченим тижнями.Як працювати з нестабільними роботами CIТести випадковим чином не вдаються, і люди повторюють спробу, доки не пройдуть.Як налагодити невдалий робочий процесЗавдання не вдається в CI і працює скрізь.Як встановити рівні обслуговування CIНіхто не погоджується щодо того, наскільки швидким має бути CI, тому йому ніколи не віддається пріоритет.Як надати агентам AI дані CIАгенти, які налагоджують помилки КІ, мають працювати лише з текстом журналу.
масштаб28
Як масштабувати автономні раннериСамостійні бігуни або стоять у черзі в пік, або сидять без діла й дорогі.Як використовувати групи бігунівБудь-який репозиторій може планувати завдання на будь-якому бігуні.Як розробити стратегію бігунівЕтикетки росли органічно, і ніхто не знає, які використовувати.Хостинг або BYOC: як вибратиВи не впевнені, використовувати розміщені бігуни чи розгортати у власній хмарі.Як використовувати багаторазові робочі процеси в масштабіП'ятдесят сховищ мають п'ятдесят дещо різних копій одного конвеєра.Як координувати робочі процеси між сховищамиЗміна в одному репозиторії повинна ініціювати збірки в інших.Як створювати власні зображення бігунівКожна робота витрачає хвилини на встановлення тих самих інструментів.Як безпечно розгортати оновлення базового зображенняОновлення базового образу розриває збірки в багатьох сховищах одночасно.Як обробляти навантаження CI залежностейDependabot відкриває тридцять пул-запитів і стрибки вартості CI.Як працювати з обмеженнями паралельностіЧерга завдань, і незрозуміло, який ліміт є обов’язковим.Як ефективно використовувати роботу контейнерівКонтейнерні завдання забезпечують відтворюваність, але порушують кешування.Як правильно користуватися сервісними контейнерамиПід час запуску тести періодично дають збій.Як створити один раз і розгорнути багато разівТой самий артефакт перебудовується для кожного середовища.Як структурувати завдання розгортанняРозгортання є повільним, ризикованим і важким для аудиту.Як ефективно запускати середовища попереднього переглядуКожен запит на отримання чекає на повну збірку середовища.Як структурувати збірки випускуВипускні збірки повільні та іноді невідтворювані.Як опублікувати артефакти збіркиВитрати на зберігання артефактів зростають, а збереження ніколи не було налаштовано.Як обробляти завантаження великих артефактівЗавантаження результатів збірки займає кілька хвилин.Як отримати додаткові збірки в CICI завжди виконує чисту збірку, навіть якщо ваша система збірки підтримує інкрементну компіляцію.Як передавати дані між завданнямиВакансії повинні ділитися результатами збірки, і незрозуміло як.Як добре використовувати матричні збіркиМатриця розросла, і ніхто не пам'ятає, чому існує кожна комбінація.Як контролювати вибух матриціНевелика зміна матриці потроїла кількість робіт і рахунок.Як визначити розмір бігунів для збірок JavaВи вгадуєте розмір бігуна для збірки Maven або Gradle.Як визначити розмір бігунів для наборів тестів NodeПрацівники Jest або Vitest або голодують, або бідують, і ви не впевнені, що саме.Як визначити розмір бігунів для наборів тестів Pythonpytest працює на одному ядрі, тоді як бігун має вісім неактивних.Як визначити розмір бігунів для збірок RustCargo створює масштаб за допомогою ядер, але незрозуміло, як далеко це заходить.Як визначити розмір бігунів для збірок DockerВи обираєте розмір бігуна для збірок зображень.Як визначити розмір бігунів для збірок AndroidДля збирання Gradle і тестування приладів потрібні дуже різні машини.