Setup basic CI/CD for a Suave .Net Core 2.0 application running on an Azure App Service – Part I

Introduction

Well I started this to learn F#, but I haven’t written a lot of lines of code yet. Before the real dive into F# I wanted to test out my stack, I wanted to use a lot of new technologies because… shiny new things. So I tried using all technologies with the volume set to 11, as latest as possible. This blog is about setting up an Suave application on .Net Core 2.0 to run on an Azure Web App, using the ci and cd facilities of VSTS. Missing here is tests, I’ll get to that in a later blog. Also I thought I had things working with Paket, but I ran in some problems I might try to solve later, so I ditched that.

Prerequisites

Before we start you’ll need to have a GitHub repository, a VSTS project and an Azure Web App setup. And of course the bits and pieces installed I described in my previous blog post, plus Git. I also installed a VS Code extension gitignore so folders won’t be committed to git.

Setup the application

Setup solution and project

We’ll start with adding a console project and add it to a newly created solution using the dotnet cli:

dotnet new console -n SuaveNetCoreOnAzure -lang F#
dotnet new sln -n SuaveNetCoreOnAzure
dotnet sln add SuaveNetCoreOnAzure/SuaveNetCoreOnAzure.fsproj

Next add a new file to the project directory named web.config. Make sure to add it to the fsproj too:


   
   
    Always 
   

Another thing we should do for our application to deploy correctly later is the add the RuntimeIdentifier to the fsproj. This is used to created a self contained deployment package.


  Exe
  netcoreapp2.0
  win10-x64

Add references

Since Paket didn’t work for me during the writing of this blog, so I tried using the Install-Package and the dotnet add package commands to add project references and both failed adding the PackageReference tag to the fsproj file. So I just manually added the tag to the project file so it looks like this:

  
   
   
   
 

By calling dotnet restore in the terminal the package was downloaded. So everybody happy I guess.

Add code

Next some code! I know nothing yet so I got this from some examples I found on internet and modified it little. I won’t get into the code too much now, but the function appWebPart is used to configure the routing, the getPort function translates an argument to a integer. We’ll use this later to get an argument passed to the console application and configure this as the port number the suave web server will listen to.

let appWebPart =
  choose
    [ GET >=> choose
    [ path "/hello">=> OK "Hello F#.Net Core 2.0 with Suave running as Azure App Service"]]

let getPort argv =
  match Array.length argv with
    |0->8080us
    |_-> argv.[0]|> uint16

[]
let main argv =
  let conf =
    { defaultConfig with
      bindings = [ HttpBinding.create HTTP IPAddress.Loopback <| getPort argv ] }
    startWebServer conf appWebPart

The web.config should be looking like this:


  
    
      
      
    
    
  

Check if everything by running the build command or even running the application

dotnet build
dotnet run --project SuaveNetCoreOnAzure

Add to git

Now we need to put this in a git repository. I used gitignore extension to add the folder obj and bin to the .gitignore file. Then initialized git and committed the files. I normally would have used the UI more, but I'm a good boy and used the git commands for this blog post.

git init
git remote add origin https://github.com/EelcoMulder/SuaveNetCoreOnAzure.git
git add -A
git commit -m 'Initial commit'
git push -u origin master

The application is prepared and safely in GitHub

Next part in the next part we'll setup build & release.

1 thought on “Setup basic CI/CD for a Suave .Net Core 2.0 application running on an Azure App Service – Part I

Leave a Reply

Your email address will not be published. Required fields are marked *

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