我有一个奇怪的问题,其中的TeamCity只是挂每当我试图做一个远程调用我们的测试服务器。
目前构建的步骤是:
- 为模板文件
- 编译代码
- 包项目
- 发送软件来测试服务器
- 解压缩封装测试服务器上
现在,这一切工作正常,直到最后阶段,在远程服务器上解压缩包。 现在,我想只是运行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连接时被击中,但是如果我改变了对调用命令与脚本块它工作得很好。
如果它可以帮助任何人在这里是我结束了解压远程文件,使用7zip的命令行作为本地的解决方案似乎从来没有工作的命令。
$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
有一点要记住的是,用户名包含域上面列出,还需要在魔术引号,以允许遍及线还有分号指示任务应一起运行的脚本块。
Invoke-Command
效果很好,如果你要在服务器上运行脚本很短,你必须等待它完成执行。
我的问题是,我想向远程服务器上启动一个服务,只需登录该服务器内的东西,让TeamCity的构建继续执行。 随着Invoke-Command
,TeamCity的做远程执行过程中,却一直在等待这个过程完成否返回。 如果你正在寻找的东西,只是调用服务器上的长时间运行的进程,并忘掉它,试试这个:
该解决方案为我工作最好的:
1)将脚本远程执行,在服务器中的文件..可以说的startup.bat
call Powershell.exe -executionpolicy remotesigned -File %1\bin\startup.ps1
这基本上执行位于Web服务器的其他PowerShell脚本。
Start-Process -WindowStyle hidden java -ArgumentList '-jar', "$APP_HOME\bin\test-api.jar" -PassThru
确保有一个TeamCity的构建步骤将这些文件部署到Web服务器。
2)创建一个TeamCity的生成步骤执行PowerShell脚本文件
样品PowerShell命令由TeamCity的执行:
$SERVER = (Get-Item env:SERVER_NAME).Value
$APP_HOME = (Get-Item env:APP_HOME).Value
$STARTUP_SCRIPT_PATH = "$APP_HOME\bin\startup.bat"
Function Remote-Process {
param(
[string]$ComputerName,
[string]$Cmd
)
echo "Invoking Remote Script.."
$RETURNVAL = ([WMICLASS]"\\$ComputerName\ROOT\CIMV2:win32_process").Create($Cmd)
echo $RETURNVAL
}
$COMMAND = "$STARTUP_SCRIPT_PATH $APP_HOME"
$output = Remote-Process $SERVER $COMMAND
echo $OUTPUT
其中APP_HOME是你的Web应用程序部署到该文件夹的绝对路径(在远程塞雷尔语)。
仅此而已。 通过这种方式,你甚至可以执行服务和远程进程将不会被杀死,让你继续构建链。