CruiseControl.NET executado como um serviço do Windows e como um processo independente se comporta de maneira diferente
-
25-09-2019 - |
Pergunta
Tenho um projeto que está sendo construído usando CruiseControl.NET.O projeto contém uma 'tarefa MSBuild' que executa a compilação do projeto e também os testes de unidade.O teste de unidade, por sua vez, é apenas uma tarefa 'exec' do MSBuild que executa um executável.
O teste de unidade envolve alguma comunicação remota do .NET.E quando os testes de unidade são executados através do prompt de comando do sistema, a janela do software é aberta, os testes são executados e o processo é encerrado.
Quando forço uma compilação por meio do painel da web, a compilação trava no ponto em que o teste de unidade começa a ser executado.A janela do software não abre, mas o executável está em execução.Se o processo for encerrado por meio do explorador de tarefas, a compilação será concluída com o status de 'Falha'.Isso acontece quando executo o ccnet como um serviço do Windows.
Se eu executar o CCNet diretamente (não como um serviço do Windows) e forçar uma compilação por meio do painel da web, a compilação e os testes de unidade passarão bem conforme o esperado.(com a janela do software abrindo.)
Parece que há um impasse no caso em que o CCNet é executado como um serviço do Windows.Suponho que esteja relacionado aos fluxos de saída/erro padrão.
Este é um problema conhecido?
Qual pode ser o problema que está acontecendo?
Alguma sugestão sobre como depurar isso?
Como posso contornar isso?
(Estou usando CCNet versão 1.4.4 SP1)
Solução
Quando o CCNET estiver em execução como um serviço, ele não terá acesso à tela, portanto, não espere ver nada na tela nessa configuração. A primeira coisa que eu verificaria são as permissões - verifique se o serviço é executado como uma conta que tem permissões para acessar os recursos necessários. Você também possui arquivos de log CCNET, que pode encontrar via painel.
Em uma nota lateral, tente o TeamCity em vez do CCNET, seus 10 anos à frente.
Outras dicas
Talvez esta resposta ajude:O serviço Delphi Windows não pode baixar arquivos da Internet
Você deve saber que ao executar o CCNet como uma aplicação (o dosbox) ele utiliza as variáveis de ambiente e todos os direitos da conta logada.Portanto, ele pode se conectar a um servidor, usar senhas em cache, obter variáveis de registro para esta conta.
MAS quando executado como um serviço, a conta é aquela que você forneceu:LocalSystem por exemplo, onde env.variáveis não são iguais.
Então, o que você pode fazer é alterar a conta do serviço CCNet para teste.Mude para sua conta de usuário (com senha) e tenho certeza que funcionará melhor!