tcWebHooks

tcWebHooks release to support TeamCity 8

Posted on

TeamCity 8 has just been released and the UI in tcWebhooks was not working correctly due to the new Internal/External Project naming changes.

Basically, the page was being redirected by Teamcity whenever you went to the edit webhooks screen. My JSP controller was looking for “projectId=project01” in the URL so it was never loading the settings into the UI.

Existing settings appeared to be fine, but editing webhooks required hacking the XML files on the server. This new release fixes that, and adds the projectExternalId value to the webhook payload.

Other than that. Webhooks appear to be firing correctly on my test server running TC8. If you find anything different, please post a comment below or on the Bugs page.

NOTE: Due to changes in the TeamCity API, this version will only work on version 8.0 and above of TeamCity.

If you’re keen to try it out, you can download it from here: tcWebHooksPlugin-0.8.29.142.zip

Advertisements

Extra tricks for sending webhooks to HipChat from tcWebHooks

Posted on Updated on

Brian asked in the comments about setting the notify flag and changing the colour of messages sent to HipChat channels from tcWebHooks.

I emailed the wonderfully responsive HipChat support and Garret from HipChat replied that those extra options are already enabled on the TeamCity endpoint. Because of that you can make use of an undocumented feature of tcWebHooks. “ExtraParmameters”

Edit the ${HOME}/.BuildServer/config/ProjectName/plugin-settings.xml file and add the following before the closing tag of your webhook(s).

       <parameters>
        <param name="color" value="red" />
        <param name="notify" value="1" />
      </parameters>

This will set the message to have a red background and play a sound when the message is posted to the channel. Note the bug below though.

I would suggest splitting up your webhook into two seperate webhooks. One as a “success” webhook and one as a “failed” webhook. Then you can then set the correct background colour based on the result of your build.

Here is a full example. Remember to set your HipChat API URL correctly.

<?xml version="1.0" encoding="UTF-8"?>
<settings>
  <webhooks enabled="true">
    <webhook url="https://api.hipchat.com/.........." enabled="true" format="nvpairs">
      <states>
        <state type="buildStarted" enabled="false" />
        <state type="buildSuccessful" enabled="false" />
        <state type="buildFinished" enabled="true" />
        <state type="buildFixed" enabled="false" />
        <state type="buildBroken" enabled="false" />
        <state type="responsibilityChanged" enabled="false" />
        <state type="beforeBuildFinish" enabled="false" />
        <state type="buildInterrupted" enabled="false" />
        <state type="buildFailed" enabled="true" />
      </states>
       <parameters>
        <param name="color" value="red" />
        <param name="notify" value="1" />
      </parameters>
    </webhook>
    <webhook url="https://api.hipchat.com/.........." enabled="true" format="nvpairs">
      <states>
        <state type="buildStarted" enabled="false" />
        <state type="buildSuccessful" enabled="true" />
        <state type="buildFinished" enabled="false" />
        <state type="buildFixed" enabled="false" />
        <state type="buildBroken" enabled="false" />
        <state type="responsibilityChanged" enabled="false" />
        <state type="beforeBuildFinish" enabled="false" />
        <state type="buildInterrupted" enabled="false" />
        <state type="buildFailed" enabled="false" />
      </states>
       <parameters>
        <param name="color" value="green" />
        <param name="notify" value="1" />
      </parameters>
    </webhook>
  </webhooks>
</settings>


Beware of a bug. Editing webhooks in the UI does not properly retain the extra parameters. I’ll fix that in the next release. Until then, you need to add them back in manually.

This is now fixed in the 0.8.27.139 release.

tcWebHooks 0.8 alpha bugfix release

Posted on Updated on

Here is a new version of the tcWebHooks 0.8 alpha.

Bug fixes:

  • buildResult was not being set for NVPAIRS format because getter and setter were missing
    NVPAIRS uses apache commons BeanUtils.describe to build the payload, and that requires getter and setters.
    The other formats use ThroughtWorks XStream which uses fields
  • Changed field buildRunner to buildRunners for NVPAIRS format. Other formats were using new pluralised field name.
  • Tidied up unused imports and variables. No more yellow triangles in Eclipse.

I’m pretty sure Jason’s comment regading the hipchat message field containing a blank build result was caused by the buildResult field missing in the NVPAIRS format.  Hopefully this will fix that message.
TODO:

  • buildStatusHtml needs to be added for ResponsibleChanged.

Download version 0.8.branch-build-25.134

As usual, please put comments below or on the bugs page.

tcWebHooks alpha release available – Now much better!

Posted on Updated on

It’s been a long time coming, but I finally got a chance to work on the tcWebHooks plugin for TeamCity.

I have an alpha release on sourceforge for download here:

The main features are:

  • buildStatusDelta information (broken, fixed, success, failure)
  • being able to trigger webhooks based on deltas (on completion).
  • buildStatusHtml field which contains an html status message containing links back to the build
  • buildStatusUrl field which contains a URL back to the build instance in case you want to roll your own links.
  • Now uses the zip file plugin format. If you are upgrading please remember to remove your old folder and jar as they are no longer required.

There are quite a few refactorings under the hood. Please backup your existing config before you upgrade because the XML format has changed and you won’t be able to roll back.

As usual, please put comments below or on the bugs page.

Here is a screen shot of the new tcWebHooks editor dialog.

It’s very very alpha at the moment. Internally it’s very different. As a result of adding these nested settings, I’ve had to change the XML format. So please please backup your config directory (folder) before installing. I have a format converter, which is unit tested, but you never know 😉
I’ve removed the “buildStatusChanged” event. It was incredibly misleading, as most people thought it was referring to historical events, rather than in build events.

To install.

  • Shutdown teamcity.
  • Remove the tcWebhooks (or whatever you called it) folder inside your .BuildServer/plugins folder
  • Backup your .BuildServer/config folder
  • Drop the new ZIP into .BuildServer/plugins/
  • Startup teamcity.
Please let me know how you get on using the comment below.

New tcWebHooks release to support TeamCity 6.5

Posted on

A new version (0.7.25.115) of the tcWebHooks plugin is available.

With the recent release of Teamcity 6.5, some assumptions I was making about the prototype javascript functions proved incorrect. I think the newer version is stricter with badly named functions, or perhaps teamcity has changed some of their internal functions on which I was mistakenly relying.

This release fixes those bugs and also fixes a long standing oversight in the lack of checking of the URL and payload formats when submitting the form. Now, when trying to add a webhook with no url or no payload format selected you are prompted before the dialog goes away. Previously, the dialog would just close and no webhook would be added. It ended up being that my jsp was not setting the content type to text/xml, so the javascript error listener was never firing.

As usual, get the latest from sourceforge. If you find a bug please leave a comment below, or on the bugs page.

New tcWebhooks bugfix release available

Posted on Updated on

A recent comment on my blog pointed out that the buildStatus field in the webhook POST payload was not accurate.

After some investigation, I noticed the the buildStatus does not get updated until after the build has been marked as “finished” by TeamCity. However, the build is not marked as finished until the plugins have run, so all builds were reporting themselves as “running”.

I have added a new field called buildResult, which gleans the result from the sRunningBuild object, rather than relying on the buildStatus returned by TeamCity.

Thanks to Lloyd for helping me work through the issues and testing. I have now uploaded a new 0.7.23.113 jar to sourceforge.

I also spotted that one field in the JSON payload was incorrectly stating that the notification was for buildStarted when in fact it was buildFinished. This has now been corrected.

Updated TeamCity WebHooks plugin available

Posted on Updated on

Version 0.6.13.11 of the tcWebHooks plugin is available for download. It’s mainly a bugfix release and some tidy up of the user interface.

Fixes:
– Fix for newly created WebHooks not being persisted to plugin-settings.xml until re-edited.
– Plugin JSPs loaded using getPluginResourcesPath(), so plugin dir can be anything, and not hard-coded to “webhook”.
– webHookUrl form input style fix for linux (or large fonts in general). URL input field was too wide for div.

Features:
– WebHook blurb updated. A new link can be added to the “Further reading” section of the blurb by adding a <info> line to the <webhooks> section of the main-config.xml
– Enabled events are now listed in Tabs and Edit pages, eg. Build Started, Build Changed Status, Build Interrupted, Build Almost Completed, Build Responsibility Changed

Links:

More Info | Download | Install and usage docs

I welcome any and all feedback.