Deployment pipeline as defined in the Continuous Delivery, is a process of converting commits into certified releasable artifact.
As a developer, who loves types, I would rephrase the definition for conciseness as
DeploymentPipeline :: List<Commit> -> Try<ReleaseableArtifact>
While working as a consultant, when it comes to deployment pipelines, I have seen same mistakes being repeated across teams. So it is worth reiterating the deployment pipelines guidelines as mentioned in the Continuous Delivery.
- Build your binaries only once
- Binaries should not be environment specific
- Deploy same way to every environment
- Smoke test your deployments
- Deploy into copy of production
- Each change should propagate through the pipeline instantly
- If any part of the pipeline fails stop the pipeline
I highly recommend Continuous Delivery book that further elaborates on each of these points.