Имя: Пароль:
1C
1С v8
Каскадные хранилища конфигурации
0 Darklight
 
06.07.12
10:28
Кто-нибудь использовал составные хранилища конфигураций?
То есть, например по такой схеме, когда, скажем есть некое рабочее (предварительное хранилище) - с которым и работают программисты, но рабочая база непосредственно с ним не связана. Так как есть вышестоящее - консолидирующее (чистовое) хранилищ, в которое помещается всё то, что направляется на установку в рабочую базу. Это хранилище связывается с тестовой базой(ами) данной конфигурации, в которых осуществляется общее тестирование решения пере его установкой в рабочую базу, могу вноситься небольшие правки, и, в конечном итоге, может даже не всё быть выгружено в рабочую базу. При этом рабочих хранилищ может быть несколько (раздельно - для отдельных групп разработчиков, например, территориально разделённых), а консолидирующее - одно. Так же, в каскаде может быть несколько промежуточных хранилищ. Ну это как пример.
Вопрос, в общем-то, о самом подходе, где есть каскадные хранилища. Кто-нибудь нечто подобное использовал на практике? И как организовывал взаимодействие между каскадными хранилищами? Например захват и актуализация объектов между хранилищами? Решение коллизий?
1 milan
 
06.07.12
10:35
В чем смысл каскадирования ?
Если рабочих хранилищь несколько, как актуализировать данные соседних групп разработки между собой ?
Централизованное хранилище и сделано для того чтобы не думать как решать коллизии, а чтобы они не возникали.
И самый главный вопрос как использовать то чего не предусмотрено механизмами платформы?
2 Лефмихалыч
 
06.07.12
10:35
Мы используем два хранилища. Одно хранилище обновления[release] (из него в скором времени файлы поставки стряпать будем для рабочей базы), второе хранилище разработки[trunk]. В первом только годный, православный и протестированный код, во втором, что угодно - хоть деление на ноль.

В trunk помещаем сколько угодно раз. Обязательно помещать в двух случаях - передача кода на тестирование, помещение в release.

Есть регламент, по которому захваты в обоих хранилищах обязаны совпадать за двумя исключениями:
1. новые объекты - они есть только в trunk
2. при удалении/переименовании реквизитов объектов (или самих объектов) иногда требуется захватить дополнительные роли, чтобы конфигуратор почистил ссылки. В этом случае дополнительные роли захватываются только в trunk, если помещение в release не планируется
3 milan
 
06.07.12
10:43
(2)как все это дело синхронизируется между собой, а если кто-то галочку забыл поставить ?
4 pumbaEO
 
06.07.12
10:46
Это называется ветки, бранчи, branch ... Переходи на 8.3 там можно использовать нормальные системы версионного контроля.
5 Лефмихалыч
 
06.07.12
10:46
(3) получит внушение. За систематическое нарушение возможна различной тяжести любятина в зависимости от злонамеренности и последствий. Но пока прецедентов не было. Ведущие специалисты и начальство на регулярной основе контролируют ситуацию в этом плане.
(4) ну, как можно... там зачатки возможностей
6 pumbaEO
 
06.07.12
10:54
(5) эээ, а чего там не хватает?
7 Лефмихалыч
 
06.07.12
10:59
(6) встроенной возможности ветвлений и слияний безо всяких там выгрузок/загрузок в другие SCMы
8 Sammo
 
06.07.12
11:02
(6) Посмотри, например, как делалось автоматическое накатывание своих изменений на типовую при смене релиза типовой в 7.7 + gcomp
9 pumbaEO
 
06.07.12
11:06
(7) т.е. основная претензия отсутствие "встроенной" ?
(8) пока вижу только одну проблему с переименованиями объектов конфигурации, другие dvcs с этим не разберутся.
10 Лефмихалыч
 
06.07.12
11:08
(9) да, но из этого вытекает херова туча сложностей:
1. Переименования объектов порождают геморрой
2. При создании ветки хранилища нужно дублировать учетные записи
3. Слияние ветвей - полностью рукопашный процесс, поверед бай копипаста. Просто потому, что, когда модуль изменен в начале и в конце, слить автоматически 1С его не может
4. еще может что есть - не задумывался.
11 pumbaEO
 
06.07.12
11:20
(10) по факту повторить весь функционал git/bzr/hg/svn/fossil , но все эти SCM под GPL выпускаются.
ИМХО: 1с проще выгрузку/загрузку сделать, чем писать нормальную систему контроля версий.
Думаю 3 пункт, как раз бы и стал проще с помощью выгрузки/загрузки конфигурации.
12 Darklight
 
06.07.12
12:02
Так, харе обсуждать возможности 8.3 и сторонних scm.
Да, очень жаль, что 1С не имеет продвинутых средств работы с хранилищами конфигураций и работы одновременно с несколькими хранилищами, синхронизации и слияния версий; создания и сохранения черновых версий разработок и т.п. Этого нет.

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

Особенно мне интересен практический вопрос синхронизации данных между хранилищами (вертикальными и горизонтальными) - как это эффективнее всего организовать?

Под коллизиями я понимал в первую очередь следующее: когда какой-либо объект захвачен в какой-либо ещё не законченной разработке, а он нужен для другой разработки (скажем, более срочной), которую может делать как этот, так и другой разработчик - как это наиболее эффективно разрулить при использовании каскадных хранилищ?
13 pumbaEO
 
06.07.12
12:17
(12) так тебе уже расписали все в (2) .
1. это хранилище release
2. trunk

Синхронизация : из trunk выгрузи cf и объединяй с release.
Под коллизиями : хватай поменьше, коммить почаще, готовься к разрастанию хранилища как на дрожжах . Если надо одного разраба подвинуть, что бы другой сделал, то первый сохраняет отдельно cf, освобождает объекты, второй усердно делает, коммитит, первый забирает изменения, захватывает объекты и пытаеться смержить с сохраненным cf.
14 Darklight
 
06.07.12
12:41
(13)Мне просто хотелось бы поподробнее из конкретных практик использования получить информацию. Особенно о регламентах захвата объектов и синхронизации версий каскадных хранилищ.
Когда оно одно - то тут боле мене всё ясно. А когда их несколько -  то тут свободы действий больше.
И очень интересно как работают удалённые группы программистов, работающие с одним проектом.
15 pumbaEO
 
06.07.12
12:59
(14) ну я как Лефмихалыч@ отделом не руковожу, но от удаленщиков доработки сводил в рабочую базу. У меня регламент таков:
1. Хранилище release - из него делается поставка, обновления и рассылается на узлы.
2. Хранилище test - cюда приходят все доработки, после тестирования и комманды фас, из test выгружаем cf и загружаем в release. Release - практически всегда захватывается полностью.
3. trunk - используется или bzr или хранилище конфигурации (по желанию). Тут основные коммиты, коммиты, баги, фичи. Если необходимо оттестить какую либо функциональность то тут сразу и тестится.
В test захватываем и освобождаем сразу, коммиты только явно не ломающие функциональность (здесь самая большая проблема по захвату, но решается как в (13) описывал).
Удаленщики сделали, закоммитили в bzr, отправили в центр, там забрали cf и накатили на test. (удаленщики перед этим забрали cf из test, смержились и только потом отпарвляют в центр).

Вот, так. Ручной работы все равно много, где возможно применяю пакетные выгрузки.
16 pumbaEO
 
06.07.12
13:05
+(15) задачки в redmine.
17 Darklight
 
06.07.12
13:17
(15) Так, нужно осмыслить...
А что такое bzr и trunk, redmine?
"Release - практически всегда захватывается полностью" - а нет общего консолидированного учета объектов, которые находятся в работе у различных групп программистов? И, соответственно, общего контроля захвата (чтобы разные программисты из разных групп не брали одновременно объекты в работу)? И какова ключевая роль release по сравнению с test (ведь в test можно подготавливать конченый релиз, затем выгружать его в cf и передавать его сразу в рабочую базу)
18 pumbaEO
 
06.07.12
13:44
общего контроля захвата - это бессмысленно, во всяком случаи у меня, т.к. может меняться в день несколько раз. Хочу уйти от выкатывания программистом раз в 2 недели тонны кода, n изменений (для хранилища это проще, не так тормозит, для понимания нет).
trunk -> test ->release . Так просто исторически сложилось, т.е. release это для поставки и там красивая история. test - в принципе тоже красивая история, только вот может разбавляться "исправление ошибок" и т.д. В принципе test выполняет функции release (но как говорил исторически так).

Общего контроля захвата нет, решается разрешением конфликтов программистами на местах (pull, merge, push), в случаи изменения метаданных создается задача в redmine со специальным статусом.

redmine - http://www.redmine.org/
trunk - текущая ветка разработчика (толи хранилище, толи DVCS какой нибудь).
19 Лефмихалыч
 
06.07.12
14:03
(13) У нас так.
1. В случае, когда оба программиста работают по не связанным задачам и разработку первого надо приостановить:
  Первый отпускает в release и коммитит в trunk.
  Второй захватывает в release, захватывает в trunk. Накатывает на trunk версию объектов из release, чтобы затереть изменения первого.
  Далее сбора теста, тестирование коммит в release, первому возвращается объект.
2. В случае, когда задачи связаны и изменения можно объединить:
  Первый отпускает в release и коммитит в trunk.
  Второй захватывает в release, захватывает в trunk. Делает свои изменения и помещает в trunk.
  Либо передача обратно первому, либо тестирование и внедрение.