Экспериментариум
Bazel, stamping, remote cache (часть 2)
11 March 2024
- stamping — позволяет встроить в артефакт данные о том, от какого коммита можно собрать аналогичный артефакт;
- remote cache и remote build &mdasg; позволяет иметь общий кэш между сборщиками или даже собрать артефакты на ферме.
Ранее, к сожалению, эти фичи были взаимоисключающими, но с версии Bazel 7.0 можно использовать stamping с remote cache
при помощи scrubbing-а. Сегодня вышла версия Bazel 7.1, в которой появилась возможность использовать stamping
с remote build
.
Разработка программного обеспечения связана не только с написанием кода, но и с его отладкой. И отладка должна быть по возможности комфортной.
С некоторыми ошибками мы пишем в лог стек вызовов. Используемая нами IDE (Idea, GoLand) позволяет по скопированному стеку вызовов получить комфортную навигацию по файлам (Analyze external stack traces). К сожалению, эта возможность хорошо работает только в том случае, если бинарый файл собран на том же хосте, на котором запущена IDE.
Этот пост посвящён тому, как мы пытались подружить формат стека вызовов и IDE.
... Read More
Bazel, stamping, remote cache
9 March 2023
В Bazel есть любопытная фича, позволяющая добавить данные, которые не инвалидируют кэш сборки.
Например, это бывает полезно, чтобы добавить в исполняемый файл информацию о том, когда он был собран и из какой ревизии. Если для времени и номера ревизии использовать stamping, то, когда собранный файл уже есть в кэше, он пересобираться не будет.
... Read More
Путь миграции с Go Build на Bazel
27 February 2023
При поиске решений для сборки больших проектов на Go с завидной регулярностью попадались отсылки на статьи про Bazel, где общий алгоритм действий сводился к следующему:
- С помощью Gazelle создаём BUILD-файлы и файлы зависимостей;
- PROFIT.
К сожалению, эти статьи не дали ответа на два вопроса:
- Как, с точки зрения разработчика, должна выглядеть работа с репозиторием после миграции на Bazel?
- Как мигрировать на Bazel за несколько шагов, а не одним прыжком?
Зачем мигрировать с go build на Bazel?
22 February 2023
Это первый пост из цикла, посвященного миграции с go build
на Bazel.
К процессу миграции мы подошли на этапе, когда запуск тестов на CI занимал примерно от 15 минут до часа. При этом мы уже успели реализовать некоторое распараллеливание и кэширование результатов тестов. Без этого тесты на одной машине должны были бы идти примерно часов восемь.
После внедрения Bazel запуск тестов на CI в основном укладывается в интервал от 1,5 до 25 минут (50 перцентиль в районе 12 минут), что гораздо комфортнее исходной ситуации.
... Read More
Сборка Docker-образов для MacBook M1 под Linux
1 August 2021
Kubernetes Headless Service: А если Pod исчез?
17 June 2021
Приглашаю вас почитать нашу историю и самим попробовать поиграться с этой проблемой локально.
На одном из проектов мы используем MongoDB и Kubernetes. У MongoDB есть компонент: mongos. Через него выполняются запросы в шардированном MongoDB кластере (можно считать, что это просто хитрый proxy). До переезда в Kubernetes сервисы mongos устанавливались непосредственно на каждый хост.
При переезде сервисов в Kubernetes мы поселили пул mongos в Headless-сервис с автоматическим масштабированием Deployment через HPA (Horizontal Pod Autoscaler).
Через некоторое время выяснилось, что приложению при уменьшении количества Pod с mongos становится не очень хорошо.
... Read More
Логирование в Jenkins
21 July 2019
В Jenkins очень забавно сделано логирование: через WEB UI можно добавить логирование нужных логгеров в кольцевой буффер.
Но для логирования в файл нужно немного поплясать с бубном.
... Read More
Что не так с MySQL?
19 November 2016
Мне несколько надоело каждый раз воспроизводить список проблем MySQL по памяти и я решил написать этот пост.
... Read More
Что не так с Perforce?
18 November 2016
Когда более 2-х лет назад был презентован Git as Subversion, некоторые люди активно предлагали попробовать Perforce.
И вот, волей судеб, последние полгода на работе проект живёт в Perforce. И у меня сложилось о нём своё мнение.
... Read More