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

Другие вопросы по тегам