Child pages
  • Visual Studio Online Team Rooms Notifier
Skip to end of metadata
Go to start of metadata

General Info

Author

Evgeniy Koshkin

License

Apache 2.0

Type

free, open-source

Plugin Description

Allows sending notifications from the TeamCity server to Visual Studio Online team rooms.

Plugin Development Status

Experimental. Stable.

Download

The latest successful build is available on the public TeamCity server. Compatible with TeamCity 8.1.x+

Installation

  1. Put vso-rooms.zip into the <TeamCity Data Directory>/plugins folder.
  2. Restart the server.

The notifier is disabled after the plugin installation. You can enable it on the Administration | VS Online Notifier page.

Configuration

Users are required to enable alternate credentials in their Visual Studio Online account.

To send notification messages, a user account in Teamcity is required. A separate account for notifications is recommended.
The following information needs to be provided on the Notification Rules | VS Online notifier page for the specified user account:

  • the Visual Studio Online account
  • the target Team Room
  • the user's credentials to connect to the room (the alternate credentials specified in Visual Studio Online earlier).

(info) Notifications on a particular event sent by several users to the same room will be merged.

After testing and saving the connection settings, you can configure notification rules defining what to watch an when to send notifications.

When the rule is saved, TeamCity will send notifications to the configured Visual Studio Online Team Room as events happen.

See the related blog-post for step-by-step instructions .

The sources and issues on GitHub.
Builds at the JetBrains public TeamCity instance.

  • No labels

4 Comments

  1. This plugin isn't working with version 9.1.1 of teamcity. I get these exceptions in the server logs:

     

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jetbrains.buildServer.vsoRooms.notificator.VSONotificator#0' defined in plugin: vso-rooms#vso-rooms-server.jar!/META-INF/build-server-plugin-vso-rooms.xml: Unsatisfied dependency expressed through constructor argument with index 2 of type [jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder]: : Error creating bean with name 'jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder#0' defined in plugin: vso-rooms#vso-rooms-server.jar!/META-INF/build-server-plugin-vso-rooms.xml: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: jetbrains.buildServer.notification.FreeMarkerHelper.getConfiguration(Ljetbrains/buildServer/serverSide/SBuildServer;)Lfreemarker/template/Configuration;; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder#0' defined in plugin: vso-rooms#vso-rooms-server.jar!/META-INF/build-server-plugin-vso-rooms.xml: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: jetbrains.buildServer.notification.FreeMarkerHelper.getConfiguration(Ljetbrains/buildServer/serverSide/SBuildServer;)Lfreemarker/template/Configuration;

            at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:747)

            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)

            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1115)

            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)

            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)

            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)

            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)

            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)

            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)

            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

            at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:706)

            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762)

            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)

            at jetbrains.buildServer.plugins.spring.SpringPluginLoader.pluginClassesLoaded(SpringPluginLoader.java:95)

            at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source)

            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

            at java.lang.reflect.Method.invoke(Method.java:497)

            at jetbrains.buildServer.util.EventDispatcher.dispatch(EventDispatcher.java:120)

            at jetbrains.buildServer.util.EventDispatcher$2.invoke(EventDispatcher.java:67)

            at com.sun.proxy.$Proxy17.pluginClassesLoaded(Unknown Source)

            at jetbrains.buildServer.plugins.PluginManagerImpl$2.visitPlugin(PluginManagerImpl.java:137)

            at jetbrains.buildServer.plugins.PluginsCollection.foreachLoadedPlugins(PluginsCollection.java:222)

            at jetbrains.buildServer.plugins.PluginManagerImpl.firePluginClassesLoaded(PluginManagerImpl.java:135)

            at jetbrains.buildServer.plugins.PluginManagerImpl.loadPlugins(PluginManagerImpl.java:81)

            at jetbrains.buildServer.web.plugins.PluginManagerConfigurator.initializePlugins(PluginManagerConfigurator.java:9)

            at jetbrains.buildServer.web.impl.BuildServerConfigurator.loadConfiguration(BuildServerConfigurator.java:27)

            at jetbrains.buildServer.maintenance.TeamCityDispatcherServlet$WebApplicationCreatorAndDestroyer.createApplication(TeamCityDispatcherServlet.java:14)

            at jetbrains.buildServer.maintenance.StartupProcessor.doApplicationStarting(StartupProcessor.java:60)

            at jetbrains.buildServer.maintenance.StartupProcessor.processConcreteStage(StartupProcessor.java:443)

            at jetbrains.buildServer.maintenance.StartupProcessor.processConcreteStageSafe(StartupProcessor.java:694)

            at jetbrains.buildServer.maintenance.StartupProcessor.processTeamCityLifecycle(StartupProcessor.java:202)

            at jetbrains.buildServer.maintenance.StartupProcessor.access$000(StartupProcessor.java:285)

            at jetbrains.buildServer.maintenance.StartupProcessor$1.run(StartupProcessor.java:2)

            at java.lang.Thread.run(Thread.java:745)

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder#0' defined in plugin: vso-rooms#vso-rooms-server.jar!/META-INF/build-server-plugin-vso-rooms.xml: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: jetbrains.buildServer.notification.FreeMarkerHelper.getConfiguration(Ljetbrains/buildServer/serverSide/SBuildServer;)Lfreemarker/template/Configuration;

            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:278)

            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1115)

            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)

            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)

            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)

            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)

            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)

            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)

            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

            at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1021)

            at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:964)

            at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:862)

            at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:811)

            at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:739)

            ... 33 more

    Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: jetbrains.buildServer.notification.FreeMarkerHelper.getConfiguration(Ljetbrains/buildServer/serverSide/SBuildServer;)Lfreemarker/template/Configuration;

            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164)

            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:125)

            at jetbrains.buildServer.spring.InstantiationStrategySelector$1.instantiate(InstantiationStrategySelector.java:77)

            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:270)

            ... 46 more

    Caused by: java.lang.NoSuchMethodError: jetbrains.buildServer.notification.FreeMarkerHelper.getConfiguration(Ljetbrains/buildServer/serverSide/SBuildServer;)Lfreemarker/template/Configuration;

            at jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfig.<init>(VSONotificatorConfig.java:69)

            at jetbrains.buildServer.vsoRooms.notificator.VSONotificatorConfigHolder.<init>(VSONotificatorConfigHolder.java:33)

            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

            at java.lang.reflect.Constructor.newInstance(Constructor.java:422)

            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)

            ... 49 more

     

  2. I also see usage of an undocumented class in this plugin: jetbrains.buildServer.controllers.admin.NotifierSettingsTab. Google yields no docs for this class.

    1. David, thanks for your comments, I'll forward your questions to our developers. The forum is actually a better place to ask for assistance, this section is more suitable for comments on the documentation.

  3. David, please make sure you installed the plugin correctly. Please follow these instructions. Please send further questions, details to me via e-mail evgeniy dot koshkin at jetbrains dot com.