Note that there are some explanatory texts on larger screens.

plurals
  1. POIs Puppet the right tool for pull-deploying .NET site from TFS with site shut down
    primarykey
    data
    text
    <p>We have a new application that needs to be deployed automatically to a number of servers. I need to know if Puppet can be used for the following scenario.</p> <p><strong>The Application</strong></p> <p>The application is a combination of .NET and PHP with either a SQL Server or PostGRE database. Database migrations are handled in C# using Entity Framework when the application is first started. The application is not finished but I working through feasibility studies for making deployment automatic.</p> <p><strong>Build and Continuous Integration</strong></p> <p>We use Team Foundation Service (TFS) in the cloud for Build.</p> <p><strong>The target environment</strong></p> <p>The application will be installed both in the cloud and inside clients' infrastructure. The cloud platform will be controlled by us, so I imagine that's not difficult. I can see the benefit of Puppet for configuring that environment.</p> <p>However, I may not have too much control about access to the server when it is hosted by a client's infrastructure. I must assume that the server only has access to port 443 (and 80, but I wouldn't update software that way). I imagine we will have administrator access to any servers we need to install to, my concern is more regarding access to the server through a corporate firewall.</p> <p>The environments will be Server 2008 (IIS7) for .NET web and database servers and <em>possibly</em> a linux server running Apache for PHP. As the application is unfinished, I can't say for sure what the PHP restrictions are just yet. I am assuming that I will have to deploy to two different types of server.</p> <p><strong>The deploy environment</strong></p> <p>There will be a server set aside for orchestrating the deployment. Puppet / any other technology can be installed here.</p> <p><strong>The desired process</strong></p> <p>Excuse my profuse use of Puppet here. I am unsure of its limitations out of the box and I appreciate that there is a Forge where lots of plugins are available. This level of automation is new to me, so I would be happy to take feedback on my steps!</p> <ol> <li>TFS build completes, unit tests are run and the build is marked as OK.</li> <li>Puppet spots that there is a new build and grabs the package</li> <li>Puppet configuration immediately deploys the new package to an integration test server (cloud)</li> <li>Puppet kicks off MSBuild on the integration test server</li> <li>Once complete, Puppet updates the state of the TFS build</li> <li>Puppet Agent on a client server then downloads the new package (pull over SSL)</li> <li>Puppet waits for an allotted time to install the system (assuming there are no sysadmins awake at this time!)</li> <li>Puppet sets a flag in a database that all web clients are polling to check for a "shutdown message"</li> <li>Puppet waits for an allotted time (for users to save their work)</li> <li>Puppet repoints IIS/Apache sites to a maintenance page</li> <li>Puppet kicks off backups of code and database</li> <li>Puppet performs package install, configuration updates on Linux and Windows server.</li> <li>Puppet triggers smoke tests (.NET console app) and waits for completion</li> <li>If successful, Puppet repoints IIS/Apache</li> <li>If not successful, Puppet rolls back both Windows and Linux servers.</li> <li>Puppet sets flag in database to say that system is live again</li> <li>Puppet reports back to server.</li> </ol> <p><strong>Assumptions</strong></p> <ul> <li>There will be no load balancing, so there will be only one .NET server and one Linux server. This might be required in the future but it might be YAGNI.</li> </ul>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload