Казалось бы, майская история с Docker hub должна была научить всех нас уделять больше времени на обеспечение целостности артефактов проекта, но на то мы и люди, чтобы учиться на своих (и чужих) ошибках не с первого раза. В этой статье я поведаю про настоящую историю, которая в этот раз не связана с образами, но связана с библиотеками.

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

В какой-то момент от коллег поступает информация о том, что официальная библиотека elasticsearch-php в момент сборки через composer install перестала устанавливаться.

Состояние Github репозитория elasticsearch-php
Состояние Github репозитория elasticsearch-php

Ринувшись разбираться в вопросе, выясняем, что Github репозиторий удален и теперь там красивая ошибка 404.

Как же так? Что произошло? Вот так просто удалить без какого-либо анонса? Что-то здесь неладное...

Работать нужно, но работать не дают, начинаем гуглить и искать интересующую нас информацию по сообщениям в чатах Telegram. Находим ссылку в дискуссиях на официальном ресурсе компании, где представитель команды сообщил, что часть публичных репозиториев временно недоступны, там же прикреплена ссылка на страницу с логами по инциденту.

Фрагмент логов, проясняющих ситуацию:

As part of an internal change task, some of our public git repositories hosted under Elastic's GitHub organisation were marked as private. As a result, when attempting to access these repositories an error may be seen. Our teams are working to restore these with urgency.

Перевод: В рамках внутренней задачи по изменению некоторые из наших публичных репозиториев git, размещенных в организации Elastic GitHub, были помечены как приватные. В результате при попытке доступа к этим репозиториям может возникнуть ошибка. Наши команды работают над их срочным восстановлением.

Первое о чем я подумал, вспоминая свой предыдущий опыт смены видимости репозитория с Public на Private: "кажется, сейчас elastic потерял заработанные годами звёзды" (механизм смены видимости репозитория в Github работает по методу удаления и создания заново со сбросом числовых значений в шапке).

Релиз на носу, а с поиском что-то нужно делать, любой ценой катим фичи.. Учитывая, что поиск на проекте это не основной функционал, а вспомогательный, принимается решение удалить зависимость с бэкенда и визуально скрыть форму поиска для пользователей - composer remove в помощь. Управились быстро, релиз спасён, основные фичи поехали в продакшн без задержек по времени.

Уже вечером, после работы, с чашечкой чая, мне стало интересно, а что еще из популярного у Elastic было затронуто, начинаю изучать их репозитории. Подведя итоги, сравнив количество звёзд в Яндекс кэше, получаю следующий результат (актуально на момент написания статьи 30.10.24):

Репозиторий

Звёзды до сбоя (кэш Яндекс)

Звёзды после сбоя

elasticsearch

70k

266

logstash

14.2k

39

elasticsearch-php

5.3k

13

elasticsearch-js

5.2k

18

cloud-on-k8s

2.6k

40

elasticsearch-net

3.6k

6

elasticsearch-ruby

2k

3

elasticsearch-java

415

5

elasticsearch-py

4.2k

17

elasticsearch-hadoop

1.9k

8

Пример на репозитории elasticsearch: факт и кэш Яндекс

Как выглядит репозиторий elasticsearch сейчас (30.10.2024)
Как выглядит репозиторий elasticsearch сейчас (30.10.2024)
Как выглядит репозиторий elasticsearch в кэше Яндекса (кэш от 28.10.2024)
Как выглядит репозиторий elasticsearch в кэше Яндекса (кэш от 28.10.2024)

Вам очень повезло, если процесс сборки на вашем проекте настроен по всем канонам безопасности, вы - молодцы! Возможно, вы просто не заметили данное событие, но это тоже хорошо.

На момент написания данного текста все известные мне (официальные) репозитории Elastic были восстановлены.

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

Это моя первая статья на данной площадке, в будущем постараюсь снабжать вас интересным контентом и новостями из мира IT.

Спасибо за внимание, Хабр!

Комментарии (12)


  1. yurrig
    30.10.2024 23:58

    Не лучше ли форкать все зависимости, чтоб не зависеть от такого рода случайностей?


    1. Pest85
      30.10.2024 23:58

      Лучше настроить Nexus Proxy.
      Даже если оригинальная репа недоступна - на нексусе будет закачан артифакт, в крайнем случае не последней версии.


      1. yurrig
        30.10.2024 23:58

        Я предпочитаю не последнюю, а проверенную и оттестированную с моим продуктом версию. Возможно, подправленную. Поэтому всегда форкаю, завожу свою ветку для возможных правок, и форк апдейчу (если есть в этом потребность) в начале релизного цикла, чтобы до конца цикла неожиданностей не иметь.


        1. kain64b
          30.10.2024 23:58

          Nexus/artifactory просто кешируют версии . Вы запрашиваете версию у нексуса, он скачивает себе, и отдает вам. Гибзаб может тоже упасть или мавен централ, да и вообще не безопасно на машине где сборка идёт ,открывать доступ к интернету, а не только к локальным ресурсам компании. Там же можете и удалять не используемые у себя вообщем хорошая штука , попробуйте.


          1. yurrig
            30.10.2024 23:58

            Локальное кэширование - отличная идея, особенно для веб- или скриптовой разработки, или когда дерево зависимостей большое. У меня немного другая ситуация - зависимостей не очень много (первые десятки), и они все C++-ные, поэтому они все локально построены и в NuGet-овские пакеты завернуты, так что дополнительное кэширование не требуется. Нередко приходится в них что-то подправлять, так что без форка трудно обойтись. Но да, это несколько другая история, прямого отношения к статье не имеющая.


  1. jingvar
    30.10.2024 23:58

    Продакшен, релиз без фиксации версии, сборка прям с внешних гитов - серьезно?


    1. redfox0
      30.10.2024 23:58

      Фиксация версии может быть была.


    1. flancer
      30.10.2024 23:58

      А что тут такого? Не все в космической отрасли работают, у некоторых клиентами магазинчики и фитнес-клубы являются. Но у них тоже и продакшн, и релизы присутствуют. Собралось успешно - переключился, нет - ищи проблему. Обычно успешно собирается, инфраструктура айтишная довольно надёжная.

      Но так-то зависимости должны были остаться в кэше у какого-нибудь девелопера, их можно было достать, оформить локальный репозиторий в проекте (composer.json):

      {
        "repositories": {
          "local": {
            "type": "artifact",
            "url": "../repo/"
          }
        }
      }

      и выложить в ../repo/ нужные зависимости в виде zip-файлов:

      и можно выкатываться.

      Да прямо из развёрнутого дев-проекта можно делать - закатать в zip любой фолдер из ./vendor/{name}/, главное, чтобы composer.json внутри был с нужным названием и всем остальным.


      1. play_to
        30.10.2024 23:58

        а как версию пакета указать, которую подсовываешь? У меня не вышло, но я не оч много времени старался))


  1. CitizenOfDreams
    30.10.2024 23:58

    Скоро без внешних зависимостей нельзя будет даже написать Hello World или помигать светодиодом. Или уже?


    1. Politura
      30.10.2024 23:58

      Elasticsearch это, по сути, база данных, вполне логично для доступа к базе данных использовать клиентскую библиотеку предоставленную ее разработчиками.


  1. punhin
    30.10.2024 23:58