Наша среда сборки закачивает последнюю сборку в общую папку Windows в заранее определенном месте. У нас возникают проблемы с блокировкой файлов, когда удаленные пользователи открывают и поддерживают папки и файлы в этом доступном только для чтения файловом ресурсе, и это приводит к поломке наших сборок. Есть ли какая-нибудь технология, которая может решить эту проблему?
Я думал о
но пока ни один из этих возможных решений не кажется подходящим.
Для пояснения предположим, что путь к «последней сборке» - \ server \ share \ path \ Latest, и только сервер сборки имеет доступ на запись. Кто-то открыл командную строку или файл msi где-то в папке «Последние». Теперь сервер сборки готов, и ему необходимо удалить все содержимое из папки перед копированием во все вновь созданные части. Нет, не могу.
Если у общего ресурса SMB была поддержка символических ссылок или какое-то представление о транзакциях, таких как NTFS, или возможность переименовывать «открытые» каталоги, такие как HFS, - но нет.
И размещение всех двоичных файлов в папках Sharepoint Document, как предлагалось в другом месте, также кажется дрянной идеей из-за большого объема данных. Я бы предпочел использовать общий ресурс только для WebDAV, который монтируется как файловая система, но ведет себя как веб-сайт.
Вы имеете в виду, что они на самом деле редактируют эти файлы, или это какая-то ситуация, когда на самом деле никто не использует файлы, но на них есть файловая блокировка?
Если они действительно используют эти файлы (или открывают файл в редакторе, пока у них нет пончика), то вы, вероятно, не хотите, чтобы эти файлы открывались каким-либо иным способом, кроме как с помощью приложения, которое открывает их копии только для чтения, иначе у вас будет потенциальное повреждение. Вы сказали, что общий файловый ресурс доступен только для чтения. Так что же они делают, что не позволяет открывать файл несколько раз в режиме только для чтения? Вы также не упоминаете, каков ваш процесс сборки, так что, может быть, это относится к этому рабочему процессу?
Лучшим решением может быть попытка изолировать среду сборки от сред разработки. Имейте процесс разработки, который проверяет все ваши источники из репозитория и строит их на выделенном сервере и в выделенном общем ресурсе, вдали от всего, что касается ваших разработчиков. Таким образом, вам не нужно беспокоиться о том, что разработчики что-то изменят или нарушат ваш процесс сборки, и процессу сборки не нужно будет беспокоиться о том, что что-то изменится во время работы.
Если вы использовали файловый сервер Linux, эти 3 параметра в smb.conf могут быть полезны.
strict locking = no
blocking locks = no
# from man page: Be careful about disabling locking either globally or in a specific service, as lack of locking may result in data corruption. You should never need to set this parameter.
locking = no
Но для их использования вам понадобится отдельный общий ресурс для записываемых клиентов без вышеуказанного, что, как я полагаю, означает, что предупреждение не применяется.