2016-12-02 4 views
0

次のスクリプトを使用して、teamcityビルドから変更ログを生成しています。powershellスクリプトを使用してTeamcityビルドから変更ログファイルを生成するときのエラー

<# 
.SYNOPSIS 
    Generates a project change log file. 
.LINK 
    Script posted over: 
    http://open.bekk.no/generating-a-project-change-log-with-teamcity-and-powershell 
#> 

# Where the changelog file will be created 
$outputFile = "%system.teamcity.build.tempDir%\releasenotesfile_%teamcity.build.id%.txt" 
# the url of teamcity server 
$teamcityUrl = "%teamcity.serverUrl%" 
# username/password to access Teamcity REST API 
$authToken=[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("%system.teamcity.auth.userId%:%system.teamcity.auth.password%")) 
# Build id for the release notes 
$buildId = %teamcity.build.id% 

# Get the commit messages for the specified change id 
# Ignore messages containing #ignore 
# Ignore empty lines 
Function GetCommitMessages($changeid) 
{ 
    $request = [System.Net.WebRequest]::Create("$teamcityUrl/httpAuth/app/rest/changes/id:$changeid")  
$request.Headers.Add("AUTHORIZATION", "$authToken"); 
$xml = [xml](new-object System.IO.StreamReader $request.GetResponse().GetResponseStream()).ReadToEnd()  
Microsoft.PowerShell.Utility\Select-Xml $xml -XPath "/change" | 
    where { ($_.Node["comment"].InnerText.Length -ne 0) -and (-Not $_.Node["comment"].InnerText.Contains('#ignore'))} | 
    foreach {"+ $($_.Node["user"].name) : $($_.Node["comment"].InnerText.Trim().Replace("`n"," "))`n"} 
} 

# Grab all the changes 
$request = [System.Net.WebRequest]::Create("$teamcityUrl/httpAuth/app/rest/changes?build=id:$($buildId)") 
$request.Headers.Add("AUTHORIZATION", "$authToken"); 
$xml = [xml](new-object System.IO.StreamReader $request.GetResponse().GetResponseStream()).ReadToEnd() 

# Then get all commit messages for each of them 
$changelog = Microsoft.PowerShell.Utility\Select-Xml $xml -XPath "/changes/change" | Foreach {GetCommitMessages($_.Node.id)} 
$changelog > $outputFile 
Write-Host "Changelog saved to ${outputFile}:" 
$changelog 

これを実行するとファイルが生成されますが、常に空になります。ビルドログを見ると、PowerShellのビルドステップから次のエラーメッセージが表示されます。

Error

誰もが何が間違って起こっている私に言うと、私は、このステップを動作させるために変更する必要がある何ができますか?

+0

TeamCity REST APIドキュメントを見ると、「認証」ヘッダーについては何もありません。彼らはユーザー/パスワード認証だけを言及します。 – Eris

+0

あなたは実際にそれらの変数の代わりにユーザー名とパスワードを使用すべきだと言っていますか? –

+0

この他の質問に対する回答は、次のように役立ちます。http://stackoverflow.com/a/20903962 – Eris

答えて

0

これらのエラーは、

( "基本$ authTokenの"、 "AUTHORIZATION") 追加で( "認可"、 "$ authTokenの")を追加、交換チームシティーバージョン10 での観察これらのコードは、私のバージョンのために働いていました図10のビルド番号は50574です。

<# 
.SYNOPSIS 
    Generates a project change log file. 
.LINK 
    Script posted over: 
    http://open.bekk.no/generating-a-project-change-log-with-teamcity-and-powershell 
#> 

# Where the changelog file will be created 
$outputFile = "%system.teamcity.build.tempDir%\releasenotesfile_%teamcity.build.id%.txt" 
# the url of teamcity server 
$teamcityUrl = "%teamcity.serverUrl%" 
# username/password to access Teamcity REST API 
$authToken=[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("%system.teamcity.auth.userId%:%system.teamcity.auth.password%")) 
# Build id for the release notes 
$buildId = %teamcity.build.id% 

# Get the commit messages for the specified change id 
# Ignore messages containing #ignore 
# Ignore empty lines 
Function GetCommitMessages($changeid) 
{ 
    $request = [System.Net.WebRequest]::Create("$teamcityUrl/httpAuth/app/rest/changes/id:$changeid")  
$request.Headers.Add("AUTHORIZATION", "$authToken"); 
$xml = [xml](new-object System.IO.StreamReader $request.GetResponse().GetResponseStream()).ReadToEnd()  
Microsoft.PowerShell.Utility\Select-Xml $xml -XPath "/change" | 
    where { ($_.Node["comment"].InnerText.Length -ne 0) -and (-Not $_.Node["comment"].InnerText.Contains('#ignore'))} | 
    foreach {"+ $($_.Node["user"].name) : $($_.Node["comment"].InnerText.Trim().Replace("`n"," "))`n"} 
} 

# Grab all the changes 
$request = [System.Net.WebRequest]::Create("$teamcityUrl/httpAuth/app/rest/changes?build=id:$($buildId)") 
$request.Headers.Add("AUTHORIZATION", "$authToken"); 
$xml = [xml](new-object System.IO.StreamReader $request.GetResponse().GetResponseStream()).ReadToEnd() 

# Then get all commit messages for each of them 
$changelog = Microsoft.PowerShell.Utility\Select-Xml $xml -XPath "/changes/change" | Foreach {GetCommitMessages($_.Node.id)} 
$changelog > $outputFile 
Write-Host "Changelog saved to ${outputFile}:" 
$changelog 
関連する問題