I need to write plugin for jira which will synchronize jira issues with external project management software.
The key requerements to the plugin to achieve the goal are:
1) Plugin should run background tasks periodically to check external app for updates.
2) Plugin will need to establish network connection, most likely keep constant connection (using native java api)
3) Plugin will need to determine exactly wchi jira entities were changed since certain time.
I would much appreciate comments on feasibility of this task and would be very greatful for all advices / useful links.
I don't think your network structure matters really. My current client runs Jira on the internet, and there are services both inside and outside the corporate network that pull data from it.
As Bob says, we try to avoid putting highly customised stuff into Jira, we prefer to let other applications pull over REST or grabbing issues as XML - this keeps upgrades and support more simple on the Jira side, and has the added advantage that we don't need our Jira developers have to undersand both ends of the procedure.
If your process can be a standalone script or program, that can make it a lot more simple, especially if you do use the Jira CLI from Bob - it lends itself to scripting and takes away a lot of the stuff you'd normally have to re-invent a wheel for when writing an interface from scratch. It makes it really easy to do things like "a script that looks for updated Jira items and sends them over to another server in format X" - get the script working, whack it into cron and you're done.
Thanks Nic, it all does make sense for me. I will definetely will take this approach into consideration. But for example if I will have many jira instances from different clients to integrate with the pm software. It's simplier to let them just to install the plugin than configuring a script.
Yes, if you've got one PM system, and several Jiras, it may seeem more easy to use a plugin. It'll work fine initially, but you could easily run into a mess when you have to maintain it as Jira moves on. With REST or XML, you'll find the data coming out of Jira remains independent of version, and the format is suprisingly stable between Jira versions.
You'd not mentioned multiple JIra instances before though, that would have swayed me more towards a plugin, but what I'm getting at is that it really is very much up to you how you do this, we're just making recommendations based on what we know.
I don't think the number of systems matters either provided you are doing roughly the same thing for each. Scripts do very well with going though a list of systems doing the same/similar things either sequentially or via threads. An advantage is that your PM systems only needs to be queried once for changes. You do need to handle situations where one or more JIRAs may be unavailable. You might also want to consider splitting incoming from outgoing perhaps with different technique for each direction.
I'm not a real developer so I don't think I'm qualified to comment on item 2 (although I don't think "a constant connection" actually makes much sense - I assume you want to log in once and then keep the session open, but that isn't "constant")
The other two are more Jira related, I would
1) Write a service, as they can be configured to run in Jira regularly
2) Inside the service, use a filter, and define it as "issues updated in the last X minutes" (and other criteria as required)
However, you could look at doing this on the other end - Jira exposes data via REST (and SOAP), and depending on what the other system needs, you could just get it to pull the data out over a RESTful connection.
I would guess you are talking about a custom environment. If so, then in my opinion, making this a JIRA plugin over complicates the situation from a development, maintenance, and operational perspective. I would only go this route if less complicated mechanisms have limitations that cannot be overcome. An external approach is more easily controlable, easier to test and debug, and can draw on existing tools. We have integrated a number of external systems (https://answers.atlassian.com/questions/21732/how-to-migrate-clearquest-to-jira/21743).
JIRA Command Line Interface provides easy access for doing JIRA things, your scripting language (like Groovy :)) can provide database access (read only for JIRA database if necessary), and you will need some technique that is dependent on the external product you are integrating with. Bamboo makes for a really nice way to run your automation with scheduling, logging and notification support.
Connect with like-minded Atlassian users at free events near you!Find a group
Connect with like-minded Atlassian users at free events near you!
Unfortunately there are no AUG chapters near you at the moment.Start an AUG
You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs