WIP: This is a work in progress. I intend to start keeping notes of the basic theory, as I experience and learn it, of how to create a good CI/CD for delivering software.
Version control:
Ensure all code and configuration files are stored in a version control system like Git. This allows tracking changes, collaboration, and easy rollback of changes if needed.
Automated builds:
Automate the process of building the software to ensure that the code is always in a deployable state, minimizing integration issues and detecting problems early.
Continuous integration:
Integrate code changes frequently, at least once a day, to detect issues early and reduce the time it takes to find and fix bugs.
Automated testing:
Implement various levels of automated testing (unit, integration, and end-to-end) to ensure that the code is of high quality and meets the requirements.
Continuous delivery:
Automatically deploy every change to a production-like environment after passing all the automated tests, allowing for quicker feedback and faster iterations.
Infrastructure as code:
Manage infrastructure and configurations using code and version control to achieve consistency, repeatability, and scalability.
One Artifact, One Pipeline, One Path to Production:
https://arcadian.cloud/delivery/2023/05/03/one-artifact-one-pipeline-one-path-to-production/
Monitoring and observability:
Implement comprehensive monitoring and observability tools to track the performance and health of the application and infrastructure, enabling quick identification and resolution of issues.
Feedback loops:
Establish feedback loops between development, operations, and business teams to ensure continuous improvement and alignment with business goals.
https://arcadian.cloud/devex/2022/03/25/optimizing-for-a-cloud-native-developer-experience/
Collaboration and communication:
Promote a culture of collaboration and open communication between development, operations, and other stakeholders to break down silos and increase efficiency.
Automate Security and compliance:
Integrate security and compliance practices into the CI/CD pipeline, including automated security testing and code analysis, to ensure that the application meets regulatory requirements and is secure from potential threats.
Scalability and resilience:
Design the pipeline to support scalability and resilience, enabling the application to handle increased load and recover quickly from failures.