This document provides an overview of a conference on .NET application modernization with Pivotal and Azure DevOps from October 7-10, 2019 in Austin. It includes presentations from Jason Stevens of Microsoft and Shawn Neal of Pivotal on approaching modernization, the state of .NET, modernization journeys, and using pipelines and environments. There are also sections on Pivotal and Spring logos and brands.
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
.NET Application Modernization with PAS and Azure DevOps
1. .NET Application Modernization
with Pivotal and Azure DevOps
October 7–10, 2019
Austin Convention Center
Jason Stevens - Senior Software Engineer (Microsoft)
Shawn Neal - Principal Solutions Architect (Pivotal)
4. State of the .NET Union
.NET Framework is the implementation of .NET that’s installed on over one billion machines and thus needs
to remain as compatible as possible. Because of this, it moves at a slower pace than .NET Core. Even
security and bug fixes can cause breaks in applications because applications depend on the previous
behavior. We will make sure that .NET Framework always supports the latest networking protocols, security
standards, and Windows features.
.NET Core is the open source, cross-platform, and fast-moving version of .NET. Because of its side-by-side
nature it can take changes that we can’t risk applying back to .NET Framework. This means that .NET Core
will get new APIs and language features over time that .NET Framework cannot. At Build we showed a demo
how the file APIs are faster on .NET Core. If we put those same changes into .NET Framework we could
break existing applications, and we don’t want to do that.
5. .NET Framework, .NET Core, and .NET 5
· .NET Framework 4.8 will be the last major version of .NET Framework.
· Given many of the API additions in .NET Standard 2.1 require runtime changes in order to be meaningful,
.NET Framework 4.8 will remain on .NET Standard 2.0
· After .NET Core 3.0 we will not port any more features from .NET Framework.
· New applications should be built on .NET Core. .NET Core is where future investments in .NET will
happen.
· Existing applications are safe to remain on .NET Framework which will be supported. Existing applications
that want to take advantage of the new features in .NET should consider moving to .NET Core.
· .NET 5 = .NET Core vNext
· All new development and feature capabilities will be part of .NET 5, including new C# versions.
6.
7. .NET Portfolios Can Be Complex
Invest : Greenfield Invest/Maintain: Modernize Maintain: Legacy, Lift-and-shift Divest
.NET Framework Traditional
Cloud unfriendly Windows tech:
COM+, GAC, registry, MSIs,
Windows auth, file system, etc.
Older workloads for which there
is no dedicated team.
The .NET Core future
Opportunity for new
patterns like microservices,
functions, event-driven
architectures, etc.
.NET Framework Cloud Ready
More easily transformable to a
cloud-friendly (and eventually,
cloud-native) state.
FunnyQuotes UI WebformsFunnyQuotes UI Core Owin Service
9. Modernization Journey
Cloud Friendly Cloud NativeTraditional
On Premise
Windows Server Pets
Installed Dependencies
Large Single Deployable
Scaling is Manual
On Premise/Public Cloud
Windows Server Cattle
Bin Deploy Dependencies
CI/CD
On Premise/Public Cloud
Linux/Windows Containers
Multiple Deployable Units
Service Discovery
Resiliency patterns
12. Swift Method of Software Modernization
https://www.swiftbird.us/
- Answers the Why of modernization
- Technology Agnostic
- Business outcome focused
13. - Cross-discipline Conversation
- Service Candidates
- Bounded Contexts
- Clumps of Business Events
Boris Exercise SNAP-E
Event
Storming
The Swift Method
14. - Cross-discipline Conversation
- Service Candidates
- Bounded Contexts
- Clumps of Business Events
Boris Exercise SNAP-E
Event
Storming
The Swift Method
15. - Cross-discipline Conversation
- Service Candidates
- Bounded Contexts
- Clumps of Business Events
Boris Exercise SNAP-E
Event
Storming
The Swift Method
16. - Relationship Modeling
- Reveal Target Architecture
- Services, APIs, Events
SNAP-E
Event
Storming
The Swift Method
Boris Exercise
21. Azure DevOps Overview
Azure Boards delivers a suite of Agile tools to support planning and tracking work, code
defects, and issues using Kanban and Scrum methods
Azure Repos provides Git repositories or Team Foundation Version Control (TFVC) for
source control of your code
Azure Pipelines provides build and release services to support continuous integration and
delivery of your apps
Azure Test Plans provides several tools to test your apps, including manual/exploratory
testing and continuous testing
Azure Artifacts allows teams to share Maven, npm, and NuGet packages from public and
private sources and integrate package sharing into your CI/CD pipelines
22. Pipelines can be connected to
many different repository types.
They’re defined in YAML and
added to the repo for version
control.
Environments are collections of
resources that can be targeted by
a deployment job within the
pipeline.
24. Azure DevOps Pipeline Goals
5
DB
M
igrations
CF
run-task
to
execute
DB
m
igrations
using
bound
service
instance
4
Push
Apps
Blue/Green
deploy
updated
app
code
to
PCF
3
UnitTestsRealunittests
as
defined
by
being
fast,
isolated,and
predictable.
Static
Analysis
Program
m
atically
enforce
style,secure
coding,and
otherpractices
21
Com
pile
+
Package
Com
pile
w
ebsite,libs,and
tests
to
deployable
artifacts
6
Sm
oke
Tests
Use
headless
brow
serorAPItests
to
validate
entire
stack
w
orks
together
Build Pipeline
Release Pipeline
25. Websites (artifact)
Built using standard publish mechanism in .NET
Publish Profile +
1 Compile + Package
/p:DeployDefaultTarget=WebPublish
/p:DeployOnBuild=true
/p:ArtifactStagingDirectory="$(Build.ArtifactStagingDirectory)"
/p:PublishProfile=FolderProfile
<PublishUrl>
$(ArtifactStagingDirectory)/$(MSBuildProjectName)
</PublishUrl>
29. DB Migration Script/Task
Backwards compatible migrations
On app start?
Cf run-task
5 DB Migrations
$webConfig = "$PSScriptRootWeb.config"
$binDir = "$PSScriptRootbin"
.binmigrate.exe FunnyQuotesCookieDatabase.dll
/startupConfigurationFile=$webConfig /StartUpDirectory=$binDir /verbose
30. Smoke Tests
Execute WebDriver Tests
Real Environment
End to end validation
Similar pattern for UAT and service tests
6 Smoke Tests
31. Build Pipeline Summary
Compile & Package all Commits
Run tests and static analysis
Automatic Deployment to Dev
Deploy all commits automatically
Database Migrations Require Care
Backwards compatibility
Approvals
Require approvals for promotion