One of the most important differences between Continuous Deployment and Continuous Delivery is the level of human involvement in a pipeline. The typical Continuous Delivery pipeline requires a person to approve deployment to production, where Continuous Deployment pipelines are fully automated (every feature that passes tests and checks is deployed right way).
After several customer requests, Codefresh has implemented the final piece of this puzzle and allows you to pause a pipeline before moving on.
This is accomplished using the approval pipeline step which is very easy to use in pipelines just by inserting 3 extra lines:
waitForInputBeforeProduction: type: pending-approval title: Deploy to Production?
The approval step also has the capability to be queried for its result. You can easily use it for other tasks such as waiting for any “destructive actions”. Here is a pipeline that will only destroy a test environment if the approval step is actually enabled:
If the user rejects the step, the test environment is never destroyed. This is accomplished by using the standard step dependencies in Codefresh.
version: '1.0' steps: askForPermission: type: pending-approval title: Destroy QA environment? destroyQaEnvNow: image: alpine:3.8 title: Destroying env commands: - echo "Destroy command running" when: steps: - name: askForPermission on: - approved
The destruction step in this pipeline is checking the approval status before actually continuing. Otherwise, it is skipped.
A more advanced use case is to use a single approval step in order to take a binary decision within a pipeline. So instead of using it as a gateway to production, you can actually choose for the deployment target.
Here is a pipeline that deploys in production or staging depending on the approval step:
This is the Codefresh yaml:
version: '1.0' stages: - prepare - yesPleaseDo - noDont steps: step_1: image: alpine:3.8 title: building chart stage: prepare commands: - echo "prepare" deployToProdNow: type: pending-approval title: Should we deploy to prod stage: prepare step_2: image: alpine:3.8 title: prepare environment stage: yesPleaseDo commands: - echo "world" when: steps: - name: deployToProdNow on: - approved step_3: image: alpine:3.8 title: deploy to production stage: yesPleaseDo commands: - echo "world" when: steps: - name: deployToProdNow on: - approved step_4: image: alpine:3.8 title: prepare environment stage: noDont commands: - echo "world" when: steps: - name: deployToProdNow on: - denied step_5: image: alpine:3.8 title: deploy to staging stage: noDont commands: - echo "world" when: steps: - name: deployToProdNow on: - denied
Here is the output for production deployment (the staging steps are skipped):
And here is the output for staging deployment (the production steps are skipped):
Finally, notice also that the approval step can be used from a Slack channel as well 🙂
The approval step is available to all Codefresh plans. Notice that during the approval phase no pipeline resources are consumed. See the documentation for more details.
New to Codefresh? Create Your Free Account Today!