Программно закрепить сборку в Teamcity - PullRequest
10 голосов
/ 01 июля 2011

Можно ли закрепить сборку в Teamcity программно / автоматически? Я хочу закрепить сборку, если развертывание выполнено успешно.

Ответы [ 4 ]

4 голосов
/ 26 ноября 2014

Я бы хотел оспорить принятый ответ обновленным ответом, который был протестирован с 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>
4 голосов
/ 01 июля 2011

Только что выяснил, что это возможно через REST API . Я могу f.ex отправить команду PUT, например, http://teamcityserver:81/httpAuth/app/rest/builds/id:688/pin/, а затем выполнить сборку с идентификатором 688 ( teamcity.build)..id ) будет закреплен.

3 голосов
/ 11 декабря 2014

Вдохновленный ответом carlspring, я написал небольшой плагин teamcity, который программно добавляет теги к вашей сборке:

https://github.com/echocat/teamcity-buildTagsViaBuildLog-plugin

Вы можете легко изменить его, чтобы прикрепить сборку.Кроме того, может быть полезно пометить ваши успешные сборки вместо закрепления и использовать тег в качестве фильтра.

0 голосов
/ 19 февраля 2018

Если вы хотите установить плагин, я написал тот, который может программно маркировать и закреплять сборки на основе функций сборки или системных сообщений.

https://github.com/ocroquette/teamcity-autopin

Смотри также: https://youtrack.jetbrains.com/issue/TW-38017

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...