Continuous deployment of a static website with Bitbucket Pipelines

By on April 24, 2017

Guest post

This guest post was written by David Von Lehman from Aerobatic, a simple yet powerful solution for static website publishing.

In this blog post we’ll look at how to use Bitbucket Pipelines to automatically build a website using a static site generator. This example will use Jekyll, but the same formula will work with any generator including Hugo, Middleman, Pelican, Gatsby, and many more. We’ll automatically deploy the built site to Aerobatic, a dedicated static website hosting platform. Finally we’ll explore how to combine the capabilities of Bitbucket, Pipelines, and Aerobatic to enable a production release workflow based on branches and pull requests that is optimized for teams.

Step 1 – Create new Jekyll site in Bitbucket

Create a new Jekyll site locally. We can do this by simply running the jekyll create command.

$ jekyll create
$ bundle install

To verify the site builds correctly locally, you can run jekyll serve and take a look at http://localhost:4000.

Now that we have a website, create a Bitbucket repo and push up the code. Our sample repo is named jekyll-pipelines. The full source code available at https://bitbucket.org/aerobatic/jekyll-pipelines.

$ git init
$ git remote add origin ssh://git@bitbucket.org/BitbucketUser/jekyll-pipelines.git

Make sure the _site directory appears in the .gitignore file. Since Bitbucket Pipelines will be building the site from scratch, we don’t want the build output in source control.

Ok, now go ahead and push to your repo:

$ git push -u master

Step 2 – Setup Aerobatic

In this tutorial, we’ll be deploying our Jekyll site to Aerobatic, a specialized static website hosting service. It just takes a minute to get up and running:

Now we need to create an Aerobatic website for this repo. At the root of the project run the following command:

$ aero create --name jekyll-pipelines

To keep things consistent, I’m naming the website the same as the repo. This will create a file called aerobatic.yml that you’ll want to commit to Git.

Before running the pipeline, we need to set the AEROBATIC_API_KEY Pipelines environment variable. Environment variables can be set either at the repo level or the account level. We recommend setting it at the account level so you don’t have to repeat this step for future projects.

Retrieve your API key by running the following:

$ aero apikey

Paste it into the value box and click the Secured box.

Step 3 – Create bitbucket-pipelines.yml

Now we need to configure Bitbucket Pipelines to build our Jekyll site whenever a push is made. First make sure to enable Bitbucket Pipelines on your repo and create a new bitbucket-pipelines.yml file. Since Jekyll is Ruby based, we’ll want to specify a Docker image that has Ruby and Bundler already installed. Aerobatic has published an image to Dockerhub called aerobatic/jekyll that has Ruby already installed along with the necessary low-level libraries required to build most native gem extensions. You can checkout the Dockerfile at https://github.com/aerobatic/docker/blob/master/jekyll/Dockerfile.

Speaking of Docker, there are 3 Aerobatic images available on Dockerhub: aerobatic/jekyll, aerobatic/hugo, and aerobatic/node. Each is based off the ultra-small Alpine base image and has the aerobatic-cli pre-installed avoiding each Pipelines build from having to npm install it from scratch.

Here’s the entire bitbucket-pipelines.yml file:

image: aerobatic/jekyll
clone:
  depth: 1
pipelines:
  default:
     - step:
         script:
           - '[ -f Gemfile ] && bundle install'
           - 'echo "url: https://__baseurl__" >> _config.yml'
           - bundle exec jekyll build
           - aero deploy --directory _site

The script section is the actual set of commands that will be carried out inside the provisioned Docker container.

  1. The first line with run bundle install if a file named Gemfile exists (which in our case it will).
  2. The second line appends a value to the _config.yml overriding the url config setting. Even if the URL is defined earlier in the file, Jekyll will take the last value. The value “https://__baseurl__” is a special value that Aerobatic will replace at runtime with the appropriate site URL.
  3. Next run bundler to build the site
  4. Finally deploy to Aerobatic by running aero deploy. The –directory site option tells it that the files to deploy are located in the _site directory where Jekyll wrote the generated site to. Normally aero is installed by running npm install aerobatic-cli -g, but since we are using the aerobatic/jekyll image, it is already present.

Step 4 – Trigger a build

That’s it for setup, now let’s trigger a build. Commit the bitbucket-pipelines.yml to your repo and that should trigger your first build. If all goes according to plan the log output will look like this:

And just like that, you have a first class git push based deployment workflow for your website. With this setup it’s even possible to use the browser editor to make content updates or author simple blog posts without ever leaving Bitbucket.

Deploying with pull requests

The simple workflow above works great for a site where one or two people maintain the site. But what about a larger team with multiple developers, content contributors, and stakeholders? In agile software development projects, Git pull requests have emerged as the preferred workflow for promoting changes through a series of deploy stages culminating in production. With Bitbucket Pipelines and Aerobatic, this same workflow is easily achieved for static website deployments. Let’s assume the same repository structure suggested in the Bitbucket Pipelines guides:

master Your integration branch
staging Use this branch to trigger deployments to staging
production Use this branch to trigger deployments to production
features/xxx All feature branches

 

In addition to the production instance of the website, we also need a staging instance. Aerobatic provides a feature called deploy stages that makes this really easy – just pass a –stage option to the aero deploy command.

$ aero deploy --stage staging

This command above will deploy the build output to a URL https://jekyll-pipelines–staging.aerobatic.io. In the bitbucket-pipelines.yml we use branch workflows to configure a different target stage for the production and staging branches:

image: aerobatic/jekyll
clone:
 depth: 1
pipelines:
 default:
   - step:
       script:
         - '[ -f Gemfile ] && bundle install'
         - 'echo "url: https://__baseurl__" >> _config.yml'
         - bundle exec jekyll build
 branches:
   master:
     - step:
         script:
           - '[ -f Gemfile ] && bundle install'
           - 'echo "url: https://__baseurl__" >> _config.yml'
           - bundle exec jekyll build
           - aero deploy --directory _site
   staging:
     - step:
         script:
           - '[ -f Gemfile ] && bundle install'
           - 'echo "url: https://__baseurl__" >> _config.yml'
           - bundle exec jekyll build
           - aero deploy --directory _site --stage staging

NOTE: The Aerobatic free plan is limited to shared *.aerobatic.io domains, but deploy stages also work with custom domains available on the Pro Plan.

Now the workflow becomes:

Using Bitbucket permissions you can lock down the workflow to whatever degree you like. For example, you can require that staging and master branches must be updated via pull requests, and specify which users have permissions to approve pull requests. A good rule of thumb is to allow everyone to merge to staging, but only senior personnel to update master (and by extension, deploy to production). The screenshot below shows this configuration:

See the Bitbucket Pipelines docs for more details on configuring branch permissions.

Protecting the staging URL

One lingering detail is preventing the general public from stumbling across the staging site URL. This can be addressed via the Aerobatic password-protect plugin that is declared in the aerobatic.yml file:

id: b74e6fb8-e747-4fb4-bd1b-1f92804ace5c
deploy:
 ignore: []
 directory: .
plugins:
 - name: password-protect
   stages: [staging]
   options:
     password: $PASSWORD
 - name: webpage

The stages property specifies that the password-protect plugin only applies for https://jekyll-pipelines–staging.aerobatic.io. More details can be found at https://www.aerobatic.com/blog/password-protect-a-jekyll-site/.

Content as Code

Over the last several years there has been a trend within DevOps to manage as much of a software system, including the configuration settings and infrastructure definition, as plain text files committed to version control right alongside the rest of the source code. You may have heard the terms “Configuration as Code” or “Infrastructure as Code” that refer to this approach. Aerobatic encourages the practice via the aerobatic.yml file which defines metadata, deploy settings, and runtime behaviors (such as plugins) for the website.

There’s a strong argument to be made that this same practice should apply to website content including markdown files, images, etc. Rather than locking content up in a CMS database with its own proprietary mechanisms for backups, auditing, history, approvals, etc., just put it in Git or Mercurial and treat it like any other source asset. With the deployment workflow described above, you’ll then have a universal build pipeline regardless of whether the change was committed by a developer or a content contributor.

Now this does present a paradigm shift for content editors that are accustomed to a less techie CMS interface. Fortunately there are a new breed of CMS tools and services that bridge the gap – providing a friendly editing interface but using version control as the underlying data store.  Examples include CloudCannon, Forestry.io, DatoCMS, kirby, and other flat-file CMSes.

Doing More with Plugins

The password-protect plugin is just one of many plugins offered by Aerobatic that provide enhanced functionality beyond what is possible with vanilla static hosting. All plugins are configured in the aerobatic.yml file. Some other popular plugins include:

Conclusion

That’s it – we now have a first rate team based deployment workflow complete with private staging environment, streamlined approval workflow, and fully automated deployments – all with no infrastructure to maintain and no DevOps engineering. Everything is being treated “as code”, safely stashed away in Bitbucket where pull requests, branches, history tracking, and all the other benefits afforded by version control can be applied. This includes the site html, templates, css, JavaScript, configuration, and content.

This same setup works not only with static site generators like Jekyll or Hugo, but also sophisticated single page web applications such as React or Ember. You can learn more about continuous deployment of static sites with Aerobatic and Bitbucket over on the Aerobatic blog.

Happy coding (and deploying)!

Bitbucket Pipelines now supports building Docker images, and service containers for database testing

By on April 18, 2017

Bitbucket Pipelines gets advanced Docker support

We developed Pipelines to enable teams to test and deploy software faster, using Docker containers to manage their build environment. Now we’re adding advanced Docker support – building Docker images, and Service containers for database testing.

Try Bitbucket Pipelines

Companies love delivering their applications using Docker. According to Forrester, 30% of enterprise developers are actively exploring containers, and Docker is the dominant DevOps tool, with 35% of organizations adopting it, according to a recent RightScale survey. Docker provides a painless method of building and deploying applications as a set of independent microservices, which are scalable and resilient.

We developed Pipelines to allow all teams to test and deploy their software faster, using Docker containers to manage their build environment. Teams save countless hours and headaches by avoiding manual build server configuration, choosing instead from the enormous range of publicly available containers on Docker Hub, or bringing your own Docker image for a custom build environment.

“Software development teams need to move fast, which is why so many are turning to Docker. As companies embrace continuous delivery, testing becomes a crucial part of the development process, not an afterthought. By adding support for Docker in Bitbucket Pipelines, Atlassian is delivering modern software development tools and processes for continuous delivery. With Bitbucket Pipelines, there’s no need to switch to another application to use Docker containers for testing software, and no need to juggle permissions and access, or set up build servers.”
Nick Stinemates, VP of business development and technical alliances, Docker

We’re thrilled to announce support for building Docker images and Service containers in Bitbucket Pipelines. 

Use Bitbucket Pipelines to build, tag and push Docker images

Starting today, you can build your application as Docker containers, benefiting from the portability and minimal overhead of containerization. No need to install an additional plugin or run your own Docker service like in Jenkins or other legacy CI systems – just enable with 2-lines in your bitbucket-pipelines.yml and it just works.

This seamless Docker integration facilitates a whole new set of workflows for Bitbucket teams, including:

Bitbucket is now the only tool your team needs to code, build, test and deploy your applications in the cloud, covering the full lifecycle for teams building with microservices.

“With the ability to build Docker images, we’re able to build and deploy to AWS ECS all from within Bitbucket Pipelines. We were able to accomplish the same workflow that took us 50 hours of Jenkins configuration in only 5 minutes and 15 lines in Bitbucket Pipelines.”
Bernie Lees, CEO at DCBL

Service containers in Bitbucket Pipelines enable flexible container-based testing

Setting up integration testing with a database or other dependency on your build server is usually a mess of configuration files. You might even need to configure additional agents or build Amazon AMI images to get the dependencies up and running for your build. Docker has the potential to make that so much easier, with thousands of pre-built images for commonly used software like MySQL and Redis, and standardized configuration through environment variables.

Today we’re excited to announce service containers for Bitbucket Pipelines, bringing the power of Docker to your test environment configuration. You can now run up to three background services in your pipeline, in addition to your build container, using your own Docker images or any of those available on Docker Hub. This makes it a breeze to set up integration testing with databases like MySQL or PostgreSQL or run other common services like ElasticSearch or memcached.

There are several benefits to how service containers work in Pipelines:

“With Docker and service containers, we now rely on Bitbucket Pipelines for our entire continuous deployment strategy. We can go from a developer pushing to Bitbucket, code tested in Pipelines, deployed to AWS, and live on staging within 5 minutes for the API and less than a minute for web apps and support systems.”

– Chris Knight, CTO at Hevnly, a U.K.-based iOS app that helps individual discover and buy lifestyle products.

Bitbucket Pipelines service containers

 

Why switch to Bitbucket Pipelines from your legacy build server?

We talk with many companies who are still using legacy build servers like Jenkins and struggling with three big challenges:

  1. Teams spend a lot of time on manual build configuration and managing build agents. This maintenance can be a huge cost to the teams, often including several full time build engineers for larger dev teams.
  2. Using a separate build server presents a big speed bump for developers who need to switch contexts frequently between code and build during their day-to-day work.
  3. The team doesn’t have full control over deploying their releases, leading to manual release steps that are error-prone, encourage riskier less-frequent releases, and slow down the feedback loop between the team and their users.

With integrated Pipelines for continuous integration and delivery (CI/CD), Bitbucket solves these problems and helps your team move faster. Pipelines sits within your codebase and removes the barrier between the team, the code, and the configuration. The configuration is simple and lives in your code, versioned and managed alongside your application.

Bitbucket Pipelines vs Jenkins

With Bitbucket Pipelines, there’s no need to switch to another application, no need to juggle permissions and access, or set up build servers – and thanks to our cloud infrastructure you get unlimited concurrent builds.

Haven’t tried Bitbucket Pipelines?

If you haven’t given Bitbucket Pipelines a try, we’ve extended free build minutes for Pipelines so you can try for free. As always, please tell us what you think of this feature by tweeting @Bitbucket Pipelines.

Try Bitbucket Pipelines

Have more specific questions about this post? Reach out to us on Twitter to get the information you need. 

New integration: Bitbucket Cloud Power-Up for Trello

By on April 13, 2017

New integration with Bitbucket Cloud and Trello has arrived

Attach branches, commits and pull requests to Trello cards, create new branches from cards, and view pull request and build statuses on cards with the new integration. To keep the whole team informed at a glance, start by signing up for Bitbucket, and add the Power-up in Trello.

Get started, it’s free

In case you haven’t heard, Bitbucket has a new family member: Trello. Software teams use Trello to plan and track work via boards, lists, and cards in a flexible way. We have many teams on Bitbucket Cloud who use Trello because it is super fast and easy to get started, great for ad hoc work, and perfect for Kanban, but one thing was missing for these teams: the ability for the whole team to see development status updates in Trello boards and quickly bounce between Trello and Bitbucket.

In order to maximize productivity for these teams who want to see their work at a glance, we launched a Bitbucket Cloud Power-Up for Trello. Let’s take a deep dive in to how to get the most out of the new Trello integration.

Bitbucket Cloud Power-up for Trello

In Trello, Power-Ups give users the ability to make Trello boards functional and customizable. For a software team, Power-Ups move a project forward by keeping all team members in the know. With the new Bitbucket Popwer-Up, you can now alert fellow developers, product managers, designers, etc. on development progress with branches, pull requests, builds and commits on Trello cards. When it’s time to go from product planning to development, the Bitbucket Cloud Power-Up allows you to:

Connect Bitbucket and Trello

There is more on the way for a stronger Bitbucket and Trello integration, but this Power-up is a good start to cut out the back and forth and stay in sync on development progress.

If you’re already a Bitbucket and Trello user, head to your Trello board and add the Bitbucket Power-Up. If you’re new to Bitbucket and want to take this integration for a spin, get started here.

Get started, it’s free

Have more specific questions about this post? Reach out to us on Twitter to get the information you need.

Bitbucket Cloud gets a new navigation experience

By on April 11, 2017

A good user interface gets out of the way and makes it easy for teams to understand, focus on, and complete their work. We’ve been listening to our users on how to improve the navigation of Bitbucket Cloud’s UI and have been hard at work for over a year to address the feedback. Today we’re taking the first step in improving Bitbucket Cloud’s UI and launching a new navigation experience

As part of this new UI, we’ve streamlined navigation to create a more intuitive, warm, and inviting interface. Let’s take a deeper look at how we arrived at this new design, what it looks like and how you can enable it.

How did we land on this new design?

One of the best signals we have to understand our customers is NPS (Net Promoter Score) feedback. We pulled a research team together to sift through thousands of NPS responses to find common pain points and opportunities for improvement. One recurring theme we found was “complexity” – clearly a problem, but tough to address without breaking it down further. So, we conducted qualitative interviews and narrowed down areas of improvement to address perceived complexity:

  • Wayfinding and architecture – Historically Bitbucket has used many interaction patterns for navigation: top bar menu, search box, sidebar, omni-bar, and tabs (oh my!). That’s led to a frustrating user experience when finding features and getting around. To cut out the visual noise and distractions, we’ve combined global and repository-level navigation into the left sidebar. The dashboard and search menus let you quickly jump between all repos, pull requests, and issues you need to manage.

Before

    After

  • Look and feel – Users had feedback about Bitbucket’s fluid width, iconography, lack of color and whitespace. They expected an easy to use and cohesive experience that surfaced the right information at the right time. With the new nav, we removed clutter, use flashes of color and clear iconography to accentuate the important bits. These new interactions are more considerate, straightforward, and guide you to the next step. We’ve got more to do on this front to make the entire Bitbucket experience more consistent and simpler, but we’re excited about this start!

Before

After

  • Repository navigation – This was unintuitive because icons were not easily understood. There were too many options and the mix of actions and navigation made it difficult to parse. As part of the UI cleanup, we wanted to remove as many of the hurdles between you and your work as possible. To simplify, we’ve grouped repo actions with other actions in the create (plus) menu and kept navigation simple.

Before

After

How did we test the new UI?

We’ve been testing our design direction from the beginning with actual users to validate and stay on track. Usertesting.com was hugely helpful for early signal testing and getting quick qualitative feedback from real users. Building on those positive results, we shipped an initial implementation in Bitbucket in October 2016 to our internal Bitbucket dev team.

Since then, we’ve expanded from just the Bitbucket dev team to hundreds of users, integration partners, and Atlassians and have received overwhelmingly positive feedback. Any UI change, especially one as large as adopting a new navigation paradigm, involves tough calls and tradeoffs. Based on our research and testing, we’re optimistic that people will intuitively understand the new layout and be even more productive with Bitbucket.

I want the new Bitbucket experience! How do I get it?

This initial roll out is just the beginning. We’ve started with navigation, updated bitbucket.org, and changes are now starting to flow in to product.

Now after all this testing, it is time to get feedback on a larger scale. We are rolling it out to 1% of our active user base so some of you will already have this experience in your current Bitbucket account. Just click the “Give feedback” link in the sidebar – we’re listening.

If you can’t wait to try the new UI, you can still turn it on! Visit the Labs page and enable “Bitbucket UI refresh”. If you’re not already a Bitbucket user, sign up for Bitbucket to give it a try. Give us feedback and we hope you love the new UI as much as we do.

Get started, it’s free

Have more specific questions about this post? Reach out to us on Twitter to get the information you need.

Bitbucket Cloud: free for student developers and teachers

By on April 3, 2017

There are many things a student developer needs to worry about during their college life, but knowing where to store their labs, projects and assignments shouldn’t be one of them. Bitbucket Cloud has offered free unlimited repositories and unlimited collaborators for some time, and now we’ve streamlined the process of getting an academic account. It’s easier than ever for both students and teachers to get started and store, collaborate on, and distribute their classwork using Bitbucket Cloud.

Get up and running with Git, all in the cloud

No more USB drives, emails, or FTP’ing to your college servers for your classwork. You can easily set up repositories for each of your labs or classes with Bitbucket. Better still, your code is hosted in the cloud so you can access your classwork on any machine, anywhere you are. Want to keep your work private, away from prying eyes? We’ve got you covered. With unlimited private repositories you can control who can view your work and only give access to those who need it.

And by using Git you’re getting a head start on your career by learning to use the industry standard for version control. What’s there not to like?

Sharing is caring

Perhaps you need to collaborate on a group project with your team, or give repository access to your professor or TA for grading? Academic accounts on Bitbucket include unlimited collaborators making it easy to do all that and more. Our aim is to make the process of working with your teachers and peers as easy as possible.

Free Academic accounts for all students and teachers

Best of all, Academic accounts on Bitbucket are free. That’s right, free as in beer… without the age requirement of course! To get free unlimited repositories and collaborators, all you need to do is sign up for a Bitbucket account with your academic email address (e.g. stanford.edu). We’ve automated the process so when you sign up you’ll instantly be given an Academic account. And don’t worry if it’s not automatic – simply fill out this form and our team will get you up and running in no time. We’re always adding approved academic institutions to our list, so over time we hope to have this process automated for as many institutions as possible.

Share and win!

We’re excited to help student developers all over the world learn, collaborate and share their code with Bitbucket Cloud, and we want you to help spread the word. Share our student developer page with your friends on Twitter and Facebook and be in the running to win some sweet swag. Don’t forget to use the hashtag #bitbucketedu so we can keep track!


Join our ambassador program

As we expand our student initiatives we’re proud to announce our upcoming student ambassador program. If you’re interested in learning more about Git, love attending events, and exploring opportunities for your peers and universities, then we’d love to hear from you. Register your interest here and we’ll be in touch!

Get started today

Edit history with Mercurial Evolve (Beta) in Bitbucket Cloud

By on March 28, 2017

Mercurial patch queues (MQ), even though they are deprecated, have long been the only way to share your not-yet-ready-to-land commits via Bitbucket. Patch queues have a long history of being thorny to use because they were developed for version control techniques that have been out of date for quite some time. Rising from the ashes of Mercurial patch queues and forged from the painful experience of “git push -f”, we are launching evolve in hopes of providing a better experience for Mercurial users. 

What does this mean for you? You’ll be able to edit the history for a pull request before merging it. You can rebase, if that’s your fancy. Plus, this paves the road for us to enable new merge options, like our new squash merge in pull requests.

Where to get evolve

After calming down a bit, it’s important to note that evolve is still in Beta in both Mercurial and Bitbucket. To facilitate rolling out this Beta feature as we do our other features in Bitbucket, we decided to write an extension to make integrating Mercurial’s configuration with our per-user labs settings. I call this magic hgenvconfig – a very simple extension that even has tests! (For the technically curious: the way “hgenvconfig” works is by adding our per-user configuration to an environment variable. Our Mercurial extensions and hooks are then able to read from this variable by the fact that subprocesses inherit environment variables from the main thread.)

With this extension, we were able to add evolve to our lab settings so we can help get evolve hardened for all Mercurial users. Our hope is that as this gets more testing, evolve will move out of experimental status in Mercurial. We need your feedback on terminology, UX, and bugs (of course). To start using it, first install evolve by running “pip install hg-evolve” then head to your account settings, Bitbucket Labs, and enable Mercurial Evolution Support.

Getting the most out of evolve

How is evolve different from “git push -f”? For starters, “git push -f” behaves just like your favorite FTP server: last one to write wins. In contrast, Mercurial marks commits as “replaced” by using an append-only store. Let’s see how this works (without getting too technical here):

Figure 1: unsafe history modification with core Mercurial (not using evolve): the original revision 1 is destroyed, similar to git when the reflog is cleaned.

Figure 2: safe history modification using evolve: the original revision 1 is preserved as an obsolete changeset providing more history than git. (The “temporary amend commit”, marked with T, is an implementation detail stemming from limitations in Mercurial’s current merge machinery. Future versions of Mercurial will not create them.)

Similar to “git push -f”, evolve is an advanced feature and editing history is tricky. Evolve is built on the Mercurial concept of phases. In preparation for evolve a little while ago, I switched the default state of new Mercurial repositories to be non-publishing (e.g. draft commits by default).

To get the most out of evolve, make sure to read up on the evolve concept of unstable. Simply put, this is analogous to a “rebase” that is in-progress. It represents, as the name suggests, an unstable state of your repository and should be used carefully. If you stick to “rebase” and “histedit” commands, then it should be rare to end up in this state and be safe to use.

Evolution ain’t easy

In order to help make features like this accessible to the community in the future, including through further development of the Mercurial platform, Bitbucket has made a charitable donation to the Software Freedom Conservancy. We’re proud to support the Software Freedom Conservancy and promote the development of platforms like Mercurial, and encourage you to keep a look out for advancements to come.

If you are new to Bitbucket, sign up for Bitbucket here or if you are already a Bitbucket user, head to your account settings, Bitbucket Labs, and enable Mercurial Evolution Support. It’s time to evolve.

Get started, it’s free

Have more specific questions about this post? Reach out to us on Twitter to get the information you need

Stay in context with JIRA issue details in Bitbucket Cloud

By on

View JIRA issue details in Bitbucket Cloud

Anywhere you can add issue key links, such as commit messages, comments, pull requests, and branches, you can now see JIRA issue details to stay coordinated between code and related JIRA issues. Sign up for Bitbucket and connect JIRA to take advantage of saving time on the back and forth.

Get started, it’s free

When building software, you often find yourself navigating to different tools, littering your browser with tabs just to stay on top of the information you need. It happens so frequently that you’re likely not even aware of it. Over time, these unnecessary actions all start to add up, sapping your productivity and focus.

Wouldn’t it make more sense to bring the relevant information you need into context so that you don’t have to navigate away from your work? That’s why we’ve added JIRA issue details within Bitbucket Cloud, so you never need to navigate away from Bitbucket to get context on an issue. 

Stay in context

Click on a JIRA issue key link from within Bitbucket and see the details of the issue.

This makes it easier for you and your team to stay coordinated between code and related JIRA issues. Anywhere you can add issue key links, such as commit messages, comments, pull requests, and branches, you can now see JIRA issue details, in context. Only Bitbucket allows you to have your JIRA information at your fingertips – no other code repository tool can provide this functionality.

If you need to make edits or view further information you can easily click on the View Issue in JIRA link at the bottom.

There’s more to come

Over the next several months, we’re adding more functionality so you never have to leave Bitbucket, further speeding your development cycle.

Look forward to: 

Get started

Ensure Bitbucket and JIRA Software are connected. 

If you’re already using issue keys in your commit messages today, simply click on the links to enjoy visibility on JIRA issues. If you’re not using issue keys in Bitbucket, try adding one to your next commit message. Type out an issue key that exists in one of your JIRA projects, for example, “TEST-123” and voilà, you should now be able to click on the issue keys to view it’s details. Read more about using issue keys in Bitbucket here. 

Having trouble? You may need to reconnect your JIRA and Bitbucket connection. Visit our troubleshooting page if you run into issues or contact support.

Not using JIRA Software and Bitbucket together?

JIRA Software is the preferred issue tracker of over 350,000 Bitbucket teams. We did an extensive study amongst our users and found teams who have JIRA Software and Bitbucket integrated release 14% more often and close 23% more issues (when compared to teams using just one of those products).

Learn more

Have more specific questions about this post? Reach out to us on Twitter to get the information you need. 

Generate SSH keys for Bitbucket Pipelines

By on March 21, 2017

Configuring SSH access to servers for your builds and deployments on Bitbucket Pipelines used to be a real pain. We had a manual process that involved generating keys locally, then base64 encoding them to pass through environment variables in your build. You also needed to add hosts to the SSH known_hosts file so various commands didn’t fail with cryptic error messages. We saw an opportunity to make this experience a whole heap better.

Improved SSH configuration for Pipelines

We’ve designed a new configuration screen for your Bitbucket repository that lets you generate and configure SSH keys for your pipelines with a single click. The private key will be encrypted, kept securely within Bitbucket, and automatically registered in your pipeline build container. You then simply copy/paste the public key on to your remote host to give your build access to it.

Adding your remote hosts to the known_hosts file in your build is just as easy. Type in the hostname and Bitbucket automatically pulls down the host’s public key, and lets you verify the fingerprint. If everything looks is okay, add your hosts to the configuration with a single click.

With these small improvements, configuring SSH access for Pipelines now takes just a few seconds instead of half an hour of error-prone tweaking.

Learn more about using SSH keys in Pipelines. Happy Pipelining!

Try Bitbucket Pipelines

Bitbucket Pipelines adds support for Alpine Linux

By on March 13, 2017

We’re big fans of both Node.js and Docker at Atlassian, and Bitbucket has seen some great adoption among these communities. So when we were recently contacted by the maintainers of the node-docker project to see whether Bitbucket Pipelines could support their Docker image, based on Alpine Linux, we immediately went to investigate and see what we could do.

Alpine is a very lightweight Linux distribution that weighs in at an insanely small 5 MB, so using it in your build can shave a significant amount off the download and startup time. However, Alpine was incompatible with Pipelines because we had a dependency on the bash shell.

Bitbucket Pipelines was originally designed to require bash, which isn’t included in Alpine. But with a few tweaks on our side, we now fall back to using /bin/sh when /bin/bash isn’t available. These changes allow customers to use any Alpine-based image for their build container in Pipelines.

Now all Bitbucket Pipelines users can get the speed benefits of using any Docker image based on Alpine, including many of the official Docker images that started transitioning last year. We hope you enjoy this improvement as much as we do!

Haven’t tried Bitbucket Pipelines?

Bitbucket Pipelines is a continuous delivery service built right within Bitbucket so you can code, test, and deploy from a single tool with a unified workflow. There’s no need to switch to another application, no need to juggle permissions and access, or setup servers – just use Bitbucket Pipelines and get unlimited concurrent builds.

Try Bitbucket Pipelines

Cheers, the Bitbucket Pipelines team

Rest assured with Pipelines build notifications in HipChat

By on March 6, 2017

Bitbucket Pipelines integration with HipChat
Every time you trigger a build in Bitbucket Pipelines, whether by pushing commits or creating a pull request, you have to remain at your desk or constantly refresh your email to see if the build has passed. You don’t like wearing the cone of shame for a failed build and would like to get notified ASAP asynchronously.

Introducing HipChat notifications for Bitbucket Pipelines

Many software teams use HipChat to share ideas and stay connected regarding their team’s latest commits, pull requests, or the latest meme. If you are one of those teams, we’ve added a long-awaited HipChat integration with Bitbucket Pipelines. Now get feedback even faster with build status updates via HipChat.

Enable HipChat notifications for Pipelines

To enable HipChat notifications for Bitbucket Pipelines, follow these three simple steps:

  1. Enable the HipChat for Bitbucket Cloud integration
  2. Go to your Bitbucket team or repository settings page and click HipChat integration.
  3. Under the section Notify the room with activity in these areas, select the boxes for Started, Successful, and/or Failed.

Voila! you are good to go…

Haven’t tried Bitbucket Pipelines?

Bitbucket Pipelines is a continuous delivery service built right within Bitbucket so you can code, test, and deploy from a single tool with a unified workflow. There’s no need to switch to another application, no need to juggle permissions and access, or setup servers – just use Bitbucket Pipelines and get unlimited concurrent builds.

Try Bitbucket Pipelines

 

Have more specific questions about this post? Reach out to us on Twitter to get the information you need. 

Cheers, the Bitbucket team