Обновление пакетов при CI/CD

Время от времени в проекте желательно обновлять пакеты через Composer и Yarn. Иногда это происходит без ошибок. К счастью, у нас в этот раз оказалось не так :)

Это хороший повод рассмотреть семантическое версионирование и произвести минорные и мажорные обновления зависимостей. Покажем, что делать, если появилось много ошибок. И найдём способ непрерывно обновлять зависимости при следовании философии CI/CD прямо в master так, чтобы это не ломало код, не стопорило разработку проекта и не порождало веток с устаревающим кодом.

  • 00:02:39 - Удаление символической ссылки
  • 00:03:54 - Удаление Docker Compose
  • 00:05:36 - Команда api-check
  • 00:07:00 - Просмотр списка новых пакетов
  • 00:08:24 - Семантическое версионирование
  • 00:14:51 - Пробный запуск
  • 00:16:06 - Способы работы с ошибками
  • 00:17:52 - Страх обновлений
  • 00:18:24 - Проблема подхода с feature-branches
  • 00:20:33 - Следование принципам CI и CD
  • 00:22:07 - Постепенный подход
  • 00:22:53 - Пакеты с зависимостями
  • 00:24:58 - Исправление ErrorHandler
  • 00:32:34 - Композиция или наследование
  • 00:34:36 - План обновления Psalm
  • 00:36:26 - Работа с группами компонентов
  • 00:38:02 - Обновление Psalm
  • 00:38:40 - Если ошибок много
  • 00:41:22 - Исправление типа
  • 00:45:24 - Обновление PHPUnit
  • 00:47:49 - Исправление аннотации covers
  • 00:55:20 - Пакеты UUID и линтера
  • 00:56:36 - Поиск помех обновлению
  • 00:59:40 - Общее обновление
  • 01:00:46 - Переход на Doctrine Migrations 3.0
  • 01:08:25 - Обновление фронтенда
  • 01:09:47 - Конфликт ESLint
  • 01:11:18 - Testing Library
  • 01:11:52 - Обновление Cucumber
Скрытый контент
Комментарии (14)
Arunas
2020-07-29 05:20

Спасибо, высший класс, (как всегда).

Ответить
Руслан
2020-07-29 09:06

Спасибо!

Ответить
fedot
2020-07-30 16:09

Спасибо, а будет ли про подключение внешних хранилищ типа Амазона и репликацию между распреденными базами данных?

Ответить
Arunas
2020-07-30 16:33

Да, хотелось бы :)

Ответить
Дмитрий Елисеев
2020-07-30 18:41

Хранилища будут для загрузки фотографий с эмуляцией для девелоперского окружения.

Ответить
fedot
2020-07-30 19:45

ну отлично, спасибо

Ответить
fedot
2020-08-02 08:36

Есть вопрос все же, к примеру поменял кто то одну строчку в стиле, как ее быстро доставить на прод, минуя всю цепочку?

Как делаются быстрые изменения и как получить доступ к файловой системе запущенного контейнера?

Ответить
Дмитрий Елисеев
2020-08-02 11:28

Как делаются быстрые изменения и как получить доступ к файловой системе запущенного контейнера?

Никак. Цепочка как раз и строится для того, чтобы ничто не поступило в прод без тестов в обход неё.

Иначе любое неосторожное ручное действие в проде вроде неверно поставленной запятой или незакрытой скобки в конфиге мгновенно сломает весь сайт. Ещё стоит учесть, что на проде используются минимизированные css и js файлы, а не исходные.

Работу с PHP в Docker воспринимайте теперь как работу с любым компилируемым языком. Там исходники есть только в репозитории и у вас, а для прода нужно скомпилировать всё в один файл и закинуть на сервер.

Ответить
fedot
2020-08-02 12:14

Иначе любое неосторожное ручное действие в проде вроде неверно поставленной запятой или незакрытой скобки в конфиге мгновенно сломает весь сайт.

Для этого в деве есть тесты, после их прогона, если изменение незначительно, таких проблем быть не должно. Кстати есть ли линтеры для Makefile? Там лишний пробел в лево в право, расстрел сразу. Еще раз хочу поблагодарить, за прекрасный курс, кучу проблем решить помогло, ты настоящий гений.

Ответить
Дмитрий Елисеев
2020-08-02 12:42

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

Тесты в деве не проверяют контейнеры прода.

А так если нужны эксперименты на сервере в полуреальном времени без тестов, то сделайте отдельную ветку вроде drafts с отдельным сервером и в pipeline для неё через branch != draft отключите все шаги кроме build и deploy-draft.

Но как предложил ниже, проще показать заказчику свой экран, чем давать ломать продакшен ради ведения разработки по-живому.

Ответить
Дмитрий Елисеев
2020-08-02 11:35

Есть вопрос все же, к примеру поменял кто то одну строчку в стиле, как ее быстро доставить на прод, минуя всю цепочку?

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

Если с ростом проекта возникает неудобство, что цепочка становится слишком медленная, то либо повышают мощность сборочного сервера, либо оптимизируют запуск, либо делят проект на части.

Например, с коммитом из прошлой успешной сборки по git diff $lastSuccessfulCommitHash api можно понять, изменились ли файлы в папке api. И если не изменились, то сделать пропуск шагов. Тогда при изменении стилей фронтенда не будут запускаться линтеры, анализаторы и тесты api.

Помимо этого при желании можно будет вынести фронтенд в отдельный репозиторий или разбить api на более мелкие микросервисы, живущие в отдельных репозиториях. Но это сложнее.

Ответить
fedot
2020-08-02 12:07

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

Это не всегда так, тут больше к моему вопросу в другой ветке, например заказчик смотри продукт и говорит все круто, но в этом поле не тот валидатор, я говорю, ок, жди пару минут, вношу изменения и запускаю процесс, его сессия отлетает со всеми пробами или вдруг оказывается, что кончилось место га диске или типа того, он говорит, ок, я улетаю, через месяц встретимся, а я сегодня планировал сдать.

Все же считаю, что должна быть возможность оперативного вмешательства, мы мельком коснулись DFS, а что если бы файлы проекта лежали на ней с доступом через SSH?

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

Понятно, что такой доступ всем не дается.

Ответить
Дмитрий Елисеев
2020-08-02 12:30

Если это нужно только для разработки, а не посетителям сайта, то незачем это делать в проде.

Тогда сразу после просмотра проще показать ему свой экран через Zoom или дать покликать через TeamViewer.

Ответить
fedot
2020-08-02 12:42

Кстати да, тоже вариант, спасибо.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий