Вопрос

Я хочу выполнить ряд задач в SourceGear Vault (V4.1.4) с помощью Nant (V0.86.3317.0).

Есть ли какой-нибудь способ заставить Vault использовать проверку подлинности Windows из Nant для создания соединения?

Блок Nant, который я использую для инициализации подключения к хранилищу, является :

<target name="InitialiseVaultSettings">
<echo>InitialiseVaultSettings</echo>
<vaultsetloginoptions user="${vault.Username}" password="${vault.Password}" URL="${vault.Host}" repository="${vault.Repository}" />
<vaultsetworkingfolder repositoryFolderPath="${vault.Folder}" diskPath="${vault.WorkingDirectory}" createDiskPath="true" />

Поскольку я работаю над проектом с другими разработчиками, жесткое кодирование имен пользователей и паролей в файле сборки Nant не является хорошей идеей.И то , и другое username и password являются ли обязательные параметры в vaultsetloginoptions команда.

Другие альтернативы (все с уловами) включают :

(a) Жестко закодируйте учетную запись "Администратор" в свойствах Nant и войдите в систему vault, используя ее.Это не так уж и здорово, поскольку затем мы теряем контрольный журнал о том, кто отвечает за операции регистрации / выезда, выполняемые скриптом nant.Это также вызывает проблемы, когда решение извлекает файлы (часть сценария гарантирует, что все файлы будут возвращены в систему управления версиями перед созданием метки в Vault).

(b) Используйте скрипт на C # из кода Nant для динамической настройки свойств имени пользователя и пароля...за исключением того, что у нас все еще возникает проблема с получением пароля от пользователя

(c) Считайте сохраненную информацию профиля из клиента Vault и подключайтесь с ее помощью (за исключением того, что я не уверен, где она хранится).

Спасибо за ваше внимание.

Это было полезно?

Решение 2

Я успешно реализовал прототип, чтобы обойти эту проблему.

Полный исходный код и двоичные файлы для описанного ниже решения проблемы можно найти здесь :

Расширения для входа в Хранилище

Я создал несколько пользовательских задач и функций NAnt.

<VaultLogin> проверяет в реестре Windows ранее сохраненные данные об имени пользователя и пароле.Если он не найден, пользователю будет предложено открыть окно входа в систему.Он сохраняет записи в двух функциях и очищает реестр (в случае сбоя входа в систему - см. <SaveVaultLogin> ниже) :

${VaultLoginFunctions::UserName()}
${VaultLoginFunctions::Password()}

Тот Самый <vaultsetloginoptions> после этого задача сможет использовать функции :

<vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />

После вызова <vaultsetloginoptions> задачу, затем мы вызываем <SaveVaultLogin> задача, которая записывает значения имени пользователя и пароля обратно в реестр.Это гарантирует, что будут сохранены только данные успешной аутентификации (поскольку скрипт завершает выполнение задачи с ошибкой, если имя пользователя и пароль неверны.

Это собранный воедино блок кода :

  <target name="InitialiseVaultSettings">
<echo>InitialiseVaultSettings</echo>

<loadtasks assembly="CompassHealth.NAntExtensions.Tasks.dll" />

<VaultLoginGet />
<echo message="UserName = ${VaultLoginFunctions::UserName()}" />

<vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />

<vaultsetworkingfolder repositoryFolderPath="${vault.Folder}" diskPath="${vault.WorkingDirectory}" createDiskPath="true" />


<!-- need to save the login here, as it is cleared once VaultLoginGet is called, this ensures that only correct username and password are stored -->
<VaultLoginSave />    

Обновить :ссылка на двоичные файлы и исходный код для решения проблемы теперь вверху поста.

Другие советы

Я не знаком с Vault, поэтому, пожалуйста, простите возможную расплывчатость этого ответа.Я много работал с NAnt, и все, что выполняется (задачи, исполнители и т.д.), потенциально может выполняться в интегрированном режиме аутентификации.

В конце концов, аутентификация передается тому пользователю, который запускает родительский процесс NAnt.Тем не менее, это может быть признаком того, что задачи NAnt Vault не Поддержка интегрированная аутентификация?Это означает, что если параметры vaultsetloginoptions задача требует аргументы пользователя и пароля, тогда нет хорошего способа передать учетные данные (как вы указали).

Если так случится, что не будет обходные пути для решения потенциальных проблем, отсутствующих в задачах NAnt Vault, можно было бы использовать <exec> задача вызвать версию командной строки их клиентского инструмента (даже не уверен, есть ли у них таковой).Если это опция, интегрированная аутентификация включится автоматически, если пользователь, выполняющий процесс NAnt, совпадает с пользователем, которому требуется подключиться к Vault.

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

Обновить

Я немного покопался на форумах Vault, и мне показалось, что Интеграция рекламы это просто способ заставить клиента Vault запросить пользователя и передать его на сервер. С форума:

Клиент хранилища всегда будет запрашивать имя пользователя / пароль.Наше ОБЪЯВЛЕНИЕ интеграция ограничена сервером проверка того, что введенный пароль совпадает с паролем в Active Directory .

Следовательно, нет никакого верно способ для клиента передавать информацию об аутентификации Windows встроенным способом.Клиентская программа Vault требует ввода имени пользователя и пароля при запуске в режиме AD.К сожалению, казалось бы, без сохранения имени пользователя / пароля шансы на бесшовный Интеграция NAnt - это далекий путь.

Рассмотрев предложение Скотта Саада, к сожалению, в инструменте командной строки, похоже, также нет опции для вызова его с использованием проверки подлинности Windows.

Мое нынешнее мышление согласуется с пунктом (b) выше.

Я создам библиотеку, которую можно вызвать из скрипта Nant, запрашивая имя пользователя и пароль хранилища текущего пользователя Windows.

Библиотека будет искать в записи resigstry ранее введенное имя пользователя Vault и логин для этого пользователя Windows.Если он существует, он будет передан скрипту без какого-либо взаимодействия с пользователем.

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

Запись пользователя будет сохранена в реестре (в зашифрованном виде), что означает, что ее нужно вводить только один раз при каждом изменении имени пользователя и пароля хранилища.

Не идеальное решение, но оно должно быть относительно простым и достаточно приемлемым для обхода.

А ты как думаешь?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top