Pergunta

Estou querendo realizar uma série de tarefas em SourceGear Vault (V4.1.4) com Nant (V0.86.3317.0).

Existe alguma maneira podemos obter Vault para utilizar a autenticação do Windows a partir Nant para criar a conexão?

O bloco Nant que estou usando para inicializar o cofre de conexão é:

<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" />

Como eu estou trabalhando no projeto com outros desenvolvedores, codificação nomes de usuário e senhas de disco rígido para o arquivo de construção Nant não é uma boa idéia. Ambos username e password são opções necessárias no comando vaultsetloginoptions.

Outras alternativas (todos com capturas) incluem:

(a) codificar o conta 'Admin' na Nant propriedades e log abóbada em usar isso. Esta não é tão grande, como nós, em seguida, solta uma trilha de auditoria de quem é responsável pelo check-in / operações as executa scripts nant check-out. Ele também causa problemas quando a solução tem arquivos check-out (parte do script garante que todos os arquivos são verificados de volta no controle de origem antes de gerar uma etiqueta no Vault).

(b) Use um script C # a partir do código Nant para definir as propriedades de nome de usuário e senha dinâmica ... exceto nós, então temos um problema de obter a senha do usuário ainda

(c) Leia as informações de perfil armazenado a partir do cliente Vault e se conectar usando esse (exceto eu não tenho certeza de onde ele é armazenado).

Obrigado por sua consideração.

Foi útil?

Solução 2

Eu tenho implementado com sucesso o protótipo de trabalho em torno este problema.

completa Fonte e binários para a solução descrita abaixo pode ser encontrada aqui:

Vault Acesso extensões

Eu criei algumas tarefas NAnt costume e funções.

cheques <VaultLogin> registro do Windows para nome de usuário e senha previamente armazenado. Se não for encontrado ele solicita ao usuário uma janela de login. Ele armazena as entradas em duas funções e limpa o registro (no caso o login falhar - ver <SaveVaultLogin> abaixo):

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

A tarefa <vaultsetloginoptions> então é capaz de usar as funções de:

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

Depois de chamar a tarefa <vaultsetloginoptions>, que, em seguida, chamar a tarefa <SaveVaultLogin> que escreve os valores de nome de usuário e senha novamente para o registro. Isso garante que somente sucesso detalhes de autenticação estão armazenados (como o script falha na tarefa, se o nome de usuário e senha estão incorretos.

Este é o bloco de código juntos:

  <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 />    

Update:. Link para binários e fonte para o trabalho-around agora em cima de pós

Outras dicas

Eu estou familiarizado com Vault por favor, perdoe a imprecisão potencial desta resposta. Eu já trabalhei com NAnt muito e qualquer coisa que é executada (tarefas, executivos, etc.) têm o potencial inerente ao ser executado no modo de autenticação integrada.

No final, a autenticação é passado junto a qualquer utilizador passa a ser a execução do processo NAnt pai. Dito isto, este poderia ser um sinal de que as tarefas NAnt do Vault não suporte autenticação integrada? Ou seja, se o vaultsetloginoptions tarefa requer os argumentos usuário e senha, então não há nenhuma boa maneira de passar ao longo de credenciais (como você apontou).

Se acontecer de haver soluções para o potencial falta de tarefas NAnt do Vault pode ser possível usar o <exec> tarefa de chamar uma linha de comando versão de sua ferramenta do lado do cliente (nem tenho certeza se eles têm um). Se esta é uma opção, autenticação integrada automaticamente vai chutar, desde que o usuário que executa o processo de NAnt é o mesmo que o que necessita para se conectar ao Vault.

Nós tivemos que fazer isso por algumas coisas que se integram com em nosso processo de construção. Ou nós já exec'd para a versão de linha de comando ou ter escrito nossas próprias tarefas (s) através do alargamento do quadro NAnt. De qualquer forma, isso deve ser possível.

Atualização

Será que alguns olhando ao redor nos fóruns Vault e parece que o integração AD é apenas uma maneira de ter Vault cliente solicitar ao usuário e passar para servidor. do fórum :

The Vault cliente sempre solicitará para o nome de usuário / senha. nossa AD integração é limitada ao servidor verificar se a senha digitada corresponde a senha no Active Directory.

Portanto, não há nenhuma true caminho para o cliente para repassar informações de autenticação do Windows de uma forma integrada. O programa cliente Vault exige que se insira o nome de usuário e senha quando rodando em modo AD. Infelizmente, ao que parece sem armazenar o nome de usuário / senha, as chances de Seamless integração NAnt é um tiro longe.

Depois de olhar para a sugestão de Scott Saad, infelizmente, não parece haver nenhuma opção na ferramenta de linha de comando, quer chamá-lo usando autenticação do Windows.

Meu pensamento atual está em linha com (b) acima.

Eu vou criar uma biblioteca que pode ser chamado a partir do script Nant, pedindo nome de usuário Vault e senha do Windows atual do usuário.

A biblioteca vai olhar em uma entrada resigstry para um nome de usuário Vault introduzido anteriormente e login para este usuário do Windows. Se ele existir, ele será passado para o script sem qualquer interação do usuário.

Se este nome de usuário / senha falhar o login abóbada, ou se ele não existir, em seguida, a biblioteca irá fornecer uma caixa de diálogo para que o usuário digite o nome de usuário vault atual e senha.

A entrada do usuário será armazenado no Registro (criptografadas) que significa isso só deve ter que ser inseridos uma vez cada vez que o nome de usuário e senha mudança Vault.

Não é uma solução ideal, mas deve ser relativamente simples e um trabalho bastante aceitável ao redor.

O que você acha?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top