Skip to content

Instantly share code, notes, and snippets.

@EvanGlazer
Last active January 23, 2020 21:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EvanGlazer/47ca4446140500f5034d601eeac5a375 to your computer and use it in GitHub Desktop.
Save EvanGlazer/47ca4446140500f5034d601eeac5a375 to your computer and use it in GitHub Desktop.

######[Author: Evan Glazer]

6 Common Risks: Working with CI/CD Pipelines

Continuous Integrations and Deployments are key elements to a companies success in being able to release software actively in the multifold. It is common in a small engineering team that one person has the only knowledge for packaging up the project to release and distribute. Building a system with one engineer understanding how to distruibute an application is said to be a bad practice due to relying on John Doe. John Doe might be on vacation, sick, fired, etc. and due to this new releases are paused from touching production till the next guy figures out all the ins and outs. Building a system that can actively measure, build and distribute an application is crucial in engineering to save a lot of time and money with not spending a whole work day or two on releases every 2 weeks. We're going to outline the 6 common risks that you should keep in mind when creating a pipeline and how to communicate with your management to receive there approval for buy in.

Plan Carefully

https://media.giphy.com/media/xUA7biTgxZxrcYqHDO/giphy.gif

Keep the goal in sight

If you are building the processes from scratch to implement a few projects to have pipelines; it is important to thoroughly understand how your current projects build locally and what issues you need to account for. It is important to look at your companies current CI/CD implementation for other projects first, and plan out how you can tie in a new project to the current system if your company already has processes in place.

Focus on the process before the tools

Before looking at what you can use for CI: Jenkins, AWS, Travis CI, Circle CI, etc and all the plugins to achieve the best CI/CD suite for getting your project to production without any issues. It is very important to build and test the process you want to implement at then look at each tool if it has the support you need for your project.

Understand the needs of each team

When planning it is pivotal to understand the goals of the team, and the skillset of everyone to be able to understand what you're going to architect. You don't want to create mindless tasks with the process that can make a release or staging release difficult to rememeber.

Pipelines matured in phases!

https://media.giphy.com/media/DzgRguxuiFQk0/giphy.gif

Pipelines should be matured slowly instead of in one-go

When building your pipeline it is nice to foresee the future of the CI/CD processes with being able to run unit, and integration tests, stress tests, code quality checks, etc. Being able to build the initial architecture of the basics of the process is essential to focus on from the start rather than measuring componenets. A simple process may be to achieve the following: clone your project, build and package, and receive responses based on what happened when pushing to production (ex: app store).

https://testcollab.com/wp-content/uploads/2017/02/020117_0618_9thingsIwis1.png

This figure shows a CI/CD model for being able to package, have integrations, deliver, and deploy with how the pipeline will function.

Long Shell Commands?

https://media.giphy.com/media/Zipmry4xUxD8s/giphy.gif

Storing long shell commands? You’re doing it wrong!

Having your shell commands stored in the IDE will cause issues long term. Not only will it make things harder to maintain and figure out in the future but it is stronger software craftmanship navigating to a deploy file and seeing the stages of the pipeline for: prebuild, build, and post build targets. Also IDEs eventually become out dated and will cause for continous updates to the specific shell code.

Instead, try:

Create small .sh files or .bat files, commit to your repo.


Call for DoD!

https://media.giphy.com/media/TfFDiw5gBuEns4ykJl/giphy.gif

Just kidding, not that DoD! Definition of Done!

The definition of done is a very powerful when understanding the quality standards of what, how the team produces. It provides visibility into the process, alongside including how to implement CI/CD, as well as fosters trust. This is part of the mindset shift that must take place. If the DoD is unclear, the team must define it together and make it visible and accessible to everyone.

Understanding CI/Process with Metrics

https://media.giphy.com/media/l46Cy1rHbQ92uuLXa/giphy.gif

Lack of meaningful dashboards and metrics

When thinking about the pipeline processes, it is also imperative to be able to understand what each stage in the pipeline is outputting and being able to do to identify defects, and or metric related information about testing. A lack of meaningful dashboards and metrics can potentially cause risk with what is actually happening vs what you may invision.

Management and Team Buy in

https://www.testim.io/wp-content/uploads/2019/11/dev_ops@2x-1024x466.jpg

The shift to CI/CD is usually triggered from the bottom up, but at the end of the day, it’s a transformation that requires management buy-in because it’s about skill set, processes, and several areas to which management needs to allocate the proper time, resources, and attention. Devops is a very intricate component to software in terms of building software that can actively measure, build and distribute an application actively.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment