Alguém gerencia sua integração contínua com o TeamCity, FinalBuilder e Mercurial (forno)? [duplicado
-
19-09-2019 - |
Pergunta
Possível duplicata:
Pilha de integração contínua no Windows com filas mercuriais + mercuriais?
Se sim, como é o seu processo de construção?
Estou tendo um tempo difícil (principalmente por causa da minha falta de experiência/compreensão de todas as três ferramentas), fazendo com que o TeamCity execute meus scripts FinalBuilder. No momento, tenho o FinalBuilder gerenciando todos os checkouts de controle de origem e o TeamCity basicamente apenas executando o script FinalBuilder e a leitura nos resultados do teste NUNIT, mas não funciona devido a erros de autenticação ao executar comandos mercuriais em forno.
Solução
Se você instalou o cliente Kiln na máquina executando seu script FinalBuilder, terá acesso à extensão mercurial "Kilnauth" que deve resolver esse problema para você.
Basta fazer logon na máquina de construção como o usuário que executa o script FinalBuilder e executa manualmente um comando push ou puxe do repositório mercurial que você está tentando usar, você será solicitado a autenticar. Autentique uma vez, e as extensões do cliente do forno se lembrarão dessa autenticação para esse usuário ... e qualquer execução subsequente pelo script FinalBuilder deve se autenticar muito bem.
Isso resolve o problema para você? É a melhor solução, pois não armazena nenhum nome de usuário ou senha na sua máquina. Obviamente, existem outras possibilidades, como alterar o caminho do seu mercurial para usar o formato http: // {nome de usuário}: {senha}@{kiln url} ... mas isso não é tão bom ou seguro quanto a técnica acima.
Isso faz sentido?
Outras dicas
Não sei nada sobre forno, mas comecei a trabalhar para a VSOFT e estou trabalhando em uma ação mercurial para a próxima versão do FinalBuilder. Espero que parte disso ajude.
Você está atendendo via SSH ou SSL? Você pode puxar/empurrar para o repositório da linha de comando? Praticamente qualquer coisa que você possa trabalhar na linha de comando deve ser possível com o FinalBuilder.
Para autenticar para o Bitbucket via SSH, fiz o seguinte:
- Baixe Puttygen e Pageant
- Crie uma nova chave SSH em Puttygen
- Adicione a chave privada para o concurso
- Adicione a chave pública ao Bitbucket
De lá, eu posso com sucesso
hg push ssh://hg@bitbucket.org/user/repo
NB, também tenho o TortoiseHG instalado e o Mercurial está usando o TortoisePlink como cliente SSH.
Se você estiver usando o SSL, poderá armazenar o combo de nome de usuário/senha em sua ação FinalBuilder. Para transformar uma caixa de texto em um campo de senha, altere o PasswordChar
propriedade de #0
para *
. Então no ReadData
evento, adicione algo como
Page.tbPassword.Text = DecryptString(Properties.PropertyAsString("Token"));
E no WriteData
evento, add
Properties.PropertyAsString("Token") = EncryptString(Page.tbPassword.Text);
Quando você adiciona o Token
propriedade para sua ação, marque o Property is Hidden from Action Inspector
e Property is Read Only in Action Inspector
opções.
Para gerar sua string de repositório, você deseja fazer algo assim na ação GetCommandLine
evento:
var repo = Context.Properties.PropertyAsString("Repository");
var username = Context.Properties.PropertyAsString("Username");
var password = DecryptString(Context.Properties.PropertyAsString("Token"));
var repo = "ssh://" + username + ":" + password + "@" + repo;
CommandLine.AddArgument("push", repo, qtNone);
NB, não testei esse código, mas espero que isso lhe dê uma ideia.