When we decided a year ago to automate our continuous deployment process (previously releases were quick but manual), I had the chance to look at Docker. It was more accessible for Linux, not all features were working on Windows and the documentation was little, but we gave it a go.
I started to implement a continuous deployment solution based on Jenkins and Docker. Our applications are coded in C# and we wanted to limit the number of code changes. The first task I had to do is to find a way to “Dockerize” our console applications run by the Task Scheduler. There are more than one way to do so and I have written a post about it on my blog. If you are interested you can find more details on https://gmabile.wordpress.com/2018/02/02/dockerize-console-application-scheduled-tasks
We also moved from standard Jenkins projects to Pipelines. This allowed us to get all the build steps in the repository. We found that using the Shared Library was a big time saver. Our build steps can be centralised in a specific repository that all the projects will use. Once this main Jenkinsfile is created we just have to set our project related parameters in a small Jenkinsfile in each repositories.
You can find more details on how we implemented this Parameterized Jenkinsfile on my blog: https://gmabile.wordpress.com/2018/02/02/parameterized-jenkinsfile
With this we have a full Continuous Deployment solution. A merge in our Git repository will trigger the build on Jenkins and the project will be built, tested and pushed either to a Development or a Production environment depending on the branch.