CI/CD

Continuous Integration

In software engineering, continuous integration (CI) is the practice of merging all developer working copies to a shared mainline several times a day. - https://en.wikipedia.org/wiki/Continuous_integration

Continuous Delivery

Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles - https://en.wikipedia.org/wiki/Continuous_delivery

Continous Deployment

Continuous deployment (CD) is a software engineering approach in which software functionalities are delivered frequently through automated deployments. - https://en.wikipedia.org/wiki/Continuous_deployment

Positive Feedback Loop

Pipelines

Immutable Artifacts

12-Factor Configuration

https://12factor.net/

Testing

  • Unit tests
  • Integration tests
  • System tests
  • Contract tests
  • Performance tests
  • Static analysis
  • CVE scanning
  • Vulnerability scanning

Automatic

not

automated

Branching Strategies

  1. Trunk-based, commit to trunk
  2. Trunk-based with short-lived feature branches
  3. Trunk-based with versioned release branches

https://trunkbaseddevelopment.com/

Environments

Review Apps

Deployment Strategies

  • In-place
  • Rolling
  • Blue/green
  • Rainbow
  • Canary

Database Versioning

Feature flags

Antipatterns

  • Snowflake CI servers
  • Neglecting local development
  • Flaky pipelines
  • NiH
  • Developer abstraction
  • Rolling backwards