A good friend of mine once told to “only improvise with what you got” and behind the obvious part of this sentence there is a real methodology. LeumiCard was the first time for me at a really big corporate. I needed to adjust my self to the new rules. In small companies you can do whatever you fill like. For example if you need a Jenkins you request a server, get it in 5-10 minutes install everything and grant it the required permission. At big corps you get to fill forms and lot’s of them. I had to wait two weeks for my first build server and then more forms to fix access permission. In order to make thing more complex no internet access is allowed on company networks, which means there is full process to get an software inside our air gaped and secured network.
When I started to working on the deployment process at LeumiCard I tried to improvise only with what I get. Meaning TFS 2008 which I quickly upgraded to 2012, Nolio which later changed it’s name to CA Lisa which handled all environments, permissions and server connections, and finally powershell which is installed on all servers. So at first I tried using Microsoft Release Manager which was part of our MSDN License but when I started configuring it I encountered the overhead in configuring the different environments, permission and servers. But I had to stop when i figured I had to do that for each project and I had more then a hundred. So I was digging for a solution that will provide me a generic connection between all the tools I get and which has to be approved by the company Data Security. In my searches I encountered a small open source program called TFSDeployer. I downloaded the code passed it trough all channels and regulations and implemented it on my build server.
The TFSDeployer software main purpose is to listen to TFS Build quality changes and do something according to a predefined xml. For me this was the magic tool that lead from the build process under TFS to deployment Done by Nolio. So what I did first was to create the right quality name and write the appropriate powershell script which runs the Nolio process (using command line) with the correct parameters. At first I did it all hard coded on one project in order to figure out and pass all security and permissions issues. I get it working meaning going to the build choosing “Deploy To Test” and having TFSDeployer figuring the string and running a powershell script which copy from the build drop folder and them having Nolio move it to the requested environment. Then I had time to make it as generic as possible, so I removed all the build details from the powershell script because I had them from the build page which triggered the quality change using TFSDeployer. So I was left only with Nolio parameters which I moved to the TFSDeployer XML. The result was a generic powershell script without any build or environment reference which was suitable for all projects and environments.
After having a generic deployment process I kept on improving it and adding different steps such as code review enforcement (A feature which is missing in TFS) and also a checklist requirement form before deploying to production. So in this process all i was left to do is add functions to the powershell script and add the parameters into the huge XML file which is really the decision making mind behind all the deployment process.
Example of TFSDeployer process for test deployment:
- build quality changes to “prepare for Test” by developer
- Powershell scripts get’s what to copy from the build drop folder into a preparation folder
- Powershell scripts creates code review work item assigned to team leader with all changesets since last build deployed at test.
- build quality changes to “Deploy To Test” by developer or team leader
- powershell checks if code review work item is closed
- powershell runs Nolio with the appropriate builds parameters taken from the TFSDeployer XML.
- Nolio copy the process to the correct server with the appropriate permissions.
This is how I improvised only with what I had and accomplished the most out of it with keeping in mind the flexibility I needed in order to answer the hundreds of projects under my TFS.