java.lang.RuntimeException: wXb6Vnl31u :: Ошибка для HTML= 001 003 004
005 006Платформа MyBPM состоит из двух разрабатываемых компонентов:
013 014Каждый из этих компонентов имеет свой репозиторий в 021 корпоративном хранилище. Ведение веток разработки у обоих этих 022 компонентов одинаковое. Имеется следующий набор веток:
023 024dev
- главная ветка разработки.dev-freeze
- ветка фиксации текущего
028 разработанного функционала - этап-альфа тестирования.stage
- стабильная тестовая версия - этап
031 бета-тестирования.release
- ветка стабильных релизов.Вся разработка ведётся на ветке dev
. Тут внедряются
039 все новые функции, тестируются и исправляются ошибки. Мелкие
040 функции вводятся напрямую, а функции по больше разрабатываются в
041 отдельных ветках, ответвлённых от dev
. После
042 разработки и локального тестирования, ветки сливается в
043 dev
.
Например: разработчику по имени "Marat" получили сделать новую
046 функцию, которую кратко можно назвать "zoo-to-settings". Он создаёт
047 копию ветки dev
и называет её:
050 dev-marat-zoo-to-settings
051
052
053
054
055
056 Далее он разрабатывает эту функцию в этой ветке. В процессе
057 разработки он должен сливать изменения сделанные другими
058 разработчиками из ветки dev
в свою ветку
059 dev-marat-zoo-to-settings
.
После того как он разработал и протестировал новый функционал в
062 этой ветке он сливает данную ветку в ветку dev
. Если у
063 него нет доступа на push в ветку dev
, то он делает
064 запрос на слияние merge-request
. Обращается к старшему
065 разработчику с целью проверки разработки, и, если всё нормально,
066 старший разработчик применяет merge-request
и новая
067 функция попадает в ветку dev
. Если у старшего
068 разработчика есть замечания, то нужно эти замечания исправить и
069 подойти снова за слиянием в общую ветку dev
. После
070 слияния в dev
ветку
071 dev-marat-zoo-to-settings
необходимо удалить как
072 локально, так и в репозитории.
После того как в ветку dev
слили весь новый
077 функционал текущего этапа разработки, ветка dev
078 фиксируется тем, что она сливается в ветку dev-freeze
.
079 Процесс фиксации может затянуться из-за обилия ошибок, и в этот
080 момент могут быть завершены новые функции, назначены на следующий
081 этап, поэтому нужна новая ветка фиксации разработки. После того как
082 функционал на ветке dev-freeze
проверен и, в случае
083 необходимости, исправлен, то ветка dev-freeze
084 сливается в ветку stage
. На этой ветке платформа
085 начинает распространяться на тестовые среды клиентов. И, если на
086 этом этапе выявляются ошибки, то они исправляются прямо в ветке
087 stage
- подобные действия называются hot-fix-ами.
Когда ветка stage
окончательно стабилизирована и
090 проверена на всех тестовых средах, то её сливают в ветку
091 release
.
Версии системы состоят из четырёх чисел (на ветке
096 dev-freeze
- пять чисел), разделённых точкой,
097 например:
100 4.11.3.117
101
102
103
104
105
106 Первое число (4) обозначает главную версию самой платформы. 107 Главная версия платформы увеличивается не чаще одного раза в 108 год.
109 110Второе число (11) обозначает либо релиз системы, либо состояние
111 тестирования. Если это число НЕЧЁТНОЕ, то данное число обозначает
112 этап тестирования или разработки (stage
,
113 dev-freeze
, dev
). Если это число ЧЁТНОЕ,
114 до это - РЕЛИЗ.
Третье число (3) обозначает уровень тестирования. Если оно
117 НЕЧЁТНОЕ, то это альфа-тестирование или разработки (ветка
118 dev
или dev-freeze
). Если ЧЁТНОЕ, то это
119 бета-тестирование (ветка stage
).
Четвёртое число (117) это номер текущего коммита. После каждого 122 коммита, это число увеличивается на 1.
123 124На ветке dev-freeze
имеется ПЯТЬ уровней ведения
125 версий. Первые четыре - это копия той версии с ветки
126 dev
которая замораживается. А последняя - это счёт
127 фиксов в ветке для заморозки.
Первые числа нужно менять вручную. А последнее число 130 увеличивается на 1 автоматически системой CI/CD, а уменьшается 131 всегда до нуля в ручную.
132 133Пример состояния версий на ветках:
134 135dev
была замороженаВо время разработки, изменения сбрасываются в ветку
147 dev
и последнее число автоматически увеличивается на
148 единицу системой CI/CD.
dev
Ветка dev
является основной веткой разработки,
153 поэтому любые изменения в ней не должны приводить к дальнейшим
154 слияниям. После появления коммита на ветке dev
155 автоматически запускается система CI/CD, и если нет ни каких ошибок
156 в модульных тестах, и проходит нормально сборка, то последнее число
157 версии (четвёртое) увеличивается на единицу.
dev-freeze
Если исправляется ошибка на ветке dev-freeze
, то
163 она вносится на эту ветку коммитом, и пятое число увеличивается
164 автоматически системой CI/CD на единицу.
После внесения коммита на ветку dev-freeze
167 разработчик ОБЯЗАН слить изменения по схеме:
170 dev-freeze -> dev
171
172
173
174
175
176 ВНИМАНИЕ: При таком слиянии на ветках ВЕРСИИ 177 МЕНЯТЬ НЕЛЬЗЯ - нужно оставлять такими, какие они были.
178 179Например: если версии веток были следующие:
180 181
182 dev=4.11.7.118
183 dev-freeze=4.11.5.121.3
184
185
186
187
188
189 То сразу же после слияния dev-freeze -> dev
они
190 должны остаться такими же
193 dev=4.11.7.118
194 dev-freeze=4.11.5.121.3
195
196
197
198
199
200 После чего на ветке dev
запуститься CI/CD и через
201 некоторое время версия на dev
увеличиться на единицу
202 так:
205 dev=4.11.7.119
206 dev-freeze=4.11.5.121.3
207
208
209
210
211
212 stage
Если исправляется ошибка на ветке stage
(это
216 называется хот-фикс), то четвёрная цифра версии на ветке
217 stage
автоматически увеличивается на единицу. После
218 этого разработчик ОБЯЗАН слить изменения по схеме:
221 stage -> dev-freeze
222 dev-freeze -> dev
223
224
225
226
227
228 При этих слияниях версии на ветках НУЖНО оставить 229 неизменными.
230 231После этих слияний запуститься CI/CD на обеих ветках, и
232 последние числа версий на ветках dev
и
233 dev-freeze
увеличиться на единицу.
release
Если исправляется ошибка на ветке release
(это
239 называется супер-хот-фикс), то четвёрная цифра версии на ветке
240 release
автоматически увеличивается на единицу. После
241 этого разработчик ОБЯЗАН слить изменения по схеме:
244 release -> stage
245 stage -> dev-freeze
246 dev-freeze -> dev
247
248
249
250
251
252 При этих слияниях версии на ветках НУЖНО оставить 253 неизменными.
254 255После этого запуститься CI/CD. По окончанию работы CI/CD
256 последнее число версий на ветках dev
,
257 dev-freeze
и stage
увеличатся на
258 единицу.
Изменения в ветке dev
должны быть проверены и
263 протестированы. При этом не должен остановиться процесс разработки
264 новых функций на платформе. Для этого предусмотрен следующий
265 механизм ведения версий:
dev
Когда в ветке dev
весь необходимый на данном этапе
270 функционал реализован, то нужно его заморозить. Для этого
271 необходимо все изменения в ветке dev
слить в ветку
272 dev-freeze
вместе с самой версией.
Например, имеется состояние версий:
275 276Поступила команда от руководителя проекта на заморозку ветки
287 dev
, то изменения сливаем из dev
в
288 dev-freeze
и в ручную устанавливаем следующие
289 версии:
Т.е. на ветку dev-freeze
ПРОСТО копируем версию с
303 ветки dev
и добавляем ПЯТОЕ число равное нулю.
Дальне система CI/CD отрабатывает и увеличивает пятое число до 306 единицы, как показано ниже:
307 308Дальше на dev-freeze-е могут быть найдены ошибки и исправлены 319 прямо на этой ветке. Их может быть несколько. После нескольких 320 исправлений может возникнуть следующая картина:
321 322Т.е. было как минимум 18 коммитов в ветку
333 dev-freeze
о чём свидетельствует пятая цифра в
334 версии.
Так же заметьте, что у ветки dev
, тоже увеличилась
337 четвёртая цифра, так как в неё влили все изменения из ветки
338 dev-freeze
, да и ещё в ней могли появиться новые
339 функции, предназначенные для следующего релиза.
stage
После того как ветка dev-freeze
стабилизирована,
345 поступает команда от руководителя проекта залить её в ветку
346 stage
. Исполнив эту команду, должны быть следующие
347 изменения в версиях:
Было:
350 351Стало:
362 363Здесь показано, что в ветке stage
увеличилась
374 третье число на два (с 6 до 8 - должны быть ЧЁТНЫМИ), а четвёртое
375 занулили.
Так же изменили версию в ветке dev
- тоже увеличили
378 третье число на два (с 7 до 9 - должны быть НЕЧЁТНЫМИ)
После этих коммитов запуститься CI/CD на ветках dev
381 и stage
и последние версии увеличатся на единицу:
А после нескольких исправлений может быть следующая картина:
394 395Ветка dev-freeze
уже не трогается и она не
406 меняется, а хот-фиксы изменяют последнее число в версии ветки
407 stage
. При последующем сливании этих хот-фиксов в
408 ветку dev
последнее число на этой ветке тоже
409 увеличивается на единицу. Если кто-то сольёт изменения в ветку
410 dev-freeze
, то на ней тоже последнее число увеличиться
411 на единицу - это делать не обязательно, но не возбраняется.
release
После того как ветка stage
стабилизирована и
417 хорошенько оттестирована, то от руководителя проекта поступает
418 команда на переход изменений в ветке stage
в ветку
419 release
. Должно быть сделано следующее:
Было:
422 423Стало:
434 435Т.е. вышел новый релиз - 4.12.0.0!!!
446 447Тут увеличилось второе число на ветке release
на
448 два (с 10 до 12 - должно быть ЧЁТНЫМ) - остальные были сброшены до
449 0.
На ветках dev
и stage
второе число
452 было установлено на единицу БОЛЬШЕ релиза (13 - НЕЧЁТНОЕ).
Третье число на ветке dev
стало единицей
455 (нечётным), а на ветке stage
стало двойкой
456 (чётное).
Четвёрное число на ветках dev
и stage
459 обнулили.
На ветке dev-freeze
ни каких изменений НЕТ - там
462 лишь указывается какая ветка была когда-то заморожено. Так будет до
463 тех пор, пока опять не заморозят ветку dev
.
После этих изменений на всех ветках запуститься CI/CD, и когда 466 он везде отработает, то будут такие изменения в версиях:
467 468Инварианты - это условия, которые не должны соблюдаться при 481 каждой операции push.
482 483Версия на ветке представляет собой набор чисел разделённых 486 точкой. Первое число - это первый уровень, второе - второй, и так 487 далее.
488 489Чётное число - это более стабильная версия чем нечётное число на 494 своём уровне ведения версий. Исключение первый уровень и 495 последний.
496Нестабильные ветки всегда больше по версии чем стабильные - так 500 как они впереди разработки.
501dev
, stage
,
508 release
- четыре уровня версии.dev-freeze
- пять уровней версии.release
второй уровень всегда
513 чётный.release
второй уровень всегда на 1
518 меньше, чем на остальных (исключение dev-freeze
).release
третий уровень всегда равен
521 нулю.stage
всегда третий уровень чётный.dev
всегда третий уровень нечётный.dev
всегда третий уровень на 1 больше,
528 чем на ветке stage
.dev-freeze
всегда пять уровней. Первые
531 четыре - это точная копия некого старого dev
-а.