Typically, these are 3 separate pipeline to an Application Deployment Lifecycle.
The build step is designed to convert code to a bundle:
- How do you build your software? (e.g. Jenkins)
- Do you convert checked in code to a build artifact?
- If so, what tools do you use to build it?
- Are you implementing CI?
The release step combines build with config (ready for execution):
- How do you release your software? (e.g. Ansible)
- Do you have a unique id for each release?
- Is the deployment mutated or deployed fresh each time?
- Are you implementing CI?
- How do you manage deployment errors?
- What are the pre/post launch validation plans?
The Run step launches the application
- After the release step, how is the application started?
- e.g. Manually, some automated process
- How do you deploy configuration files across environments?
- How do you deploy secret/sensitive files across environments?
- What distinct environments do you have? (e.g. Dev, test, stage, prod)
- How do you deploy to each of the environments?
- What user does your software run as?
- Do you gracefully drain off traffic when upgrading?
- How long does a global rollout take?
- What is your release cycle? (e.g. 1/mo, every merged PR)
- Is there an approval system for change?
- How do you document production changes?