Pull to refresh

Comments 29

Что-то не так.
Зачем каждый раз после команды cd выполнять команду pwd? она же вернет тоже что было написано в cd, особенно учитывая, что тут всегда показан абсолютный путь
Безусловно. На самом деле так же, как и сам cd в общем-то избыточен в каждом коротеньком сценарии.
pwd оставлен «для страховки» если процессом придётсяз аниматься неопытному пользователю. Так сказать «2 раза проверь, 1 раз запулль».
Тогда вообще непонятна причина отсутствия готовых скриптов, принимающих параметры, на выполнение одних и тех же операций.
1) Постепенная модификация процесса.
если вы посмотрите под кат «Порождение ада», то увидите, что ещё совсем недавно процесс выглядел очень отлично от того, что описывается в статье. Возможно в будущем появятся дополнительные изменения (хотя пока особого смысла нет)
2) Потребность в гибкости. Иногда нужны незначительные отклонения от стандартных команд: закоммитить только некоторые файлы/папки, запушить не в ветку с номером тикета, а ветку «TIKET ##### Patch $$» и т.п.
3) к сожалению скрипты мы бы написали для себя, жёстко зашив настройки, и поделиться ими уже не смогли бы ни при каких обстоятельствах (мне и так пришлось немало побороться за эту публикацию). Да и пользы от них было бы мало кому.

Цель данной публикации — набор готовых практических сценариев с максимально простой структурой, каждый шаг которых начинающий пользователь GIT мог бы отладить и осмыслить.
Лично мне этого очень не хватало, когда мы начинали внедрять систему контроля версий.
Это сильно не то же самое, что использовать связку GIT-клиента VisualStudio или GIT GUI и GitHub/Bitbicket в соло-разработке.
Странно, но когда читаю про очередные поделки в РНР мире, кажется что люди застряли в нулевых.
Почитайте лучше про Symfony или Laravel, Битрикс — мягко говоря, не самое удачное, что есть в мире PHP.
Я это прекрасно понимаю, но хотел глянуть что за пафосная муть скрывается под катом.
ИМХО php 7 (уже RC3) на подходе, так что почти все существующие решения устаревают не по дням, а по минутам.
пафосная муть

Вот это уже обидно, если честно.
Стараешься поделиться с людьми опытом, а в ответ подобное отношение.
Вы же согласитесь, что далеко не все выбирают технологию? И кто-то вынужден работать с php 5.3, а не 7. А кто-то с 1С-Битрикс, а не Symfony/Laravel. Причём я сейчас не о себе, мне-то в общем всё равно.

P.S. если вдруг возникло ощущение, что пост рекламный, увы мне и ах. Не ставил целью и собственно интереса такового не имею (не продаю и не внедряю, сотрудником компании не являюсь).
Очень жаль вас, что приходится работать с этими неповоротливыми технологиями. Но кто-то же должен это всё разгребать.
Недавно мне в работу попал допил проекта на 1С-Битрикс (редизайн и небольшое изменение структуры). Честно сказать — грустно всё. Сразу захотелось всё переписать заново, например на YII. Разгребать эту кучу граблей было куда менее интересно. Деплой через FTP и 8 гигабайт кэша, который на самом деле не нужен (сайт занимает около 16 гигабайт места).
Вообщем, я конечно понимаю, что решения на 1с-битрикс продаются и весьма неплохо. Но не хотелось бы, чтобы не петрящие в технологиях менеджеры одерживали верх. Им важно продать. А реализация — дело десятое…
8гб кеша это ещё немного. Я работал в интернет-магазине размером меньше 500Мб, который генерил больше 5Гб кеша ещё в 2010 (за счёт большого количества фильтров).
Тот проект, о котором речь в статье генеровал совершенно сумасшебшее количество кеша, пока мы не перешли на мемкеш.
Вообще файловый кеш — это конечно не очень хорошо.

P.S. не знаю как принималось решение о покупке в данном случае, но уверен, что если бы пришлось писать свой велосипед, то проблема деплоя была бы точно такая же. Параноидальный режим безопасности + потребность в срочных правках представителями Заказчика контента прямо на бою + удалённый Разработчик.
Хотя желание снести всё ударом тактического ядерного заряда не оставляет меня уже более 2 лет…
Почти все существующие решения будут тянуть совместимость с, минимум, 5.3 ещё очень долго. Многие решения даже на php 5.5 сыпят depricated предупреждениями, но пока у бизнеса нет понятных ему причин переводить то, что приносит деньги сейчас на новую платформу, с трудно оцениваемыми им рисками, ресурсы на борьбу с ними выделяться не будут.
> Почти все существующие комерческие решения
ftfy
позволяет наблюдать в GitLab вот такие замечательные картины:
image

я бы не пустил вас в prod с такими коммитами.
Надеюсь на ваше снисхождение в связи с тем, что именно мне и пришлось всё это безобразие поднимать. Никого умнее не нашлось.
ИМХО такие коммиты лучше, чем отсутствие контроля версий за состоянием боевого сервера, хаотично изменяющегося под воздействием внешних сил (редакторов контента в том числе).
Я правильно понимаю, что большинство сложностей из-за того, что:

а) правки кода на боевом сервере, минуя репозиторий, норма рабочего процесса (то ли из-за битрикса, то ли «так исторически сложилось»)

б) отсутствие нормального доступа к серверам (хотя через веб-морду можно делать практически всё, включая правки кода из пункта а)

в) у разработчиков не должно быть даже ro доступа к центральному репозиторию или его клону

Просто совсем недавно тоже переводил legacy проект под git с gitlab и почти автоматический деплой коммитов, но обошлось куда меньшей кровью и почти без угроз «руки оторву» административного вмешательства.

а) правки кода на боевом сервере, минуя репозиторий, норма рабочего процесса (то ли из-за битрикса, то ли «так исторически сложилось»)

Увы, да.
Все проекты, где я работаю постарался перевести на данную схему. Изредка разработчик вносит правку на бою, не закоммитив. Это отклонение от нормы уже.

б) отсутствие нормального доступа к серверам (хотя через веб-морду можно делать практически всё, включая правки кода из пункта а)

о да!

в) у разработчиков не должно быть даже ro доступа к центральному репозиторию или его клону

И вновь да.

Был бы рад познакомиться с вашим опытом.
К сожалению, в таких ситуациях очень заметны проблемы, но не так просто их решать, поскольку всё переплетается в один адский клубок.
Ну у нас ситуация попроще была. Хоть как-то процесс был выстроен, SVN использовался (пускай без веток и хотя по результатам ревизии на боевом сервере нашлось не менее сотни незначительных отклонений от репозитория). После вливания всех изменений в свн репозиторий и импорта его в git, было объявлено, что с этих пор никаких ручных правок или деплоя с дев-машин путем копирования изменений, лишь потому что деплой будет осуществляться через rsync без подтверждений перезаписи и с удалением файлов в десте, которых нет в сорсе и игнорлисте. Потом написаны скрипты для деплоя на тестовый сервер (использовался и как приемочный, и как обучающий для новых сотрудников или при введении глобальных фич) произвольной ветки любым разработчиком, а на боевой только главной, с правом мержить в главную и деплоить на боевой строго ограниченным кругом лиц (де-факто мною, плюс в теории могут главный админ и директор ИТ-департамента). Чуть позже разделили функции обучающего и приемочного серверов, обучающий теперь деплоится время от времени с главной ветки (по сути синхронится с боевым), а приемочный (у нас препрод называется, аналог вашего прелайва), а приемочный с любой. В ближайших планах то ли создать каждому разработчику отдельный виртуальный хост на препроде, то ли использовать что-то типа докера для поднятия виртуальных хостов под каждую фичу/баг/ветку, чтобы мог «полуофициально» давать заказчику конкретной фичи возможность предварительного тестирования, чтобы в идеале было минимум замечаний с препрода, чтобы он отличался от боевого лишь на один коммит и деплоился со специально отведенной ветки, в которую разработчики будут мержить изменения с тикет-веток и откатывать свой мерж, если возвращено на доработку.

Из технических проблем, общего решения которых не найдено пока, сейчас по сути только необходимость ручного управления миграциями при переключении препрода с одной ветки на другую, если в них есть изменения схемы и(или) справочников БД. Используемый инструментарий миграций совсем к работе с ветками не приспособлен, учитывает их, грубо говоря, по номерам, присваиваемым каждый раз заново на момент на момент запуска миграции по, грубо говоря, дате создания. То есть, если в одной ветке сейчас создать миграцию, во второй через 5 минут, запустить вторую миграцию, потом переключиться на первую ветку, то система будет уверена, что все миграции применены, потому что у первой тот же номер, что у второй, пока они не слиты вместе, а когда сольются, то система будет уверена, что применена первая, а вторую только нужно применить, хотя дело обстоит ровно наоборот. И такая дребедень даже если миграции никак не пересекаются.

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

Да это же сюр какой-то. Люди в 2015 году открывают для себя систему контроля версий, деплой осуществляется с комментриями «Забекапьте пожалуйста init.php, а то мало ли...», при неудачном коммите практикуется «для восстановления порядка проще зачастую удалить весь репо на GitLab и создать заново».

P.S. Автор, у вас и ваших разработчиков руки растут из жопы. Я уж было хотел написать про development workflow, continuous integration, zero downtime deployment и т.д., но посмотрел на ваш год рождения и понял, что это уже не исправить.
Мир битрикс разработки — это вообще сюр полнейший, как и весь 1С. И вполне достоверно замечено, что средний возраст битрикс программистов заметно выше чем в мире PHP. У них даже проблемы какие-то свои, ламповые (http://habrahabr.ru/company/1c/blog/267321/#comment_8582213):
«Ну вот когда появятся нормальные гайды по доступному функционалу, СКД и УФ?! Книги авторства Радченко в топку! Когда будут объёмные конференция масштаба InfostartEvent? Когда разработчики пишущие на 1C получат нормальный подстрочник не только на русском? Когда можно будет обратиться к документации, а не искать примеры в типовых коробках? Когда?..»
Ладно вам набрасывать Битрикс на вентилятор. руки, мозги, Битрикс, PHP и 1С никак не связаны и одно другому не мешает/не помогает.
Я уж было хотел написать про development workflow, continuous integration, zero downtime deployment и т.д.

А почему бы и нет?! Я думаю всем будет интересно узнать, на сколько их знания соответствуют современным веяниям. Ждем от Вас статью!
А вас что, гугл забанил? В инете куча статей на эти темы. Ключевые слова я написал.
В инете куча статей на эти темы.

Так всегда ведь удобнее читать, когда все собрано в одном месте. Плюс, наверняка ведь есть какие-то нюансы, узнанные из собственного опыта. Какие-то подводные камни, новые красивые решения. Делиться знаниями — это ведь замечательно!
Последние версии Битрикс можно достаточно просто заворачивать в систему контроля версий, если бы не одно глобальное «но», база данных, эта проблема либо решается большими костылями, либо кучей оверхеда на написание скриптов обновления базы. Ну и еще один увлекательный квест который называется обнови ядро на на трех серверах. Да и по лиц. соглашению нельзя иметь три копии продукта.
PS: Алексей спасибо за статью.
Миграции на Битрикс не пишутся?
Вопрос 3 сервером решается через партнёрский отдел.
Нам необходимо обновлять 4:
  • Prod
  • Prelive
  • Test
  • Dev (1 из всех поднятых песочниц)

Тут главное обновление запускать с не большим интервалом, чтобы 1С-Битрикс не успели выпустить минорное обновление (ибо выбрать версию до которой обновляемся они нам до сих пор не дали).
Поскольку у нас более дюжины правок ядра кочуют из версии в версию, то GIT очень здорово помогает оперативно отследить какую правку забыли накатить.

а вот с БД беда…
Мне кажется, у вас описан слишком частный случай. Из заголовка ожидаешь какую-нибудь инструкцию по настройке .gitignore для битрикса. Надо было назвать «Работа в git при неадекватном заказчике» или что-то типа того.
Примеры .gitignore есть в части про инициацию репозитория. Там примеры для ядра, /local/ и публички (для субмодуля по понятным причинам отдельный .gitignore не нужен был).
В защиту Заказчика хочется сказать, что не все решается волевым решением «перейдём на новый стек технологий Х» — у больших компаний с сотнями тысяч человек персонала есть определённые политики безопасности для внутренних IT решений в которые очень сложно уложить внешний веб проект с внешним же подрядчиком (всё было бы гораздо проще, если бы Разработчик был в штате, ведь тогда была бы машина во внутренней сети и возможно даже SSH/FTP)
Так же хочется напомнить, что есть сегмент малых (начинающих) интернет-проектов. Такие сайты могут жить на виртуальном хостинге, зачастую без SSH, но с возможностью установки GIT (через техподдержку). Владельцы таких сайтов тоже могут пользоваться преимуществами системы контроля версий, хотя до полноценных процессов (вроде git workflow) ещё не скоро дорастут. Им пригодятся такие простые сценарии, я считаю. Мне бы пригодились, когда я начинал. Потому и написал статью.

Но спасибо за ваше мнение! Это действительно очень частный случай. И он от этого лишь выигрывает, мне кажется.
Sign up to leave a comment.

Articles