Reliably delivering software to your customer requires a great many systems. Some of them could be automated and some of them could be manual. Just because a system isn’t automated, it doesn’t make it any less important. Why should you keep some distance between your application delivery and your CI/CD tool?
Without talking directly about CI/CD, here’s a breakdown of what you will need to do to have a reliable software deployment. You’re going to need to have a few core elements in place:
- A Source Control system (git for example and it could be hosted on github or in Azure DevOps)
- All of your application code is under source control.
- Your build, test and packaging process should be repeatable and ideally automated. This could mean scripts that also need to be in source control.
- All of your manual deployment steps should be listed and possibly scripted as well. Those scripts should be in source control.
- Deployment should be consistent across multiple environments – therefore your deployment to test, acceptable and production should ideally be the same.
Source control underpins everything we do. This enables us to know the version of the software that is being applied to our environment.
Additionally, once we start to script deployment we inevitably create a need for metadata which describes our environment e.g. machine names, IP addresses, database credentials, etc.
First get all of your application’s code and your build, your tests and scripts, your deployment scripts in source control. Secondly, interface these with a CI/CD system for build and deployment such as Jenkins, GitHub Actions, Azure Devops Pipelines. Your metadata will be fed into environment-specific variables.
Then do CI/CD
By isolating your build, packaging and deployment actions from your CI/CD tooling, you ensure that your build and deployment are essentially standalone processes.
Why is that important?
Outages occur, interfaces change and companies decide to retire products. Keeping a loose coupling between your application’s delivery and any third-party tool makes your application delivery more resilient and keeps your options open when it comes to tool choice.