An Order of Agile, CI/CD and DevOps To Go, Please

Share on facebook
Share on twitter
Share on linkedin
Share on reddit

Run-through

What’s the difference between Continuous Integration (CI), Continuous Delivery, and Continuous Deployment (the CD Twins)? And where does Agile software development and DevOps fit into them? These are common questions and important ones to be asking in an era of increasing automation. Here, we’ll do our best to give you a taste of how Agile, CI, the CD twins and DevOps fit together and expand upon each other along with some tools you can start looking at for your team.

Definitions and Differences for Agile, CI, CD, and DevOps

For quick reference for a common understanding – with perhaps a bit of wiggle room, it’s good to start with some basic definitions. Every team’s processes may vary a bit, suffice that our ultimate goal and measurement is getting software into everyone’s hands – released.

  • Develop – A developer has started coding a feature.
  • Build – Code is merged to the trunk.
  • Staging – Build is deployed to a test environment.
  • Production – Build is available for everyone except end-users to see and use.
  • Released – End-users are able to use it.

Now we can get into the five practices to go with our five steps in the software development process:

Agile

Agile is a methodology with a set of principles and practices that help guide self-organizing, cross-functional teams to deliver high-quality software, faster and more efficiently in a potentially rapidly changing environment. Each step in the software’s development lifecycle is a distinct step:

Develop > Build > Staged > Production > Released

Continuous Integration

Continuous Integration involves a practice used by software engineers using automated tools to verify, test, and frequently integrate the code of multiple developers into the main branch of a code repository. In essence, it aims to synthesize development and merging to builds as one congruent process.

(Develop / Build) > Staged > Production > Released

Continuous Delivery

Continuous Delivery expands upon CI and is the practice of constantly keeping code in a deployable state, by automating most of the software release process. Initiating deployment to production requires human intervention to manually approve it, though additional steps may also be required. 

Functionally, CD’s goal is to synthesize development, staging, and deployment.

(Develop / Build / Staged ) > Production > Released

Continuous Deployment

Continuous Deployment takes Continuous Delivery one step further by automating the process of deploying all changes to code to production and without the need for manual review, while also automatically notifying developers of test results. It’s appropriate to note that the synthesizing of stages will vary according to the amount of automation involved. In most cases, some amount of human intervention is required by someone other than the original developer.

(Develop / Staging / Deployed / Production) > Released

DevOps

DevOps entails practices, automated tools, and the cultivation of a team mindset to synthesize software development, quality assurance, and operations into increasingly cross-functional teams to increase the speed, efficiency, and quality of software development relative to both team and software business objectives. DevOps works with Agile software development and can work independently of, but easily fits with CI and CD.

DevOps is most notably useful for the steady improvement of existing methods, practices, and software. It is concerned with all five steps even if not all of them are automated. DevOps is a stepping stone to AIOps and software that writes software – that will lead to our inevitable assimilation.

Which Ones Should I Use Within My Team or Organization?

Ideally (and perhaps with a bit of theory), in the long-term, all software development teams should be aiming to be capable of Continuous Delivery and/or Continuous Deployment. The main argument here is to simply try looking ahead five years. How everyone is developing software today is likely to change as new technologies and services become available.

Realistically, achieving CI/CD is no simple task and depends upon your team, tools, budget, and investment effort in synchronizing everything. This warrants looking at them from a different perspective – how you can plan on achieving Continuous Delivery regardless of where your team is at now.

How Do Agile, CI/CD, and DevOps Fit Together?

Avid Gitential Blog Readers will remember how all the best things in life start with the letter “C” – like cash, computers, cars, chimichangas, cheeseburgers and chocolate chip cookies. So, depending on your taste, we can approach the CI/double-C-D dilemma by cooking up some chocolate chip cookies or… or… yes… you got it, a triple chili-cheeseburger smothered with jalapenos, and an ice-cold Coca-Cola (diet).

As you can see, everything starts with Agile. It’s the foundation, and without it, developing any CI/CD system will be a very messy affair. Fortunately, most teams are using Agile for their methodology. The next step is Devops – and yes, it’s at the top, but everyone sells buns in matching pairs. Even without any automation you can still begin cultivating the philosophies and practices to help shorten your SDLC and improve software quality.

With Agile and DevOps you have the means to efficiently start adding automation to your work processes with greater confidence. As you’ve likely gathered, end-to-end automation entails starting with Continuous Integration and eventually layering Continuous Delivery and Continuous Deployment on top of it. Each is a logical extension of the previous step.

Ten Continued Integration Best Practices

What applies to CI applies equally to the CD twins. The following are ten best practices for Continued Integration as defined by many different authors.

  1. Maintain a code repository with a version control system that includes all artifacts required by the project while minimizing branches by integrating them into Main.
  2. Automate the build, ideally with a single command, to include automating its integration and deployment into a production-like environment.
  3. Make the build self-testing so it automatically runs all tests once it’s built to verify that it works as the developer intended.
  4. Everyone commits to the baseline every day – at a minimum, to improve collaboration on changes and reduce conflicts.
  5. Every commit (to baseline) should be built to make sure that they integrate properly with the working version. With Automated Continuous Integration this can be conducted in the background every time there’s a change in your version control system.
  6. Keep the build fast while balancing testing requirements which can slow down the feedback loop. The more you can set up automated (vs manual) testing in virtual production environments, the more valuable the feedback.
  7. Test in a scalable version of the production environment – What works in a test environment may not work in the production environment which is cost-prohibitive to replicate. Service virtualization options like TrafficParrot, Parasoft, Up9, among others, provide on-demand access to simulate environments.
  8. Make it easy to get the latest deliverables so developers can stay up to date, the earlier they can find defects the faster and easier they are to fix.
  9. Everyone can see the results of the latest build enhanced with notifications of updates so team members can provide feedback faster. Systems with complex testing requirements may require manual testing which should also lead to alerting team members of results.
  10. Automate deployment with a script to deploy the build to a test server so everyone can view it. This necessitates establishing a protocol to determine how your team responds to a defect or features with missing requirements.

List of Top CI/CD Tools

The CI/CD and DevOps markets are exploding with a compounded annual growth rate for the industry running at ~20% with expectations that the pace will continue through at least 2025-6. A lot of companies want a piece of the action, and a “small” selection of them are presented here in alphabetical order.

Support Description
AWS Code Deploy CI/CD + DevOps AWS Code Deploy is a fully managed deployment service that automates software deployments to a variety of compute services.
Bamboo CI/CD + DevOps Bamboo by Atlassian helps teams with continuous integration, deployment, and delivery, specializing in integrating Bitbucket and Jira Software for full traceability.
BiG EVAL CI + DataOps BiG EVAL is a light weight software solution dedicated to test automation within a data oriented project.
Buddy CI/CD + DevOps Buddy is a minimal friction automation platform that makes DevOps easy for developers, designers and QA teams.
Buildbot CI Buildbot supports distributed, parallel execution of jobs across multiple platforms, flexible integration with version-control systems, extensive status reporting, and more.
Chef IO CI/CD + DevSecOps Chef provides teams implementing DevSecOps with a common approach for automating application delivery, infrastructure configuration and compliance auditing.
Circle CI CI/CD + DevOps Automate your development process with continuous integration with their cloud or on your own infrastructure.
Codeship CI/CD Codeship empowers engineering teams to implement and optimize CI and CD in the cloud for simple web applications to modern microservice architectures
Deploybot CI/CD DeployBot can be used to build and deploy the code anywhere through one consistent process.
Gitlab CI CI/CD + DevOps This is a bundled feature of GitLab’s product offering industry-leading CI/CD enabling all teams to work efficiently with powerful, scalable, end-to-end automation.
GoCD CI/CD + DevOps A free and open-source CI/CD server to easily model and visualize complex workflows helping you to deploy any version, any time.
Google Cloud Deploy  CI/CD Google Cloud Deployment Manager allows you to treat your configuration as code and perform repeatable deployments.
Jenkins CI/CD + DevOps The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.
Octopus Deploy CI/CD + DevOps Octopus Deploy is a single place for your team to manage releases, automate deployments, and automate the runbooks that keep your software operating.
RedHat Ansible CI/CD + DevOps Ansible delivers simple IT automation that ends repetitive tasks and frees up DevOps teams for more strategic work.
TeamCity CI/CD Multiplatform, multilanguage, multicloud. Build, test, and deploy apps, packages, and containers of all sorts.
UrbanCode Velocity CI/CD Visualize, orchestrate, and optimize your continuous delivery value stream with UrbanCode Velocity.
Want more or looking for something else? Check out these lists for more CI, CD, and DevOps Tools:

About Gitential

Our team at Gitential constantly watches trends across the software development industry. We also get down into the code with you to find ways to make it easier for you to make your team more efficient. Please take a moment to arrange a free demo  – or sign up for a free trial, no credit card is needed.

Did you like our content?

Spread the word

Share on facebook
Share on twitter
Share on linkedin
Share on reddit

Subscribe to Our Newsletter

Don't miss our latest updates.
All About Software Engineering Best Practices, Productivity Measurement, Performance Analytics, Software Team Management and more.

Did you like our content?

Spread the word

Share on facebook
Share on twitter
Share on linkedin
Share on reddit

Subscribe to Our Newsletter

Don't miss our latest updates. All About Software Engineering Best Practices, Productivity Measurement, Performance Analytics, Software Team Management and more.