Hello everyone,
First, this is how we are setup: we have Jira with the agile (scrum) plugin, Bamboo (+ Fecru, Confluence) and our software is in several Mercurial repositories. So, what we could have is a version that looks like this:
- OurSoftware 2.1.1
- OurProjectA 3.0.0
- OurProjectB 1.0.1
Currently, when someone commits to the default branch of a repo, Bamboo will start a build and deploy that project to the Testing servers of our TAP street. There is no version being release, only build, test, deploy. Releasing a version to Acceptation and Production servers is done manually:
- create a version in Jira, tag the tickets
- go through the Jira tickets and see what tickets are tagged with the version
- see which software projects are hit by those tickets (we comment our Mercurial commits with the Jira ticket number, so Fecru will allow us to see which commits have been done related to that ticket)
- do a Maven release:prepare and release:perform on each project that should be in the version. Depending on what has been done, we do a major, minor or bugfix release
- inform sysops which version of which which projects should be deployed to which servers
- deploy is then done manually
What I would like to have is something like this:
- create a version in Jira, tag the tickets
- release that version. For each project that is related to the tickets of this version it should fire a Bamboo build plan
- when all these plans have succeeded a Maven release:prepare and release:perform will be done. The Jira version type (major, minor, bugfix) should reflect in the Maven releases. So, if OurSoftware 2.2.0 is released, we should get these versions:
- OurSoftware 2.2.0
- OurProjectA 3.1.0
- OurProjectB 1.1.0
- if anything goes wrong, do a rollback
- if all goes well, two manual Bamboo Stages should be available that will deploy to the Acceptation and Production servers.
So, in all this, the only manual steps are: release the version in Jira. Deploy to Acceptation. Deploy to Production.
There are a few things I'm wondering about:
- how could I automate the Maven version numbering?
- if on OurProjectB the release:perform fails, ideally OurProjectB should be rolled-back to 1.0.1 and OurProjectA to 3.0.0. But, the changes made have already been committed to Mercurial and the Artifact of OurProjectA has been uploaded to our Artifactory. How would I revert these steps?
Quite a long story
I'm interested in how other people solve this. TIA!