TeamCity:: Как я могу получить доступ к идентификатору сборки teamcity в Java

Идентификатор Teamcity Build (который отличается от BUILD_NUMBER) используется в разных URL-адресах. Я хочу отправить электронное письмо, имеющее путь к артефактам сборки/обзору и т.д.

В Java мы можем получить текущий номер сборки teamcity следующим образом:

String tc_BuildNumber = System.getenv("BUILD_NUMBER");

Это связано с тем, что TC предоставляет переменную окружения, а именно BUILD_NUMBER. Но, к сожалению, нет никакой переменной среды, соответствующей BUILD_ID.

TeamCity предоставляет параметры конфигурации (например, teamcity.build.id) и свойство System (например, system.teamcity.auth.userId), но я не знаю, как обращаться к ним с помощью Java. Я хочу прочитать значение teamCity.build.id jusy, как мы можем прочитать имена переменных среды, упомянутые в Как получить значение конфигурации Teamcity в java?

Ответ 1

Выполняется ли Java-код с помощью бегуна сборки?

Если это так, то вы должны передать% system.teamcity.build.id% бегуну и сделать его доступным для вашего кода.

то есть. Если вы используете бегун командной строки

java -Dbuild_id=%system.teamcity.build.id%

который затем можно получить в виде системных аргументов

Или, если вы используете gradle, вы можете сделать что-то вроде

if (project.hasProperty("teamcity")) {
    version = project.teamcity["teamcity.build.id"]
}

и передать 'версию' в командную строку java.

В maven вы можете просто получить к нему доступ, используя:

${teamcity.build.id}

в вашем pom.xml

(я мог бы сделать немного больше информации о том, как вы запускаете java для ответа на него)

Ответ 2

Да, но вы можете создать env var со значением "% system.teamcity.buildType.id%" и прочитать его в сборке. После этого вы можете выполнить запрос api, например:

$APIURL = "${API_BaseUrl}/httpAuth/app/rest/builds/?locator=buildType:${API_BuildType},state:running,count:1"

$APIXML = (Invoke-RestMethod -Headers $API_CredentialsHeader -Credential $API_Credentials -Uri $APIURL -Method GET -ContentType "application/xml" -TimeoutSec 20)
# Here you build id.
$APIXML.builds.build.id

Это пример PS. Но идея такая же. На Java это может быть проще.

Ответ 3

Я заметил, что многие люди хотят знать ответ на этот вопрос. К счастью, с помощью комментария от @Jayan я смог решить мою точную проблему, которая заключалась в том, как получить URL для сборки артефактов.

Как упоминалось в ссылке https://confluence.jetbrains.com/display/TCD10/Patterns+For+Accessing+Build+Artifacts, по умолчанию TeamCity использует Internal Build ID для пути, который можно использовать для доступа к артефактам сборки

/repository/download/BUILD_TYPE_EXT_ID/BUILD_ID:id/ARTIFACT_PATH

Доступ к идентификатору сборки может быть затруднен во время выполнения (это причина этого вопроса), но мы также можем использовать Build Number для доступа к артефактам

/repository/download/BUILD_TYPE_EXT_ID/BUILD_NUMBER/ARTIFACT_PATH

И как показано в моем номере вопроса, можно получить доступ как

String BUILD_NUMBER= System.getenv("BUILD_NUMBER");

и

String BUILD_TYPE_EXT_ID = System.getenv("TEAMCITY_BUILDCONF_NAME");

Ответ 4

Ссылка на сборку TeamCity может использовать номер сборки вместо buildID. Но для этого также требуется buildTypeId (можно увидеть в URL страницы конфигурации сборки).

Образец такой ссылки:

https://buildserver/viewLog.html?buildTypeId=Project_Trunk&buildNumber=46523

Надеюсь, это поможет кому-то.