За последние 24 часа нас посетил 21641 программист и 1017 роботов. Сейчас ищут 694 программиста ...

Как добавить версионность при коммитах?

Тема в разделе "Версионность, тестирование и развёртывание", создана пользователем Сереганек, 6 фев 2019.

  1. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Я не знаю можно ли так делать вообще, если нельзя подскажите как это делается в принципе.

    Когда я редактирую стили, скрипты, изображения, я хочу при коммитах как-то обозначать эти файлы, чтобы у конечного пользователя они загрузились заново, а не использовались старые закешированные. Я знаю, что для таких задач можно использовать один прием, когда к url всех измененных файлов добавляется новый параметр с номером версии. Например:

    domain.com/Img.jpg?ver=123

    Я могу в коде прописать вручную добавление переменной. Но как ее генерировать? В какой момент? Вручную прописывать версии не очень хочется. Как это вообще делаете вы?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Ну для фронтендеров есть плагины, добавляющие "хеш" в само имя нового файла при сборке через webpack, а в шаблон blade можно подставить что-то вроде {{ mix('myscript.js') }} чтобы получить рабочую ссылку.

    Если в общем виде, в бекенде у тебя вероятно PHP ))) и есть какие-то шаблоны, в которых прописаны ссылки на ресурсы. То есть задача сводится к тому, чтобы в заготовку типа
    src="scripts/xxx.js?v=<?= $VERSION ?>"
    подставить годное значение $VERSION. Годным будет либо таймштамп момента сборки, либо хеш коммита из git

    Вот тебе варианты для пакетного файла (bash):
    Код (Text):
    1.  
    2. echo "Change VERSION variable..."
    3. # VER=`git log --pretty=format:'%h' -n 1`
    4. VER=`date -u +%Y%m%d-%H%M%S`
    5. sed -i "/^VERSION=/s/=.*/=${VER}/" .env
    перезаписывается значение в файле .env. Как его использовать найди сам. Для многих фреймворков dotenv это фича "из коробки".
     
    Сереганек нравится это.
  3. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    А сам bash нужно запускать по крону или вручную? Или может его можно запускать при пулле автоматически?
    --- Добавлено ---
    Если я буду брать хэш каждый раз при посещении страницы через exec('''git...") - это сильно замедлит загрузку? Миллисекунды, десятки, сотни?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Запускать каждый раз когда обновляешь ассеты.
    Это часть скрипта деплоя. Кроме этого там может быть накатывание миграций на базу, очистка серверного кеша и т.п.
    --- Добавлено ---
    блин, да мне в голову такое не приходило! :D не надо этого. у тебя появляется новая версия явно не каждый раз при открытии страницы.
     
  5. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Не очень понял как это реализуется. Я юзаю Ларавель. Ну допустим я отдельно написал скрипт, который умеет менять параметры в .env, а куда его прикрутить нужно?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    если ты хочешь в ларавель, то делай как советуют в ларавель. в доках написано про версионность через mix, я упомянул, но жевать не буду. форум не заменяет документацию.
    --- Добавлено ---
    mix - это путь laravel. теперь ты знаешь что искать.
     
  7. MRSgiba

    MRSgiba Активный пользователь

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32