Top 5 DevOps Automation Tools for .NET Developers

Top 5 DevOps Automation Tools for .NET Developers

DevOps Automation is a Key Skill for All .NET Developers. These are just 5 of the top tools that many successful ASP.NET and .NET Core developers use to manage the growing needs for shipping code faster and more accurately.

DevOps Automation is a Key Skill for All .NET Developers. These are just 5 of the top tools that many successful ASP.NET and .NET Core developers use to manage the growing needs for shipping code faster and more accurately.

Not too long ago, deployments were done by hand - manually pushed to a physical server somewhere in a building your company owned. The software engineering world has come a long way since then, and we have more options than ever get our code and data live, automatically. Here are a few tools every C#/.NET developer should know that can help with that process, vetted by some of the best software leaders in the business. Be sure to check each one out if you aren’t already using their awesome power.

Why ASP.NET Developers Should Invest in DevOps Automation Tooling

It’s not enough to code and build a project - it’s important to do it continuously. Continuous Integration or Continous Deployment (CI/CD) is usually done in cooperation with the system that your project code repository exists on and the host server where your application lives. If you are working cloud-based, this could be Microsoft Azure or Amazon Web Service (AWS) or example. Of course, you could still be self-hosting on a server or data center within your building or company’s control. In either scenario, setting up an automated way to handle new features, bug fixes or even database changes is beneficial for quality control and speed to market. The addition of automating your Code Quality Analysis checks and Database Versioning and Data Comparison scripts can have just as big of an impact on your day-to-day workload as CI/CD.

If you are still manually doing things, take a look at the tools below that every ASP.NET / C# developer should know! They might make your life better.

Code Deployment + CI/CD Pipeline Automation

Here you’ll find a few excellent tools to assist with deploying your code, and getting it integrated with your repository, to read any commits you have done and automatically push the changes.

1. Azure DevOps

The latest option from Microsoft is the fully integrated Azure DevOps offering, Azure Pipelines. Lots of team options to use here, and it plugs in nicely to existing projects. Azure Pipelines works pretty seamlessly with containerization like Kubernetes, Azure Functions for a serverless option, quick-deployed Azure Web Apps and more complex VMs. It is the all-in-one option to make a .NET developer’s life streamlined. Azure DevOps Services allows you one free CI/CD target using an Azure Repo or GitHub repo, and pricing scales from there depending on how many pipelines or user licenses you need.

Azure Pipelines

Azure Pipelines is the traffic-cop backbone of the Azure DevOps offerings. It is platform and language agnostic, providing orchestration between any cloud provider, whether that’s AWS or Azure itself. The pipeline itself is cloud-hosted, so there is no need to download and install anything. Lots of extensibility here, with a good built-in option for integrated testing and reporting. If you are just getting started with doing CI/CD in the .NET cloud-hosted world, the documentation is excellent and the workflows guide you the entire way.

Kudu

Sometimes you don’t need a fancy set-up for your project. For the quick projects where I wanted continuous integration for an Azure Web Apps (formerly Azure Websites) hosted application, I used the App Service Kudu build server connected to my GitHub hosted repository. Azure makes this fairly trivial to set up directly in the Azure UI from the Deployment Center menu on any App Service you create. Kudu monitors your GitHub check-ins and rebuilds your code and deploys it to Azure anytime there is a change. One of the most painless ways to set-up CI/CD quickly, when you just want MSBuild to compile your app and get your updated service deployed. The bonus is it works for free - the only paid portion is the cost of your Azure App Service. It comes along for the ride and does not require a separate Azure DevOps subscription.

2. Jenkins

Jenkins is the most popular open-source CI/CD tool currently available, supporting many programming languages and applications. With it’s MSBuild plugin, using Jenkins as your build server is one of the easiest things I’ve ever personally used for deployment orchestration. It’s easy to see when the build triggered deployments fail and will run any scripts you need. When working on a project with many moving pieces in different ecosystems, Jenkins is an easy-to-understand way to tie them all together. It plays nice with everything, from hosts like Azure and AWS to repositories like Bitbucket and GitHub. Best of all - it’s FREE.

MSBuild Plugin

Your Jenkins instance will need to be hosted. It requires you to download and install it on a server that can run the Java runtime (it’s a Java app that can run on any OS). The MSBuild plugin will be added to the Jenkins installation on a server that you control (which can be cloud-based). You set the rules - when MSBuild executes, the repository trigger that monitors when a PR has been approved, etc. This allows a huge amount of flexibility, but nothing is set up by default.

3. Octopus Deploy

Octopus Deploy is a finely-tuned orchestrator for your pipeline. It works in tandem with your build server, taking care of deploying and promoting releases between environments.

Octopus Server

This product excels for many reasons in the deployment and continuous integration cycle. They have plugins for TeamCity, Jenkins, Azure DevOps and TFS. I’ve included it here because it works with self-hosted applications on your own server. It has a monthly charge for their cloud-hosted integration or a yearly cost for the self-hosted option.

SQL Database Versioning Automation

Code isn’t the only thing that could use some automation. Often developers are also keepers of the database for a project. It’s possible to not only automate the deployment of database schema changes but also compare any data inside of it and script the differences with the tools below.

4. Redgate SQL Toolbelt

With some of the best headache-reducing products on the market for SQL databases, Redgate has created tools that assist developers with data scenarios that come up during software projects. I have personally reduced my SQL database troubleshooting down to a matter of hours instead of days by using their suite of products. The options below allow you get back to your code quicker with the helpfulness of database automation and analysis tooling. Redgate’s products work with PowerShell, and have add-on extensions for Visual Studio and VS Code.

SQL Change Automation

This is the tool that gets your database scheduled updates live, quickly, without manually pushing.

SQL Compare

For the times where you need to update the database schema itself, running it through this comparison tool helps. It allows you to generate a database change script, not unlike the options in Entity Framework - for any SQL database, local or cloud-hosted. Then it deploys the changes automatically.

SQL Data Compare

Many configurations are stored in a database, and this tool examines the data values of any SQL instance with another one. It has saved a breaking data change more than once in my career, and something that is absolutely worth the money to have around.

Code Analysis: Gated Deployment Automation

While we are at it, why not ensure that the code you deploy fits within your team’s standards? There are ways to run automatic analysis within your local IDE, yes. Tools like the ones below will gate the commit itself, and allow fixes before a pull request is even created.

5. SonarSource

It can be difficult to quantify what “good” or “bad” code can be on a team project, so SonarSource developed a suite of products that allows you to set the rules of what your team’s code should look like. SonarCube is the one I used first, which can be run on a self-hosted server for code quality analysis and provides a score of risk for the existing repository. The next level of action was to gate the ability for a developer to merge their pull request if it does not meet the code rules you set up. Locally, you can use SonarLint to run against MSBuild in your Visual Studio instance. In conjunction with your CI/CD pipeline, cloud-hosted SonarCloud can run as a trigger for code quality before allowing your build to compile.

SonarC#

This is SonarSource’s C# specific analyzer and works with Roslyn to create custom rule sets for your team project, including automating running tests. Prices vary depending on which of their tools you choose to use, but it is completely worth it. If you are looking for a quick way to level-up your developers and ensure code quality is always present, this is a great option. SonarC# lets your focus code reviews on important topics and eliminates the low-hanging fruit.

DevOps Automation is a Key Skill for All .NET Developers

These are just 5 of the top tools that many successful ASP.NET and .NET Core developers use to manage the growing needs for shipping code faster and more accurately. Now more than ever, developers should add DevOps experience to their resume, as it will become a natural requirement for jobs in the not-too-distant future.

Do you have other DevOps automation tools that you love using? Share in the comments below!

Thanks for reading

If you liked this post, share it with all of your programming buddies!

Follow us on Facebook | Twitter

C/C++ vs. Rust: A developer’s perspective

C/C++ vs. Rust: A developer’s perspective

In this post, you'll see the difference between Rust and C/C++ in a developer’s perspective

Originally published by Maourice Gonzalez at https://www.onmsft.com

C++ is an incredibly fast and efficient programming language. Its versatility knows no bounds and its maturity ensures support and reliability are second to none. Code developed in C++ is also extremely portable, all major operating systems support it. Many developers begin their coding journey with the language, and this is no coincidence. Being object-oriented means it does a very good job of teaching concepts like classes, inheritance, abstraction, encapsulation and polymorphism. Its concepts and syntax can be found in modern languages like C#, Java and Rust. It provides a great foundation that serves as a high speed on ramp to the more popular, easier to use and modern alternatives.

Now it’s not all rosy. C++ has a very steep learning curve and requires developers to apply best practices to the letter or risk ending up with unsafe and/or poor performing code. The small footprint of the standard library, while most times considered a benefit, also adds to the level of difficulty. This means successfully using C++ to create useful complex libraries and applications can be challenging. There is also very little offered in terms of memory management, developers must do this themselves. Novice programmers could end up with debugging nightmares as their lack of experience leads to memory corruption and other sticky situations. This last point has lead many companies to explore fast performing, safe and equally powerful alternatives to C++. For today’s Microsoft that means Rust.

The majority of vulnerabilities fixed and with a CVE [Common Vulnerabilities and Exposures] assigned are caused by developers inadvertently inserting memory corruption bugs into their C and C++ code - Gavin Thomas, Microsoft Security Response Center

Rust began as a personal project by a Mozilla employee named Graydon Hoare sometime in 2006. This ambitious project was in pre-release development for almost a decade, finally launching version 1.0 in May 2015. In what seems to be the blink of an eye it has stolen the hearts of hordes of developers going as far as being voted the most loved language four years straight since 2016 in the Stack Overflow Developer Survey.

The hard work has definitely paid off. The end result is very efficient language which is characteristically object oriented. The fact that it was designed to be syntactically similar to C++ makes it very easy to approach. But unlike the aforementioned it was also designed to be memory safe while also employing a form of memory management without the explicit use of garbage collection.

The ugly truth is software development is very much a trial and error endeavor. With that said Rust has gone above and beyond to help us debug our code. The compiler produces extremely intuitive and user friendly error messages along with great direct linking to relevant documentation to aid with troubleshooting. This means if the problem is not evident, most times the answer is a click away. I’ve found myself rarely having to fire up my browser to look for solutions outside of what the Rust compiler offers in terms of explanation and documentation.

Rust does not have a garbage collector but most times still allocates and release memory for you. It’s also designed to be memory safe, unlike C++ which very easily lets you get into trouble with dangling pointers and data races. In contrast Rust employs concepts which help you prevent and avoid such issues.

There are many other factors which have steered me away from C++ and onto Rust. But to be honest it has nothing to do with all the great stuff we’ve just explored. I came to Rust on a journey that began with WebAssembly. What started with me looking for a more efficient alternative to JavaScript for the web turned into figuring out just how powerful Rust turns out to be. From its seamless interop…

Automatically generate binding code between Rust, WebAssembly, and JavaScript APIs. Take advantage of libraries like web-sys that provide pre-packaged bindings for the entire web platform. – Rust website

To how fast and predictable its performance is. Everything in our lives evolves. Our smartphones, our cars, our home appliances, our own bodies. C++ while still incredibly powerful, fast and versatile can only take us so far. There is no harm in exploring alternatives, especially one as exceptional and with as much promise as Rust.

What do you guys think? Have you or would you give Rust a try? Let us know your thoughts in the comments section below.

Thanks for reading

If you liked this post, share it with all of your programming buddies!

Follow us on Facebook | Twitter

Further reading

Why you should move from Node.js to Rust in 2019

Rust Vs. Haskell: Which Language is Best for API Design?

7 reasons why you should learn Rust programming language in 2019

An introduction to Web Development with Rust for Node.js Developers

Kotlin for C# Developers

Kotlin for C# Developers

Dive into the latest craze in languages and platforms - Kotlin. This time we will be looking at it from the perspective of a .NET C# developer, draw comparisons between the languages, and bridge the gap between these 2 amazing languages.

Dive into the latest craze in languages and platforms - Kotlin. This time we will be looking at it from the perspective of a .NET C# developer, draw comparisons between the languages, and bridge the gap between these 2 amazing languages.

We'll look at:

  • Kotlin as a language
  • Platforms Kotlin is great for
  • Object Oriented Implementations in Kotlin
  • Extended Features
  • Features Kotlin has that C# doesn't
  • A demo Android application in Kotlin vs a Xamarin.Android app in C#

In the end you will leave with a foundational knowledge of Kotlin and its capabilities to build awesome apps with less code. You should feel comfortable comparing C# applications to Kotlin applications and know where to find resources to learn even more!