Deployments
stage of the software development lifecycle
involves the process of making a software application or system available and operational on a specific environment or infrastructure.
It typically includes tasks such as installing, configuring, and running the software on servers, cloud platforms, or other computing environments.
Deployment focuses on the technical aspects of getting the software up and running.
During deployment, developers and operations teams work together to ensure that the application is properly installed, the necessary dependencies are satisfied, and the system is ready to serve end users.
Deployments can be performed multiple times during the development cycle, particularly during iterative development and continuous integration/continuous deployment (CI/CD) practices.
Stages
Planning:
defining the deployment strategy, including determining the target environment, infrastructure requirements, and deployment timeline.
It may also involve coordinating with different teams, such as development, operations, and testing, to align on the deployment plan.
Building and Packaging:
the software application is built, compiled, and packaged into a distributable format.
tasks such as code compilation, asset generation, and creating executable files or containers.
Can be done before deployment (ie as part of a CI)
Configuration and Environment Setup:
The deployment environment, including servers, databases, networking, and other infrastructure components, is prepared and configured to support the software application.
includes setting up
appropriate configurations
installing dependencies
ensuring compatibility between the application and the environment
Testing:
Can be optional, if done before
ie as part of CI, all parts are tested and an artifact is produced and versioned which will be the candidate to be deployed
Before deploying the software to production, it is crucial to perform testing to verify its functionality, performance, and stability.
This can involve various types of testing, such as unit testing, integration testing, regression testing, and user acceptance testing (UAT).
Testing helps identify and resolve any issues or bugs that may impact the deployment.
Deployment Execution
involves actually deploying the software to the target environment.
Depending on the deployment strategy, this can be a manual or automated process.
Manual deployment may involve transferring files, running installation scripts, or configuring the software manually.
Automated deployment often utilizes tools and frameworks like CI/CD pipelines to streamline the process, ensuring consistency and reducing human error.
Verification and Validation:
Once the software is deployed, it is important to validate that the deployment was successful and the application is functioning as expected.
This may involve performing
additional tests
monitoring system behavior
comparing the deployed version against predefined criteria or acceptance criteria.
runnign a smoke test (automated or manaul)
checking the status page is up and passing
checking logs are showing no errors
Rollback and Recovery
In case any issues or unexpected problems arise during or after the deployment, having a rollback plan is important.
Rollback involves reverting to a previous version or configuration to mitigate the impact of a failed deployment.
Additionally, recovery plans should be in place to address any potential downtime, data loss, or service disruptions.
Post-Deployment Activities
After the successful deployment, there are often additional tasks to perform,
updating documentation
notifying stakeholders about the new version
monitoring system performance
gathering feedback from end users
These activities help ensure that the deployed software is well-maintained and any necessary improvements or bug fixes are addressed in subsequent releases.
Last updated