¿Es posible anclar una compilación en Teamcity programáticamente/automáticamente? Quiero anclar una compilación si Deploy-build tiene éxito.Fijar progresivamente una compilación en Teamcity
Respuesta
acabo de enterar que su posible a través de la REST API puedo f.ex enviar un comando PUT como esto http://teamcityserver:81/httpAuth/app/rest/builds/id:688/pin/ y luego la acumulación con id 688 (teamcity.build.id) será fijado.
Me gustaría desafiar la respuesta aceptada con una respuesta actualizada, que se probó con TeamCity 9 EAP 4 (compilación 31717) y 8.1.x.
etiquetado y la fijación podrían implementarse a través de un plugin simple que contiene sólo un adaptador de eventos tales como los siguientes:
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));
}
}
}
}
También debes tener un contexto primavera bajo 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>
Inspirado por la respuesta de carlspring, escribí un pequeño plugin teamcity que agrega etiquetas programáticamente a tu compilación:
https://github.com/echocat/teamcity-buildTagsViaBuildLog-plugin
Puede modificarlo fácilmente para fijar también su construcción. Además, puede ser útil etiquetar las construcciones exitosas en lugar de fijarlas y usar la etiqueta como filtro.
El complemento requiere que coloque algo en su registro de compilación para que funcione, esto podría haberse hecho simplemente con una llamada rizada desde un paso de compilación. 'curl --user $ {username}: $ {password} -X POST --data" $ {tags} "% teamcity.serverUrl%/httpAuth/app/rest/8.0/builds/id:% teamcity.build .id%/tags --header "Content-Type: text/plain" ' De hecho, se puede hacer un metarunner a partir de la llamada curl anterior y etiquetar ejecutando compilaciones desde un paso de compilación. Jetbrains incluso tiene un paquete de energía metarunner que tiene un metarunner similar que usa hormiga. – Amit
Una forma de salir de la caja es utilizar la API REST, como lo menciona Amit en un comentario.
Si está dispuesto a instalar un complemento, escribí uno que puede etiquetar y crear pernos mediante programación en función de las funciones de compilación o los mensajes del sistema.
https://github.com/ocroquette/teamcity-autopin
Consulte también: https://youtrack.jetbrains.com/issue/TW-38017
- 1. Etiquetar una compilación en TeamCity desde otra compilación
- 2. Registro de compilación de Teamcity
- 3. ¿Cómo implementar después de una compilación con TeamCity?
- 4. TeamCity no puede encontrar artefactos después de una compilación
- 5. ¿Puedo cancelar una compilación de TeamCity desde mi script msbuild?
- 6. Agente de compilación de TeamCity desconectado
- 7. TeamCity, pasando una ID generada en un paso de compilación a un paso de compilación posterior
- 8. TeamCity: haciendo referencia a un número de compilación desde una configuración de compilación diferente
- 9. Crear configuración de compilación mediante REST en Teamcity
- 10. Usuario de correo electrónico que destruyó la compilación en Teamcity
- 11. Caché Contenido descargado progresivamente en MPMoviePlayerController
- 12. ¿Alguien sabe de un proveedor de compilación de TeamCity alojado?
- 13. Teamcity: Pase el parámetro de entorno a la compilación dependiente
- 14. ¿Cómo puedo mejorar el rendimiento de compilación de Teamcity?
- 15. Cómo recombinar construcciones en TeamCity?
- 16. Usando MBUnit en TeamCity
- 17. ¿Cómo hago que una compilación de TeamCity aparezca en TFS Build Explorer?
- 18. ¿Cómo realizo una compilación en mi feed público de TeamCity NuGet?
- 19. Cómo mostrar una ImageView progresivamente de arriba a abajo
- 20. Mejorar progresivamente la tabla HTML con jqGrid?
- 21. Corredor de compilación de línea de comando de TeamCity: ¿Cómo hacer que falle la compilación?
- 22. fijar condicionalmente clase CSS
- 23. Hacer que el paso de compilación de TeamCity FxCop cause un error de compilación si se infringe una regla
- 24. TeamCity Extrayendo artefacto Dependencias
- 25. TeamCity - agentes múltiples en una máquina? ¿Posible?
- 26. Combinación de artefactos en TeamCity
- 27. ¿Cómo hacer que falle una compilación de TeamCity (tiempo de espera) si tarda demasiado?
- 28. ¿Es posible obtener el registro de construcción sin formato de una compilación de TeamCity?
- 29. ¿Cómo analizo el resultado de msdeploy y fallo una compilación de TeamCity si hay errores?
- 30. msbuild no crea artefactos en teamcity
¿Cómo se contrae alrededor de autenticación? La API REST está protegida por usuario/contraseña ... – RickardN
@RickardN: Puede usar guestAuth: 'http: // YourServer: Port/guestAuth/app/rest/builds/id: 688/pin /'. Sin embargo, sería muy cauteloso con los permisos que permite bajo autenticación de invitado. –