Jenkins
is a great tool for continuous integration and continuous delivery.The CI/CD
and their responsibilities:
1 | +-----------------------+ +----------------------+ +------------------------+ |
Regression testing
: re-running functional and non-functional tests to ensure that previously developed and tested software still performs after a change. If not, that would be called a regression
. Changes that may require regression testing include bug fixes, software enhancements, configuration changes, etc.
Git branching (tag): Branching strategy: feature branch and primary development branch
Devops practice: Blue-green deploy, blue live and green idle. Smoke/Sanity test TDD test-driven development A/B testing, user experience research methodology.
Resource
What is CI/CD? Continuous integration and continuous delivery explained
Continuous integration
is a coding philosophy and set of practices that drive development teams to implement small changes and check in code to version control repositories frequently.
Continuous delivery
automates the delivery of applications to selected infrastructure environments.
A mature CI/CD
practice has the option of implementing continuous deployment
where application changes run through the CI/CD
pipeline and passing builds are deployed directly to production environments.
A best practice is to enable and require developers to run all or a subset of regressions tests
in their local environments (or use Travis
). This step ensures that developers only commit code to version control after regression tests pass on the code changes.
Test that require a full delivery environment such as performance and security testing are often integrated into CD and performed after builds are delivered to target environments.
To recap, CI
packages and tests software builds and alerts developers if their changes failed any unit tests. CD
is the automation that delivers changes to infrastructure and executes additional tests.
CI/CD
is a devops best practice because it addresses the misalignment between developers who want to push changes frequently, with operations that want stable applications.