Можно ли программно/автоматически прикрепить сборку в Teamcity? Я хочу закрепить сборку, если развертывание выполнено успешно.
Программно закрепить сборку в Teamcity
Ответ 1
Только что выяснилось, что это возможно с помощью REST API Я могу f.ex отправить команду PUT, как это http://teamcityserver:81/httpAuth/app/rest/builds/id:688/pin/ а затем будет добавлена строчка с id 688 (teamcity.build.id).
Ответ 2
Я хотел бы оспаривать принятый ответ с помощью актуального ответа, который был протестирован с помощью TeamCity 9 EAP 4 (сборка 31717) и 8.1.x.
Маркировка и привязка могут быть реализованы с помощью простого плагина, содержащего только адаптер событий, такой как:
package com.foo;
import com.intellij.openapi.diagnostic.Logger;
import jetbrains.buildServer.messages.Status;
import jetbrains.buildServer.serverSide.BuildServerAdapter;
import jetbrains.buildServer.serverSide.BuildServerListener;
import jetbrains.buildServer.serverSide.SRunningBuild;
import jetbrains.buildServer.util.EventDispatcher;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Map;
public class MyEventAdapter extends BuildServerAdapter
{
private final static Logger logger = Logger.getInstance(MyEventAdapter.class.getName());
public MyEventAdapter(@NotNull EventDispatcher<BuildServerListener> serverDispatcher)
{
serverDispatcher.addListener(this);
}
@Override
public void buildFinished(@NotNull SRunningBuild build)
{
logger.debug("#");
logger.debug("# Build finished: ");
logger.debug("# name: " + build.getBuildTypeName() + ";" +
" id: " + build.getBuildId() + ";" +
" build number: " + build.getBuildNumber() + "; " +
" owner: " + build.getTriggeredBy().getUser().getName());
logger.debug("# status: " + build.getBuildStatus());
logger.debug("# ---------------------------------------------------");
super.buildFinished(build);
if (build.getBuildStatus().equals(Status.NORMAL))
{
if (someConditionCheckWhetherToTagAndPinGoesHere())
{
final String tag = "dev";
// Pin the build:
if (build.getBuildType() != null && build.getBuildType().getLastChangesSuccessfullyFinished() != null)
{
build.getBuildType().getLastChangesSuccessfullyFinished().setPinned(true, build.getOwner(), "This is a " + tag + " build.");
}
// Tag the build:
build.setTags(build.getOwner(), Arrays.asList(tag));
}
}
}
}
Вам также понадобится контекст Spring в разделе src/main/resources/META-INF/my-plugin.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="constructor">
<bean class="com.foo.MyEventAdapter"/>
</beans>
Ответ 3
Вдохновленный ответом carlspring, я написал небольшой плагин teamcity, который программно добавляет теги в вашу сборку:
https://github.com/echocat/teamcity-buildTagsViaBuildLog-plugin
Вы можете легко изменить его, чтобы также прикрепить свою сборку. Кроме того, может быть полезно пометить ваши успешные сборки вместо их закрепления и использовать тег в качестве фильтра.
Ответ 4
Если вы хотите установить плагин, я написал тот, который может пометить и закрепить сборки программно на основе функций сборки или системных сообщений.
https://github.com/ocroquette/teamcity-autopin
Смотрите также: https://youtrack.jetbrains.com/issue/TW-38017