我是团队城市的新手,并尝试使用REST API调用部署工具。我正在尝试从团队城市传递power.number的power shell脚本。我的问题是如何从TeamCity运行PS脚本并将其传递给$ build参数值
这是PS我的剧本:
param (
[string]$build = "#build#"
)
$cred = New-Object System.Net.NetworkCredential("user", "password")
$url = 'http://server-ip:8080/datamanagement/a/api/create-release'
$request = [Net.WebRequest]::Create($url)
$request.ServicePoint.Expect100Continue = $false
$request.PreAuthenticate = $true
$request.Credentials = $cred
$request.Headers.Add("AUTHORIZATION", "Basic c3VwZXJ7482ewfc3974yOnN1c2Vy"); # user:pass encoded in base 64
$request.ContentType = "application/json"
$request.Method = "POST"
$data = (New-Object PSObject |
Add-Member -PassThru NoteProperty environment "QA" |
Add-Member -PassThru NoteProperty template "Regression on AutoNolio" |
Add-Member -PassThru NoteProperty release "Nolio build: $build" |
Add-Member -PassThru NoteProperty application "RunAutomation" |
Add-Member -PassThru NoteProperty version "$build" |
Add-Member -PassThru NoteProperty doStepsValidation "false" |
Add-Member -PassThru NoteProperty releaseType "Major"
) | ConvertTo-JSON
Write-Host $data
# Write-Host $cred.Password
$bytes = [System.Text.Encoding]::ASCII.GetBytes($data)
$request.ContentLength = $bytes.Length
$requestStream = [System.IO.Stream]$request.GetRequestStream()
$requestStream.write($bytes, 0, $bytes.Length)
$response = $request.GetResponse()
[IO.Stream] $stream = $response.GetResponseStream()
[IO.StreamReader] $reader = New-Object IO.StreamReader($stream)
[string] $output = $reader.readToEnd()
$stream.flush()
$stream.close()
# // return the text of the web page
Write-Host $output
我正在设置以下配置:
但是我在运行buld时遇到了这个错误:
[17:43:37]Checking for changes
[17:43:37]Publishing internal artifacts (1s)
[17:43:37]Clearing temporary directory: C:\BuildAgent2\temp\buildTmp
[17:43:37]Checkout directory: C:\BuildAgent2\work\467ac7a3aa06b293
[17:43:37]Updating sources: agent side checkout (3s)
[17:43:41]Starting: C:\Windows\sysnative\cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -build 14 -Command - <C:\BuildAgent2\temp\buildTmp\powershell3648184935303703255.ps1 && exit /b %ERRORLEVEL%
[17:43:41]in directory: C:\BuildAgent2\work\467ac7a3aa06b293
[17:43:41]-build : The term '-build' is not recognized as the name of a cmdlet,
[17:43:41]function, script file, or operable program. Check the spelling of the name, or
[17:43:41]if a path was included, verify that the path is correct and try again.
[17:43:41]At line:1 char:1
[17:43:41]+ -build 14 -Command -
[17:43:41]+ ~~~~~~
[17:43:41] + CategoryInfo : ObjectNotFound: (-build:String) [], CommandNotFo
[17:43:41] undException
[17:43:41] + FullyQualifiedErrorId : CommandNotFoundException
[17:43:41]
[17:43:41]Process exited with code 1
[17:43:41]Publishing internal artifacts
[17:43:42]Build finished
答案 0 :(得分:3)
%build.number%
将内部版本号插入脚本中。为了扩展答案,这是TeamCity的许多predefined build parameters之一。如果您在代码文本框中键入一个开头百分号,TeamCity将显示一个包含您可以插入的所有可能参数的下拉列表。
你必须要小心一些,因为它们作为单词插入到你的脚本中。例如,如果您将常用配置文件存储在%agent.work.dir%
中,并尝试运行以下复制命令:
cp %agent.work.dir%\config .\config
该命令将扩展为类似
cp C:\teamcity install\config .\config
这不起作用,因为Powershell会认为您正在尝试复制文件C:\teamcity
。因此,请确保将整个参数放在引号内:
cp "%agent.work.dir%\config" .\config
作为旁注,使用带有自定义Configuration Parameters的模板非常有用,因此您可以在多个构建配置中使用相同的脚本。这就像在语言中添加函数一样:您可以重用并轻松修改。
此外,在7.1.1之前的TeamCity版本中,有a bug与脚本执行模式设置为-Command
的脚本运行有关,因此如果您运行7.0或更早版本,则更安全使用-File
答案 1 :(得分:0)
param (
[string]BuildNumber
)
和
TeamCity设置中的-BuildNumber %build.number%
应该可以正常工作
答案 2 :(得分:0)
使用&#34;从外部文件&#34;执行.ps1,将参数放入&#34;脚本参数&#34;并从&#34;附加命令行参数&#34;。
中删除它