City Team and Power Shell

I am new to the team city and trying to invoke the deployment tool using the REST API. I am trying to pass the shell script build.number from the city of the command. My question is how can I run a PS script from TeamCity and pass the value of the $ build parameter to it

This is the PS my script:

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 

I am setting up the following configuration:

enter image description here

But I get these errors when running 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 
+4
source share
3 answers

The primer is correct; you can use %build.number% to insert the build number in your script. To broaden the answer, this is one of many TeamCity options predefined build options . If you enter the percent sign of opening in the code text field, TeamCity will display a drop-down menu containing all the possible parameters that you can insert.

You have to be careful about some because they are inserted as β€œsimple” words in your script. If, for example, you store shared configuration files in %agent.work.dir% and you try to run the following copy command:

 cp %agent.work.dir%\config .\config 

The team will be expanded by approximately

 cp C:\teamcity install\config .\config 

And this will not work, because Powershell will think that you are trying to copy the C:\teamcity . So make sure you specify the entire argument inside quotation marks:

 cp "%agent.work.dir%\config" .\config 

As a side note, using templates with custom configuration options is incredibly useful, so you can use the same scripts in multiple build configurations. This is like adding features to a language: you get reuse and ease of modification.

In addition, in versions of TeamCity prior to 7.1.1 there is an error related to running scripts with Script. The execution mode is set to -Command , therefore, if you use 7.0 or earlier versions, it is safer to use -File

+3
source
 param ( [string]BuildNumber ) 

and -BuildNumber %build.number% in TeamCity settings should work

0
source

Using "Run .ps1 from an external file", put the arguments in the "Script arguments" and remove them from the "Advanced command line options".

0
source

All Articles