我有一个奇怪的问题,每当我尝试远程调用我们的一个测试服务器时,TeamCity 就会挂起。
目前构建步骤是:
- Template files for
- Compile code in
- Package project
- Send package to test servers
- Unzip package on test servers
现在一切正常,直到最后一个阶段,在远程服务器上解压缩包。现在我只想运行一个powershell命令来连接并运行命令然后退出。如果我从远程桌面使用 powershell,这一切都很好,并且提供的用户凭据是正确的。
正在运行的示例如下:
$password = ConvertTo-SecureString "%PasswordVar%" -AsPlainText -Force
$credentials = New-Object System.Manager.Automation.PsCredential("%UsernameVar%", $password)
etsn -computername %TestServer1Var% -Credential $credentials
当这被称为 TeamCity 只是挂起时,它必须手动停止,否则它将永远停留在代理上的这一步。我试过不使用凭据,我试过不使用 etsn 并使用完整的命令名,还尝试了其他远程命令方法,似乎没有任何效果。
那么有没有办法让 TeamCity 实际运行命令?或者找出是什么导致它不确定地处理这一步?
最佳答案
这是小问题的混合,因为 1 用户在通过团队城市查询时未正确解析域,因此需要将其添加到用户名 some-user@some-domain
.还有一个问题是,在进行 PSSESSION 连接时会遇到某种连接限制,但是如果我使用脚本 block 切换到 Invoke-Command,它就可以正常工作。
如果它对这里的任何人有帮助,那么我最终使用的命令是解压缩远程文件,使用 7zip 命令行作为 native 解决方案似乎从未起作用。
$password = ConvertTo-SecureString "%TestServer.Password%" -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PsCredential("%TestServer.Username%",$password)
$scriptBlock1 = {`
`
$sevenZip = "%TestServer.ReleasePath%\7za.exe"; `
&$sevenZip x %TestServer.ReleasePath%\web-package.zip -o%TestServer.WebPath% * -aoa; `
}
Invoke-Command -computername %TestServer.Server% -Credential $credentials -scriptblock $scriptBlock1
要记住的一件事是,用户名包含上面列出的域,还需要魔术引号以允许脚本 block 跨行分布,以及分号表示任务应该一起运行。
关于powershell - Teamcity powershell runner 在服务器上远程运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15788486/