Microsoft Ignite - The Tour - Amsterdam 2019 - Day 1

My first day of the Microsoft Ignite - The Tour conference in Amsterdam on Wednesday march 20 in RAI Amsterdam. See my post on the second day here.

The image above is taken from Microsoft’s Ignite site. It’s obvious that they took inspiration from the header of my blog! ;-)

The RAI convention center in Amsterdam

Orientation and Learning in the Hub

08:30 - 09:10 | OP001 | Theater 1 | Neil Peterson and Christina Warren

“Check in, grab breakfast, and join us in The Hub to kick off your learning in a casual atmosphere with your peers. Get a preview of what’s to come over the next two days and check out real world demos from Microsoft experts.”

Azure Pipelines for web, container and mobile apps

09:30 - 10:30 | BRK3695 | G104-G105 | Houssem Dellai

“Azure DevOps comes with a feature for building and releasing apps, called Azure Pipelines. It makes it easy to create CI-CD pipelines that supports multiple platforms (Java, NodeJs, Go, Swift, .NET…). In addition to that, it can deploy to multiple cloud providers (AWS, Heroku, Azure…). This session will guide you on how to create pipelines for different apps: web, dockerized and mobile apps. Not only that, we’ll add also the database. All these cases are with live demos ! And because DevOps is not complete without automation, we’ll have demos for how to create and deploy the infrastructure using ARM templates. Agenda: ASP.NET Core MVC app with Database Angular app using Docker containers Mobile app using Xamarin & App Center Dev-Test-Prod environments Tasks for integration with 3rd parties Deployment to Azure using Infrastructure as Code”

Observation: before starting his demo of using Azure Pipelines to deploy a Java app Houssem asked the - relatively small - room how many Java developers, and only two raised their hands. Fifteen years ago that would have been many, many more. #java-is-dead

Some points I’ve picked up during this talk/demo:

  • Microsoft is supposedly working on enabling caching of packages (like NuGet) in Azure DevOps Services builds. I think that this will take away one the advantages that builds running on our on-premises build servers have over running them on hosted agents.
  • He showed how you can configure code coverage as part of a Maven build task. I’ll have to look into whether this is also available for VS build tasks
  • The new terminology for builds and releases (deployments) is “CI pipeline“ and “CD pipeline“.

Viewing the YAML configuration that a CI pipeline runs on and saving it to your repository allows you to create a build that runs on that YAML file. Your build definition will live next to your code, and can be different across branches!

Example of how this would work for the build pipeline of this blog

When you create a CI pipeline from a YAML file you no longer see tasks in the definition (because it runs on a single file), but when you run the build the separate tasks will appear in the logs.

Example of how this would work for the build pipeline of this blog

I can see us using this a replacement for the build and release definitions templates that we currently store as JSON files in source control at Nextens.

Another thing I noticed was the “Application and Configuration Settings“ of the release pipeline - that’s not in the Azure App Service Deployment task that we have on our on-premises Team Foundation Server 2017, and looks really useful!

Something else that I can see us starting to use when we move away from code-first migration is the SQL Server Database Deploy that was demoed: it looks like you can do idempotent schema changes - Houssem talked of database schemas being compared - using a Dacpac generated as a build task.

The Cloud-based Web Performance Test task is something I also look forward to taking for a ride:

Since I saw a colleague struggling to get SonarQube running last week we should have a look at SonarCloud: “the leading product for Continuous Code Quality online, totally free for open-source projects. It supports all major programming languages, including C#, VB .Net, JavaScript, TypeScript, C/C++ and many more. [..] This Azure DevOps extension provides build tasks that you can add in your build definition. All branches and pull-requests are automatically analyzed, allowing you to discover early any bug or vulnerability in the code. A widget is also available to track the health of the overall application.”

All in all: this talk was really useful and inspiring!

Deploying your application faster and safer

10:50 - 11:50 | DEV20 | Elicium 1 | Damian Brady

“Application deployment has changed drastically over the years, with tedious, manual tasks being replaced by scripted routines. It’s even easier today with cloud services to help you out. In this talk, we’ll take a deep dive into automating and continuously deploying your application using Azure Services. We’ll start with the basics, discussing automated operations that developers control (DevOps) like A/B testing and automated approval gates. We’ll then take that entirely to the cloud using Azure’s new DevOps project, showing you how you can automate the deployment of a frontend web application, backend web service and database, and mobile application with a few clicks of a button.”

Damian started his talk with a video to illustrate the situations before and after the adoption of DevOps:

Donovan Brown’s (Principal DevOps Manager with Microsoft) definition of DevOps:

DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.

Some of my notes:

  • the #4 reason for adopting DevOps: reducing human error
  • I should read the 2018 Accelerate:State of DevOps Strategies for a New Economy report and quote from it to my managers
  • devs are incentivized by change, ops by stability
  • I saw Intellisense in YAML configuration in an Azure pipeline editor!
  • “An agentless job executes tasks on the server without requiring an agent.”
  • “A deployment group job executes tasks on machines defined in a deployment group.”

Damian also showed storing the YAML build definition in source control. What I would like to know if there’s an option to replace tokens in those YAML files to enable using the same file across different development branches that deploy to their own dev environments in Azure (we currently have 6 of those for our dev teams!).

I really liked the concept of having canary slots to deploy to as the last step before going to production. You configure to send a small percentage of your users to that slot, to have them test your latest release in production. When the canary environment works well you deploy to production.

  • LaunchDarkly: feature flag as a service
  • Blue-green deployment is a technique that reduces downtime and risk by running two identical production environments called Blue and Green.

I really liked the concept of having someone sign off for a deployment to production: it’s done via a gate in the Pre-deployment conditions of a CD pipeline that runs on an Azure Function invocation. The Azure function sends a mail to a manager with a link to do a DocuSign, and when that’s done the release is triggered!

Discovering Azure tooling and utilities

12:10 - 13:10 | FUN30 | Hall 11 | Neil Peterson

“Microsoft Azure allows you to build your applications with the full power and resilience of the cloud. But how do you do that? In this module, we’ll show you the tools that Tailwind uses on a daily basis, including the VS Code editor and its available Azure extension. We’ll also introduce you to the Azure Cloud Shell, which allows you to work with Azure resources without the need for the Portal. Finally we’ll show you how Azure Resource Management (ARM) templates can save you time and help you automate infrastructure, reducing the chance of errors during manual human input.”

Neil Peterson

  • I should try editing PowerShell code in Visual Studio Code.

Azure Cloud Shell

  • One of the things you can Azure Cloud Shell for is to test if the code only fails on your machine.
  • Cloud Shell has session-bases filesystem, but you can also save files to its clouddrive which is persisted in a storage account.
  • There’s Visual Studio Code-like editor in Azure Cloud Shell. Start it up with code ..

Cloud Shell code editor

You can run code samples from code.microsoft.com (like https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough) in a sand-boxed Cloud Shell:

It’s all about .NET Core

14:10 - 15:10 | BRK3703 | Emerald Room | Alexej ******

“ASP.NET Core is not just MVC with Controllers and Views or API. Sure there is a lot of usual things that are different from ASP.NET. But there are also some things that good developer should know. Like: IoC/DI, Middleware/Filters, Azure Apps, API, Docker, security, new features and much more.”

This talk was a disaster. Without any introduction the speaker showed slide after slide with seemingly random code samples. When he showed how to minify a CSS file using one of Mads Kristensen VS extensions - in a .NET Core talk! - I left.

There wasn’t really an good alternative session, but I did see half of “Leveraging the power of Microsoft Threat Protection to secure the modern workplace across identities, endpoints, and more”, which was okay but not really useful for me.

Investing in Serverless: less servers, more code

15:30 - 16:30 | DEV50 | Elicium 1 | Jeremy Likness

“Sometimes all you need is a few routines to run in response to a series of events - so why do you need to choose a development framework, deployment strategy and server setup for such a simple need? Wouldn’t it be great if you could just write the simple routines you need and have them run exactly when you need them and scale automatically? Turns out you can with the right cloud services. In this talk we’ll create a set of routines that run on Azure Functions and respond to events in Azure Event Grid. We’ll then orchestrate these functions and messages using Azure Logic Apps.”

  • PaaS reduces waste (servers doing nothing while waiting for a spike in traffic)
  • I had to Google what an SKU was (“a stock keeping unit is a product and service identification code for a store or product, often displayed as a machine-readable bar code that helps track the item for inventory”)

Artillery

Artillery is a tool that you can use to run load tests.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
PS C:\windows\system32> npm install -g artillery
PS C:\windows\system32> artillery quick --count 100 -n 20 http://blog.vaneykelen.com
Started phase 0, duration: 2s @ 23:13:44(+0100) 2019-03-20
Report @ 23:13:54(+0100) 2019-03-20
Elapsed time: 10 seconds
Scenarios launched: 100
Scenarios completed: 16
Requests completed: 1331
RPS sent: 134.91
Request latency:
min: 24.5
max: 3335.3
median: 42.8
p95: 2351.4
p99: 3032.5
Codes:
200: 1331

Report @ 23:13:59(+0100) 2019-03-20
Elapsed time: 15 seconds
Scenarios launched: 0
Scenarios completed: 84
Requests completed: 669
RPS sent: 131.01
Request latency:
min: 16.1
max: 459.2
median: 38.2
p95: 57.3
p99: 154.2
Codes:
200: 669

All virtual users finished
Summary report @ 23:13:59(+0100) 2019-03-20
Scenarios launched: 100
Scenarios completed: 100
Requests completed: 2000
RPS sent: 133.24
Request latency:
min: 16.1
max: 3335.3
median: 41.4
p95: 2034.8
p99: 2945.4
Scenario counts:
0: 100 (100%)
Codes:
200: 2000

I love this!

Event Grid & Logic Apps

This part of the talk had a demo that got the first applause of my day: the upload of an image of a hammer to blob storage triggered an analysis of the image on the Computer Vision API which resulted in the text “close up of a tool” to be inserted in the “machine description” column of a table storage record.

I did not have a look at Event Grid and Logic Apps yet but it looks really useful. Great stuff for making hackathon demos to impress people too: creating events based of mails in a Gmail or Outlook inbox, a Tweet being posted, Azure infrastructure being provisioned (Azure Automation), webhooks.

Durable functions are great for saving money when you have processes that spent most of their time waiting (Task.WhenAll).

Free beer!

That concluded the first day of Ignite. Some observations:

  • The organization is great. Only when I was in the queue to get into my first talk I overheard the people at the door scanning our passes telling them the two people in front of me that there were no more empty seats in the room, which caused them to leave. It turned out that there were ample empty seats scattered around the room, so that was a shame.
  • Hearing people talk I noticed that there were a lot of nationalities at the event. So not only the Dutch are interested in anything that’s free!
  • All my speakers today were male, and I estimate that less than 5% of the audience is female.