The semantic versioning used in all of our TFS/VSTS CI builds uses the predefined variable
Build.BuildID for the buildnumber portion of
major.minor.revision.buildnumber. The build id is used so we have traceability when troubleshooting. We can easily search for the build and see the associated changes.
Major.minor.revision is set in a variable group so it can be shared and updated in one place, across build definitions.
Continue reading Versioning .Net assemblies using TFS/VSTS Build.BuildID
I recently set out to automate the creation of our Windows build servers that run VSTS agents. Previously the build servers were thought of as “snowflake” servers because of all the software components and customization’s that were needed. This was even more reason to use Infrastructure as Code to get rid of manual run books that were previously used to document the creation of a build server. Our Infrastructure team already decided on a tool chain for Infrastructure as Code, which included Chef for Configuration Management.
Continue reading Chef recipe to install VSTS agents (Windows)
In order to gracefully deploy releases to our application servers, I wanted to utilize rolling deployments in Octopus Deploy. If you aren’t familiar, rolling deployments slowly roll out a release one instance at a time (vs. all instances at once). The goal of this being reduced overall downtime. To accomplish this, I wrote PowerShell scripts to leverage AWS Auto Scaling Groups (ASG) that are run as part of Octopus deployments.
Continue reading Rolling deployments to AWS using Octopus Deploy and Auto Scaling Groups
Last week Microsoft announced “Pipeline as code (YAML)” giving us the ability to store our builds in source control. This allows us to take advantage of Configuration as Code as well as other benefits not available through the Web Interface builds:
Continue reading VSTS YAML Builds (Pipeline as code)
My team wanted the ability to populate test data into new data warehouse instances (MySQL on Linux) that are created via Infrastructure as Code (CloudFormation and Chef). They already had the SQL scripts they used for local development, so I would just need to setup a process to package and deploy them. This process would then be automatically triggered when a new instance is created.
Continue reading Setting up a build/deploy pipeline for MySQL seed scripts using VSTS and Octopus Deploy
This past week I started concentrating on optimizing our release processes. I’ve talked about how our team uses VSTS and Git in a previous post. At the end of a sprint, pull requests are created in all of our repositories to merge to the release branches. As the number of our repositories continues to grow, the number of manual steps to merge for releases grows exponentially. Having worked with the VSTS REST API in the past I knew this wouldn’t be difficult to automate. A build would be run that runs the script below for each of our repositories to create pull requests. Service hooks to Slack would then send notifications so the necessary reviewers can approve the newly created pull requests. This same script can be used post release to merge back to Master branches. I commented on every line of code in the script below so I didn’t have to go into details here 🙂
Continue reading Code Sharing (PowerShell): Create Pull Request via VSTS REST API
I previously posted about how I discovered LaunchDarkly and wanted to introduce it at my current employer. See Part 1 here. Our pilot with LaunchDarkly went great. So great that we purchased a subscription.
Continue reading Feature Flag journey with LaunchDarkly – Part 2
If you’ve installed or used private builds agent for VSTS or TFS, you’ve probably noticed the Agent’s System Capabilities are listed in the Agent Pool hub (https://ACCOUNTNAME.visualstudio.com/_admin/_AgentPool):
Continue reading TFS/VSTS Build – System Capabilities and Demands
At DevOpsDays Minneapolis I was the facilitator for an Open Space discussion (largest group of the day!!) on my proposed topic of “Release Management and Deploying to Prod Multiple Times a Day”. More on what an Open Space discussion is here. I received a ton of really great feedback on my employer’s current processes and what we can do to move to a faster release cadence in the future. The TL;DR of the discussion was, use feature flags!
Continue reading Feature Flag journey with LaunchDarkly – Part 1
Weather you’re using AWS Lambda, Azure Functions, or Google Cloud’s Firebase, you’ll want to re-think how you approach configuration management for serverless projects. The number of projects tend to grow fast because a microservice architecture is most commonly used. This introduces a new set of configuration management problems. Manual tasks to create and manage these projects grows exponentially. Without proper configuration management these projects can quickly spiral into the wild wild west. I’d like to review the principals of SCM and share some solutions for accomplishing these goals when working with serverless/microservice projects.
Continue reading Configuration Management for Serverless Microservice Projects