TeamCity SVN Сообщение коммита
Я использую автоматические развертывания с TeamCity и Octopus Deploy. Каждая сборка запускается фиксацией в репозитории SVN.
Я хотел бы использовать сообщение коммита, например "Внесены небольшие изменения в страницу макета", чтобы использовать его в качестве примечаний к выпуску выпуска Octopus Deploy, который я создаю. Кто-нибудь знает, какую переменную я могу использовать в TeamCity, чтобы заполнить это?
Я использовал несколько параметров (vcsroot.name.url, vcsroot.url, как рекомендовано для другого вопроса), а также vcsroot.labelingMessage, но он просто вставляется в сообщение по умолчанию.
Это возможно? Было бы здорово отправить электронное письмо пользователям бизнес-теста, в котором будет точно указано, что изменилось. Затем я могу заставить разработчиков быть более информативными в отношении того, что они совершили.
3 ответа
В TeamCity нет параметра, содержащего сообщение о коммите. Вы можете получить сообщение коммита внутри вашего скрипта сборки, используя номер ревизии, хранящийся в build.vcs.number.<VCS root ID>
, Например, вот так svn log -r <revision_number> --username <user> --password <password> <url>
,
Сегодня я написал сценарий PowerShell, который делает это для git
, Я уверен, что он может быть адаптирован для SVN с минимальными усилиями.
https://gist.github.com/ChaseFlorell/716ffd1e4213ecfc8a8b
# credit for getting me going in the right direction
# http://blogs.lessthandot.com/index.php/uncategorized/access-git-commits-during-a-teamcity-build-using-powershell/
# these properties should be entered into your configuration parameters section
$project = "%Octopus.Project%"
$deployTo = "%Octopus.DefaultEnvironment%"
$buildVersion = "%BuildVersion%"
$octopusApiKey = "%Octopus.BuildDeployBot.APIKey%"
$octopusServer = "%Octopus.Server.Url%"
# these properties should already be configured for you
$vcsGitUrl = "%vcsroot.url%"
$username = "%system.teamcity.auth.userId%"
$password = "%system.teamcity.auth.password%"
$serverUrl = "%teamcity.serverUrl%"
$buildTypeId = "%system.teamcity.buildType.id%"
$buildId = "%teamcity.build.id%"
$gitPath = "%env.TEAMCITY_GIT_PATH%"
$buildNumber = "%build.vcs.number%"
$checkoutDir = "%system.teamcity.build.checkoutDir%"
function Get-TeamCityLastSuccessfulRun{
$AuthString = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("$username`:$password"))
$Url = "$serverUrl/app/rest/buildTypes/id:$buildTypeId/builds/status:SUCCESS"
$Content = Invoke-WebRequest "$Url" -Headers @{"Authorization" = "Basic $AuthString"} -UseBasicParsing
return $Content
}
function Get-CommitsFromGitLog([string] $StartCommit, [string] $EndCommit){
$fs = New-Object -ComObject Scripting.FileSystemObject
$git = $fs.GetFile("$gitPath").shortPath
$overviewUrl = "$serverUrl/viewLog.html?buildId=$buildId&buildTypeId=$buildTypeId&tab=buildResultsDiv"
$commitUrl = "$($vcsGitUrl.TrimEnd('.git'))/commit"
$Cmd = "$git log --pretty=format:""%s [%h...]($commitUrl/%H)"" $StartCommit...$EndCommit"
$Result = $(Invoke-Expression "$path $Cmd")
$nl = [environment]::NewLine
[string]$str = "#TeamCity Auto Deployment $nl" + "[click here for build overview]($overviewUrl) $nl$nl"
$Result | % {$str += " - $_ $nl"}
return $str
}
$Run = Get-TeamCityLastSuccessfulRun
$LatestCommitFromRun = (Select-Xml -Content "$Run" -Xpath "/build/revisions/revision/@version").Node.Value
$CommitsSinceLastSuccess = Get-CommitsFromGitLog -StartCommit "$LatestCommitFromRun" -EndCommit "$buildNumber"
$CommitsSinceLastSuccess > "$checkoutDir\CommitLog.txt"
$Cmd = "octo.exe create-release --apiKey=$octopusApiKey --server='$octopusServer' --project=$project --deployto=$deployTo --enableServiceMessages --progress --waitfordeployment --packageversion=$buildVersion --releaseNotesFile=$checkoutDir\CommitLog.txt"
Invoke-Expression $cmd
Я не уверен в точном вызове API прямо сейчас ( здесь должен помочь doco), но вы можете выполнить вызов TeamCity REST API с предыдущего шага сборки (через curl / powershell) и получить сведения о наборе изменений, которые есть в TeamCity. обнаруживается из VCS для текущей запущенной сборки и динамически помещает ее в параметр TeamCity через служебное сообщение. Это не зависит от вашего VCS, что, вероятно, хорошо.
Затем вы можете отправить этот параметр в Octo.exe, чтобы заполнить ваши заметки о выпуске.
Я постараюсь обновить в ближайшее время с примером вызова API...
Кроме того, вы можете взглянуть на это (бесстыдный плагин): https://github.com/BenPhegan/TeamCityBuildChanges