Сценарий управления исходным кодом/подрывной деятельности Powershell. Это вообще возможно?

Я новичок в Subversion/Source Control, поэтому мне интересно, возможно ли это вообще.

Я установил сервер 2012 года, который будет служить центральным местом для всех наших скриптов (в основном Powershell). На нем будут размещаться производственные сценарии, выполняющие задачи мониторинга, а также различные другие полезные/специальные сценарии, которые используются нашими системными администраторами.

Теперь я хотел бы реализовать некоторую форму контроля исходного кода/подрывной деятельности, чтобы мы могли отслеживать изменения, внесенные в сценарии. Однако я не уверен, что сценарий, который я хочу, возможен.

Я хочу иметь папку с именем E:\Scripts, где хранятся и выполняются все сценарии.

Однако всякий раз, когда кто-то хочет изменить скрипт в этой папке, он не должен просто редактировать его напрямую, а использовать какой-либо инструмент управления исходным кодом/Subversion (например, TortoiseSVN).

Теперь я немного поиграл с TortoiseSVN, но, возможно, я не понимаю, как это на самом деле работает. Я создал репозиторий (E:\SVN) и добавил в него папку E:\Scripts. Я могу проверить скрипт и изменить его, но когда я фиксирую изменения, он не обновляет скрипт в E:\Scripts (я предполагал, что это произойдет, может быть, я ошибаюсь).

Возможен ли этот сценарий?


person user2745994    schedule 20.03.2014    source источник
comment
У него нет постоянной связи с сервером, поэтому он не будет знать, что новый код был зарегистрирован. После того, как вы зарегистрировали свой код из другого места, вам нужно выполнить команду svn, чтобы получить последний код из репозиторий исходного кода (например, с TortoiseSvn вы могли бы просто щелкнуть правой кнопкой мыши папку e:\scripts и щелкнуть элемент контекстного меню, чтобы получить последний код с TortoiseSvn). Я предлагаю прочитать учебник по svn, который вы, вероятно, сможете легко найти, выполнив поиск в вашей любимой поисковой системе.   -  person Robert Westerlund    schedule 20.03.2014
comment
Хм, я поищу учебник. Щелчок правой кнопкой мыши по папке E:\scripts, похоже, не дает мне какой-либо возможности для обновления из репозитория... если только это не Экспорт? Это будет раздражать, если придется делать это каждый раз. Похоже, мне нужно прочитать SVN;)   -  person user2745994    schedule 20.03.2014
comment
Если у вас установлена ​​Tortoise SVN и содержимое папки E:\Scripts является результатом SVN Checkout, у вас должна быть опция SVN Update, которую можно использовать для получения последней версии после того, как кто-то SVN Commit их изменения в систему контроля версий.   -  person Robert Westerlund    schedule 20.03.2014
comment
Кроме того, TortoiseSVN поставляется с исполняемым файлом командной строки svn.exe, так что можно запустить Set-Location 'E:\Scripts'; & svn update в сценарии.   -  person Ansgar Wiechers    schedule 20.03.2014
comment
Возможно, вам потребуется изменить способ настройки TortoiseSVN для использования общих дисков. По умолчанию TortoiseSVN не работает на общих дисках, потому что это замедляет его работу. Вместо этого вы должны проверить свой рабочий каталог локально и не использовать один рабочий каталог для пользователей. Таким образом, когда кто-то регистрирует изменение, вы знаете, кто его внес.   -  person David W.    schedule 26.03.2014


Ответы (3)


Да, это очень возможно. На самом деле, это то, что касается Source Control...

Если у вас есть репозиторий Subversion (и вы используете Apache или svnserve — не используйте file:///!), вы можете легко делать то, что хотите.

Я так понимаю, что диск E: общий. Нет необходимости делать это. Вместо этого у каждого пользователя будет своя рабочая копия репозитория Subversion. Эта рабочая копия будет размещена локально в собственной системе пользователя. Просто сделайте проверку Subversion, и они получат самые последние и лучшие версии всех сценариев PowerShell прямо в своей локальной системе. Если они вносят изменения, они могут зафиксировать это изменение. Если они хотят получить последние изменения, они делают обновление Subversion. Опять же, все это в локальной системе.

Теперь возьмем немного другой сценарий. Вы хотите, чтобы эти сценарии были на рабочем сервере, а также в последних актуальных версиях. Вы можете использовать систему непрерывной интеграции, такую ​​как Jenkins, чтобы помочь вам в этом.

Jenkins может просматривать репозиторий Subversion и при обнаружении изменений обновлять свою собственную рабочую копию. Вы можете разместить эту рабочую копию где угодно. Например, вы можете заставить Jenkins извлекать рабочий каталог, определенный в каком-то общем каталоге, доступном для всех ваших серверов. Когда кто-то изменяет сценарий и регистрирует это изменение, Jenkins обновляет его рабочую копию, и все серверы автоматически получают изменения.

Некоторые сайты используют специальную ветку production. Таким образом, разработка может выполняться как обычно в основной ветке для тестирования и т. д. Однако, когда они будут готовы установить изменения на сервере, они объединят изменения в ветку рабочая. Их сервер Jenkins увидит изменения и обновит свой рабочий каталог, который просто является общим каталогом, к которому имеют доступ все серверы.

Кстати, PowerShell отлично работает с клиентом командной строки Subversion. У вас есть возможность установить клиент командной строки Subversion при установке TortoiseSVN. Это может быть хорошим способом использования PowerShell с Subversion.

person David W.    schedule 20.03.2014

Мы используем точно такую ​​же настройку, контролируя исходный код сценариев PS и запуская их из наших локальных копий.

После того, как другой разработчик внесет изменения, и вы захотите внести изменения, щелкните правой кнопкой мыши папку e:\scripts и найдите SVN Update. Это загрузит последние изменения репозитория в вашу локальную копию.

svnUpdate
(источник: troyworks.com)

Если у вас нет контекстного меню на показанном снимке экрана, вам необходимо установить клиент SVN на свой локальный компьютер.

person ShaneC    schedule 20.03.2014

Теперь я немного поиграл с TortoiseSVN, но, возможно, я не понимаю, как это на самом деле работает. Я создал репозиторий (E:\SVN) и добавил в него папку E:\Scripts. Я могу проверить скрипт и изменить его, но когда я фиксирую изменения, он не обновляет скрипт в E:\Scripts (я предполагал, что это произойдет, может быть, я ошибаюсь).

Вот ваша проблема:

  1. Вы должны использовать svnserve, который вы можете настроить как Служба Windows.
  2. Вы не должны размещать репозиторий на общем диске. Возможно, вы захотите разместить его на отдельном сервере. Таким образом, когда ваша машина выключена, Subversion продолжает работать. Общий диск означает, что пользователи имеют доступ к сырому каталогу репозитория Subversion и могут творить невообразимые ужасы. Нет причин, по которым кто-либо (кроме svnserve) имеет доступ к каталогу необработанного репозитория.
  3. Цель контроля версий — дать каждому пользователю свой собственный рабочий каталог. Каждый пользователь делает заказ на своей машине. Каждый пользователь делает коммит на своей машине. Это позволяет пользователям совместно использовать репозиторий, не мешая друг другу. Если пользователи совместно используют рабочий каталог на общем диске, они будут мешать друг другу.

    • User #1 needs to make two changes in file foo.ps1 and bar.ps1.
    • Пользователю №2 необходимо внести изменения в файл foo.ps1.
    • Пользователь №1 редактирует foo.ps1, а сейчас редактирует bar.ps1.
    • Пользователь №2 редактирует foo.ps1, а пользователь №1 редактирует bar.ps1.
    • Пользователь № 2 фиксирует изменения и в конечном итоге вносит частичные изменения в bar.ps1. Кроме того, пользователь № 2 удаляет некоторые изменения в foo.ps1, потому что не знал, для чего они нужны.
    • Когда что-то не работает, мы понятия не имеем, кто внес какие изменения.

Если бы у каждого пользователя был свой рабочий каталог:

  • Пользователь №1 вносит изменения в foo.ps1 и bar.ps1.
  • Пока пользователь №1 вносит свои изменения, пользователь №2 вносит изменения в foo.ps1 и фиксирует. Пользователь № 2 никогда не видел изменений пользователя № 2 и не будет пытаться их удалить, потому что не знает, для чего они нужны.
  • Пользователь №1 закончил работу и пытается зафиксировать свои изменения. Упс, фиксация не удалась, и пользователь №1 должен обновить рабочий каталог. Они получают изменения пользователя № 2 в `foo.ps1 и могут убедиться, что их изменения не мешают изменениям пользователя № 2.
  • Теперь пользователь №1 фиксирует свои изменения. У нас есть полная история того, кто внес какие изменения.

So...

  • Поместите репозиторий локально. Если вы не хотите, чтобы это было на вашем компьютере, поместите его на сервер. Цена на оборудование достаточно низкая, поэтому машина, которая ничего не делает, кроме как действует как сервер Subversion, всегда укладывается в бюджет и всегда является хорошей идеей. Виртуальные машины еще дешевле. Если вы не хотите использовать лицензию Windows на сервере из-за ее стоимости, установите Linux. (Просто убедитесь, что порт 3690 не блокируется вашими маршрутизаторами. Это порт svnserve, который используется по умолчанию).
  • Запустите svnserve на этом сервере. Прикосновение к этому необработанному каталогу репозитория Subversion запрещено и должно быть недоступно для всех, кроме администратора Subversion.
  • Попросите каждого пользователя оформить заказ из Subversion локально на свой компьютер. Они не должны совместно использовать рабочий каталог НИКОГДА.
person David W.    schedule 26.03.2014