Перейти к содержимому

Аналитика сборок Elixir

Hex-пакет Tuist может отправлять аналитику сборок в Tuist. Время сборки, граф зависимостей между вашими файлами и то, как они меняются со временем, дают вам всё необходимое для оптимизации графа сборки и максимального использования всех ядер, доступных в среде компиляции.

Требования

Отправка отчётов о сборках#

Общая настройка устанавливает интеграцию компиляции. Продолжайте использовать свои обычные команды:

bash
mix compile

Интеграция охватывает mix compile и каждую компиляцию, которую запускает другая задача, например mix test или mix phx.server. Компиляция, которая не находит работы, не отправляется в отчёт, поэтому в панели управления отображаются только выполненные сборки.

Отправка идентификатора актора#

Запросы отчётов о сборке и тестировании Mix включают необязательный заголовок x-tuist-actor-id только если вы явно настроили метку. Установите TUIST_ACTOR_ID в метку, ограниченную организацией, или добавьте actor_id: "developer-label" в конфигурацию tuist проекта. Приоритет имеет переменная окружения, затем параметры времени выполнения :actor_id, затем конфигурация проекта. По умолчанию метка не отправляется, и пакет не определяет имена пользователей операционной системы. Фиксированная метка проекта применяется ко всем, кто использует эту конфигурацию. Пустые или недействительные переопределения пропускают утверждение вместо возврата к значению по умолчанию; это не удаляет проверенную идентификацию на основе учётных данных. Если пользовательский прокси отклоняет неизвестные заголовки, откажитесь от отправки с помощью TUIST_ACTOR_ID="".

Идентификаторы должны состоять из 1–128 байт печатных символов ASCII, кроме пробелов. Недействительные переопределения пропускаются без возврата к значению по умолчанию. Проверенные индивидуальные учётные данные имеют приоритет; другие идентификаторы, сообщаемые клиентом, отображаются как Не проверено, никогда не авторизуют доступ и никогда не связываются с пользователями автоматически. Любой, кто может просматривать отчёты проекта, видит эти идентификаторы, включая публичных зрителей, если проект общедоступен, и они включаются в экспорт данных, поэтому не включайте секреты. Старые серверы игнорируют необязательный заголовок, а новые серверы принимают старых клиентов без него. Новые отчёты с общим токеном без идентификатора показывают Неизвестно, а не публикующую организацию; исторические отчёты сохраняют прежнюю атрибуцию. Отчётность о сборках и тестах по умолчанию требует аутентификации. Самостоятельно размещённые установки могут явно включить отчётность без учётных данных, как описано ниже.

Отчётность без учётных данных в частной сети#

После того как оператор настроит TUIST_NETWORK_TRUSTED_INSIGHTS_ACCESS=true на экземпляре и перезапустит его, как описано в руководстве по самостоятельному размещению, настройте целевой сервер. SDK автоматически определяет, разрешает ли экземпляр отчётность без учётных данных, когда они отсутствуют. Настройка экземпляра охватывает все поддерживаемые проекты и не имеет переключателя в панели управления:

elixir
tuist: [
url: "https://tuist.internal.example",
project: "account/project"
]

mix tuist.compile и mix tuist.test публикуют структурированные отчёты без входа в систему, когда учётные данные действительно отсутствуют и обнаружение подтверждает, что сервер это разрешает. Флаг клиента или согласие проекта не требуются. Предоставленные учётные данные, включая предоставленную идентификацию CI OIDC, используются или отклоняются, но никогда не игнорируются для перехода к неподписанной отчётности. TUIST_TOKEN, состоящий только из пробельных символов, является ошибкой. Пустой TUIST_TOKEN может вернуться к действительным сохранённым учётным данным или предоставленному OIDC, а устаревшие сохранённые учётные данные могут вернуться к предоставленному OIDC; оба пути остаются аутентифицированными и никогда не включают неподписанную отчётность. Непригодные учётные данные сохраняются и приводят к ошибке, если ни один аутентифицированный вариант возврата не succeeds. Обновите каждую реплику сервера до версии с поддержкой обнаружения перед обновлением клиентов для отчётности без учётных данных; старые серверы без обнаружения, отключённые экземпляры и сбои обнаружения всё ещё требуют аутентификации.

Неподписанные запуски являются телеметрией, а не доверенными данными о нестабильности тестов, карантине, покрытии или доказательствами выборочного выполнения. Планирование шардов, архивы сборок и конечные точки покрытия/артефактов всё ещё требуют учётных данных. Установите TUIST_ACTOR_ID="" независимо, чтобы пропустить настроенное утверждение об акторе; проверенная идентификация учётных данных не затрагивается.

Что отслеживается#

Для каждой сборки пакет собирает:

  • Её длительность, успешность, а также среду Elixir, Erlang/OTP и Mix, в которой она выполнялась
  • Каждое предупреждение и ошибку с указанием файла и строки
  • Время компиляции каждого файла и модули, которые он определяет
  • Файлы, от которых зависит каждый файл, и нужны ли они во время компиляции или только во время выполнения
  • Что делала сборка помимо компиляции файлов, например проверку типов, запись на диск и работу других компиляторов Mix
  • Использование процессора, памяти, сети и диска машиной во время сборки
  • Ветку и коммит, а при непрерывной интеграции — провайдера и запуск

Поиск причин замедления сборки#

Откройте сборку из раздела Сборки → Запуски сборок в панели управления. Сборки, количество диагностик и сводки кэша зависимостей также доступны через tuist build mix list и tuist build mix show, GET /api/projects/{account_handle}/{project_handle}/mix/builds, а также инструменты list_mix_builds и get_mix_build MCP.

На вкладке Обзор перечислены файлы, скомпилированные сборкой. Вы можете группировать их по модулям, искать и сортировать по:

  • Длительности компиляции, чтобы найти файлы, которые сами по себе медленные.
  • Зависимым во время компиляции — количеству файлов, которые не могут быть скомпилированы, пока не будет скомпилирован этот. Медленный файл с большим количеством зависимых задерживает остальную часть сборки, а его изменение приводит к повторной компиляции всех них.
  • Зависимостям во время компиляции — количеству файлов, которых ожидает этот файл.

Обзор сборки Mix приложения Phoenix

Вкладка Временная шкала показывает ту же сборку во времени: какие файлы компилировались параллельно, где сборка выполняла проверку типов и запись на диск, и какова была нагрузка на машину в каждый момент. Участок с одной полосой означает период, когда сборка не могла использовать имеющиеся ядра.

Временная шкала полной сборки Mix приложения Phoenix

На вкладках Предупреждения и Ошибки перечислены диагностики сборки.

Пользовательские метаданные#

Прикрепляйте теги и данные в формате ключ-значение к сборкам Mix, чтобы различать запуски разных команд, оборудования или рабочих процессов. Оба вида данных отображаются на странице деталей каждой сборки.

Установите метаданные через переменные окружения:

bash
export TUIST_TAGS="nightly,release"
export TUIST_VALUES="ticket=TUIST-123,runner=linux-arm64"

Вы также можете настроить метаданные в mix.exs:

elixir
tuist: [
project: "account/project",
tags: ["nightly", "release"],
values: %{"ticket" => "TUIST-123", "runner" => "linux-arm64"}
]

Теги из обоих источников объединяются. Если один и тот же ключ настроен в обоих местах, приоритет имеет значение из переменной окружения.

Теги могут содержать только буквы, цифры, дефисы и подчеркивания. Сборка может иметь до 50 тегов, каждый тег — до 50 символов. Сборка может иметь до 20 записей в формате ключ-значение, каждый ключ — до 50 символов, каждое значение — до 500 символов. Это те же серверные ограничения, что и для метаданных сборок Xcode. Пакет пропускает недопустимые теги и слишком большие или пустые записи метаданных перед отправкой отчета, поэтому неверная конфигурация не помешает сохранению остальной части отчета аналитики сборки. Используйте метаданные в формате ключ-значение для данных, не соответствующих ограничениям для тегов.

Пользовательские метаданные прикрепляются к сборкам, а не к запускам тестов.

Пользовательские метаданные видны участникам проекта в панели управления. Не используйте их для учетных данных, токенов доступа или других конфиденциальных данных. Tuist хранит данные сборок Mix, включая эти метаданные, в течение 90 дней. Подробнее см. в политике хранения данных.

Устранение неполадок#

Отправка отчетов никогда не влияет на результат вашей сборки: если отчет не удается отправить, сборка завершается как обычно, и ничего не выводится. Чтобы узнать, почему отчет не был отправлен, установите TUIST_DEBUG=1:

bash
TUIST_DEBUG=1 mix compile --force