August 27th, 2014
Over the last couple months I’ve been doing an entirely manual deployment process for each blog post. It isn’t a difficult process but it takes time and is prone to errors.
I’ve finally gone through and automated the deployment. I first attempted to use Deploy for this, but I couldn’t justify $10 per month to save me the small amount of time I was spending on deployments each month. Instead, I decided to create my own solution.
I already had tools for generating the HTML and preparing the files to be copied up to Rackspace. All that was left was automating the transfer from my computer up to Rackspace. I took a look through the OpenStack API for .NET and wrote a program which could run through all the files generated for my site and upload them to Rackspace.
In the past, every time I created a new post, I would have to do go through the following steps:
Regenerate the site.
Determine which files had changed.
Upload the changed files to Rackspace
The new process is much shorter:
Run a batch file.
Below is a list of the tools I use to generate and deploy the blog:
GoStatic Site Generator - The program used to generate the site from markdown. You can substitute this tool for any static site generator, or even hand created HTML files.
Cloud Files Deploy - Copies the contents of the folder up to Rackspace Cloud Files. Details about this program will come in a future post.
A batch file to link all this together.
Below is the batch file I use to deploy my blog after adding a new post.
@echo off setlocal :PROMPT SET /P AREYOUSURE=This will deploy to the production blog. Are you sure? (Y/[N])? IF /I "%AREYOUSURE%" NEQ "Y" GOTO END :: Delete old files. rmdir "blogrpcom/public" /q /s echo Deleting old files :: Regenerate the site for processing "bin/gostatic-32-win.exe" -f "blogrpcom/site/config" :: Minify the site "bin/StaticSiteSquisher" "blogrpcom/public" :: Deploy the files site for any attachments to posts and the blog site. "bin/CloudFiles-Deploy.exe" FilesContainerName "filesrpcom" username api_key "bin/CloudFiles-Deploy.exe" BlogContainerName "blogrpcom/public" username api_key :END endlocal echo Deployment completed successfully pause > nul
I added the prompt to verify I wanted to run the deployment, since it is sitting in a folder with a couple other batch files I use for testing the blog. I wanted to prevent any accidental deployments. The testing files don’t contain a verification to prevent me from accidentally deploying due to muscle memory.
This process will be optimized in the future by improvements to the Deploy tool to check the existing files and determine what has changed. For now it’s simply doing a brute-force upload and overwriting all the existing files. It does not delete any files on the server, so anything deleted from the local directory will not be removed from the server when the deployment is run.