As developers of high-performing apps for improved productivity, our primary job before each new initiative is resolving our own productivity issues.
Recently we developed our first Cloud app that brought not just extreme pride and satisfaction but some struggles along the way. I won't lie; thanks to @Bridget, I start digging into our DevOps solutions and integrations around this first-ever Cloud product release. The result is the following interview with Yuri, a Principal Engineer who leads the Issue Matrix Cloud team. (Thanks, Yuri!)
Hearing this story for the first time reminded me of an analogy from the good ol' days. Do you remember the time when we wrote letters to our loved ones by hand? And the fascinating process of writing a letter → writing a second letter without the mistaken wording → going to the post office → buying a postmark → putting the letter in a box and hope for the best.
And that's what the whole process of releasing a Cloud app looked like to me. Pardon my comparison, but that's the best I can do. ¯\_(ツ)_/¯
Yuri shared how the integration between Bitbucket, Jenkins, and AWS saved an enormous amount of time for the whole team. Many of you know that building and deploying code for the Cloud may be quite complicated and combines a decent set of operations that need to be performed before a release.
Let's view a simple manual workflow:
Push code to Bitbucket → Run a script to assemble the build artifacts → Upload the artifacts to AWS S3 → Get a link from AWS → Login to the Atlassian Marketplace → Upload app's version through the AWS link in private mode → Navigate to your Jira Cloud Staging instance (I truly hope that you are all performing this step of the process) → Update your app with the recently created private version → Run integration tests → Keep calm and wait for the green light → Update the version to Public
Fortunately, Yuri's team was able to keep the first rule of Botron's development: resolve the productivity issues, then start building. Three DevOps integrations were needed to fully automate the building and release process.
DevOps Integration One: Bitbucket and Jenkins (Jenkins Pipelines). The purpose of this is to automatically create webhooks in Bitbucket to trigger builds, then allow Jenkins to clone/fetch from Bitbucket to run the builds.
DevOps Integration Two: Jenkins and AWS. Integration with AWS S3 to web host the application artifacts. Once you've built the proper configuration, syncing your builds to S3 will feel like a sip of fresh air, with no need to run anything in addition to running a build.
DevOps Integration Three: Jenkins, S3 and Atlassian Marketplace. The final step that uploads the metadata from S3 to the Atlassian Marketplace results in a new private version of our app, visible only to Botron's dev teams. Once the private version of our Cloud App is up and running on the Marketplace, a set of integration tests are performed in an internal Jira Cloud environment. When the lights turn green, the only manual step that left in the equation is clicking the magic button who brings our Private version to life.
Side note: the team considers automation for this one precious click, but we are still in a romantic mood, so it stays by now.
As the proverb says "Measure twice, cut once". Or measure many times, but integrate one [still valid, still ruined].
Thanks to the Cloud Team for improving our well-being 💙
Teodora VCommunity Leader
Hello folks, This is a series of articles where I explain GitHub Script with GitHub Actions and how you can automate publishing data on Atlassian & GitHub Platform based on the results of Workf...
Connect with like-minded Atlassian users at free events near you!Find an event
Connect with like-minded Atlassian users at free events near you!
Unfortunately there are no Community Events near you at the moment.Host an event
You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events