CI/CD for .NET with GithHub Actions

We manage all our internal projects with Azure DevOps (projects not only related to Dynamics 365 Business Central). All our code is hosted on Azure DevOps but personally I’m using also GitHub for “external” projects or for sharing codes with the community (yes, Azure DevOps has public repository too but I prefer a separation on many cases). Unfortunately, build pipelines was a big lack for the GitHub platform… until today.

Yesterday GitHub has officially released GitHub Actions, an interesting set of features that permits you to implement CI/CD pipelines right from the GitHub interface.

There’s not too much documentation about the service and all its possibilities at the moment but it seems really interesting if you’re using GitHub as your main platform for hosting your code. I’ve tested the new service by trying to setup a CI/CD workflow on a repository where I have committed a .NET application (a class library we use on NAV and Dynamics 365 Business Central).

To start using GitHub Actions, go to your repository and select the Actions menu:

GitHubAction_01

Here you can find a set of preconfigured templates to use, but unfortunately there’s not a template for .NET applications (only .NET Core at the moment, I was quite surprised for this). If you have a .NET application, you need to manually create a new workflow by selecting the Set up a workflow yourself button:

GitHubAction_02.jpg

Here, you have a window where you need to write your build flow. This is the standard template:

GitHubAction_03.jpg

As you can see, the standard CI/CD pipeline runs on Linux (Ubuntu) and does nothing more than printing some messages.

Here, we have a .NET application and we new to run our action on Windows by using MSBuild. We need to modify the CI/CD pipeline script as follows:

GitHubAction_04.jpg

Here:

  • the image is windows-latest (Windows Server)
  • the actions/checkout@v1 step is a multiline command then pulls our repository to the build server (first line) and then starts MSBuild by compiling our project (thanks to the GitHub support for these details).
  • the second step (actions/upload-artifact@master) is used to upload the final artifact (our DLL file) from the build server to GitHub (without this step, you will not be able to download the final artifact of your build).

If you commit this main.yml file a build trigger is automatically started and you can see the final result by clicking on Actions again:

GitHubAction_05.jpg

If you click on the CI event, you can see the details of the pipeline steps (success, failure and the reasons of the failure):

GitHubAction_06.jpg

If the pipeline is completed successfully, on the top right corner you can download the final build artifact (Artifacts menu):

GitHubAction_07.jpg

The workflow (your pipeline .yml file) is automatically saved in your repository and it’s part of your source control:

GitHubAction_08.jpg

This is only a sample on how to easily create a CI/CD pipeline on GitHub for a .NET application in few easy steps. I think it’s cool and powerful.

I’ve not tested with Powershell yet, but from a GitHub Action you can execute Powershell scripts too. I’m not so sure if GitHub Actions can be used also for Dynamics 365 Business Central projects (this must be explored) but it sounds promising for many other scenarios.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.