If you work in a software delivery environment, you are likely to have heard about delivering software in pipelines or continuous delivery pipelines. This article is aimed at providing a little more information on these, the main benefits and where to get started with them, whilst also mentioning some helpful tools which can help you and your team further refine the processes you use.
What is a pipeline?
A software development pipeline is a set of automated processes, used by software engineers / developers, to compile, build and deploy code changes. The developers’ work is integrated into a code repository (such as Bitbucket, GIT, SourceForge, SVN) and built, automatically from the repo, whilst batches of automated tests can also be run against the build. Automated tests can include most types, but from the Automation Pyramid, you should look to include Unit Tests, API Tests and User Interface Tests (UI). In general, software developers will also work in shorter commit cycles, which can reduce the amount of more risky large scale code merges.
What are the benefits to the project and team?
Introducing software development pipelines can bring many benefits. The automation of assets incorporated in the build process will speed up that process, as well as remove the risk of manual mistakes which you face. As you can incorporate tests into the pipeline, another benefit of pipelines is increased quality, with less effort. Feedback on your quality of your build or deployment can also be a lot quicker if delivered by a pipeline, which can save time and effort of your staff.
With these main benefits, this helps feed a further benefit of a quicker time to market for your product. This can obviously help your business differentiate itself from its competitors.
Pipelines form a critical and centralised element of delivering code changes, so often you will also see improved teamwork and collaboration, with the aim of releasing a quality product, as quickly as possible, delivering a better Return On Investment for the business.
How do we get started?
When starting to create pipelines, you need the right toolset, which cater for this. There are lots of tools available in the market to choose from but we have given some examples below. The process in following a pipeline can be eas easy as following this process, all automated of course…
- Start with version control which developers will push code too.
- Build code and compile code together to a runnable state.
- Run units tests against this code base to assert correctiveness.
- Deploy this correct code to an environment.
- Run automated UI tests against this environment
- Finally, deploy to an environment of choice
In all of these steps we continue to feedback the responses, and if at any point it fails, we fall back to the start. You could argue that the final step is monitoring and measurement of validity.
These same steps could be represented as the following for simplicity:
Commit > Build > Test > Stage > QA > Deploy Prod
This is a great opportunity to build in quality. Identify Automated Unit Tests, Automated API and Automated UI tests which are critical to the success of the delivery and build them into your pipeline process.
- Version Control tool (Github, Bitbucket)
- A tool that stores and manages the codebase for your product.
- Continuous Integration Tool (Jenkins, TeamCity, Travis)
- Compiles, validates and reviews code (executed written unit tests)
- Continuous Delivery Tool (Selenium, Robot Framework, Webdriver while all integrates with a CI)
- Tool that automates tests and asserts correctness of code (UI tests)
- Continuous Deployment Tool (Docker)
- Deploys correct code to production, configures and potentially containerise.
Usually CI/CD are together like Jenkins, TeamCity and Travis which all work together to integrate, test and deploy code.
How do you know it is working?
As with any process when delivering to a customer or end user, we need the ability to measure how successful this process is. If we can measure this, we should be able to validate the delivery / audit, identify bottlenecks and look for improvements / efficiencies, with a view to reducing risk and improving the quality of what we deliver.
IBM Urbancode Velocity can help pull together information from the different tooling solutions, such as Jira, Jenkins, Teamcity, Test Automation tools and more. Urbancode Velocity provides a way of measuring your DevOps process maturity by providing analytical data based on the integrations with tools used in your pipelines. Visit the IBM website to learn more about how Urbancode Velocity can help.
Have you implemented this in your current project? Have you found this successful? We’d be interested to hear your stories and lessons learnt.
If you need some help or guidance in your journey, get in touch with the team for more information on the key parts of this process.
These might interest you
DeeperThanBlue Unify recognised by The Rail Innovation Group’s ‘Recognised Innovation Scheme’We are delighted to announce that DeeperThanBlue Unify has been recognised by The Rail Innovation Group under their Recognised Innovation Read More
If you would like to find out more about DeeperThanBlue and our Software Testing capabilities, get in touch with us today.
+44 (0)114 399 2820