SlideShare a Scribd company logo
Microsoft Game Stack. Level Up.
HoloLens Unity Build Pipelines
on Azure DevOps
Sarah Sexton
Microsoft Game Stack. Level Up.
Help me help you!
Microsoft Game Stack. Level Up.
• Intro
• Why Use a Pipeline?
• Which Pipeline System should I use?
• My First Pipeline
• Next Steps and other Considerations
• Resources
Microsoft Game Stack. Level Up.
Introduction
Sarah Sexton
https://aka.ms/SarahSays GitHub.com/SarahSexton Twitter: @Saelia
Software Engineer Microsoft Redmond, USA
Microsoft Game Stack. Level Up.
• Intro
• Why Use a Pipeline?
• Which Pipeline System should I use?
• My First Pipeline
• Next Steps and other Considerations
• Resources
Microsoft Game Stack. Level Up.
Why use a pipeline? Without one:
Code
Manual
Deploy to
Device
Manual Visual
Studio
Build
Manual Unity
Build
Commit and
push to repo
Test
More Coding
Manual unit
testing
Microsoft Game Stack. Level Up.
Why use a pipeline? With one:
Code
Automatic
Send Build to
App Center
Automatic
Visual Studio
Build
Automatic
Unity Build
Commit and
push to repo
Download
build on
device
More Coding …
Test
Automatic unit
testing
Microsoft Game Stack. Level Up.
Well, because it can’t build 2-step UWP projects. 😟
Why not Unity Cloud Build?
Microsoft Game Stack. Level Up.
Which Pipeline System should I use?
Local/Manual Process Unity Cloud Build Custom Pipeline
-Requires human
resource time and
equipment.
-Process is error-prone.
-ONLY builds projects
from Unity.
-Cannot add custom
PowerShell scripts.
-Cannot build 2-step
UWP projects.
(ex: Azure DevOps or
GitHub Actions)
-Fully automatable.
-Fully customizable.
-Self-hosted agent
can automate any
manual task.
Microsoft Game Stack. Level Up.
Pros and Cons of a pipeline:
Pro
• Increase efficiency
• Spend more time doing important tasks
• Waste less time on builds that ultimately fail
• Collaborate faster
• Build artifacts available to whole team
• Ensure unit tests pass before every build
• Work smarter
• Grab build artifacts easily
• Review PRs more wisely
• Build the project without a PC
Con
• The time for a single “Commit to Deployment”
could turn out to be slightly longer
• Initial setup time
• Team onboarding/training
• May cost money
• May require a Unity Plus or Pro license
Microsoft Game Stack. Level Up.
Prerequisites
 Azure DevOps Organization/Tenant
 Microsoft Account or a work/organization account
 Knowledge how to add users to your Azure Active Directory Tenant
(if you plan to collaborate)
 Knowledge of how to ensure the Mixed Reality Toolkit (MRTK)
foundation package is added to a Unity project
(Release v2.1.0 at the time of this writing)
 A Unity 2019 project*
(2019.2.x at the time of this writing.) (*With MRTK Foundation added.)
 A Unity Plus/Pro license serial key
(With at least 1 available seat to activate.)
Microsoft Game Stack. Level Up.
A Unity Plus/Pro license is required (by Unity company)
to build using hosted agents. 😟
Why not Unity Personal (free)?
Microsoft Game Stack. Level Up.
DEMO
Start a build in Azure DevOps
Microsoft Game Stack. Level Up.
• Intro
• Why Use a Pipeline?
• Which Pipeline System should I use?
• My First Pipeline
• Next Steps and other Considerations
• Resources
Microsoft Game Stack. Level Up.
Which Pipeline System should I use?
Local/Manual Process Unity Cloud Build Custom Pipeline
-Requires human
resource time and
equipment.
-Process is error-prone.
-ONLY builds projects
from Unity.
-Cannot add custom
PowerShell scripts.
-Cannot build 2-step
UWP projects.
(ex: Azure DevOps or
GitHub Actions)
-Fully automatable.
-Fully customizable.
-Self-hosted agent
can automate any
manual task.
Microsoft Game Stack. Level Up.
• Intro
• Why Use a Pipeline?
• Which Pipeline System should I use?
• My First Pipeline
• Next Steps and other Considerations
• Resources
Microsoft Game Stack. Level Up.
Section Title Goes HereYour First Pipeline
Microsoft Game Stack. Level Up.
Your First Pipeline
Microsoft Hosted Agent:
• Tells Azure DevOps to spin up a
Windows VM image that has Windows
and VS installed.
• Cheap because it’s only yours while
you use it – first one is free
• Only pay a monthly fee for
simultaneous machines running.
• Your mileage may vary
Self-Hosted Agent:
• Could be a Windows VM living in your
Azure subscription
• Could be a real computer
• More expensive to run constantly, but
offers more manual control
• Faster than a Microsoft Hosted Agent
Microsoft Game Stack. Level Up.
We’ve set up a template for you!
GitHub.com/microsoft/Azure-DevOps-YAML-for-Unity
Microsoft Game Stack. Level Up.
What does it do?
• Publishes the solution folder & pipeline artifacts to target path
# The path to the folder which contains the Assets folder of the project.
# If your Unity project is located in a subfolder of your repo, make sure
it is reflected in this.
unity.projectPath: '$(System.DefaultWorkingDirectory)/'
Microsoft Game Stack. Level Up.
What does it do?
• Finds, downloads, and caches NuGet
• Restores the NuGet packages for the solution
# Find, download, and cache NuGet:
- task: NuGetToolInstaller@1
displayName: 'Install NuGet'
# Restore the NuGet packages for the solution:
- task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
restoreSolution: '$(unity.projectPath)$(unity.outputPath)/*.sln’
# Change to '$(unity.projectPath)$(unity.outputPath)/*.sln' to resume two jobs
Microsoft Game Stack. Level Up.
What does it do?
• Builds the solution with Visual Studio to make an .appx
• Publishes the package (.appxbundle/.msixbundle) it just built
# Build the solution with Visual Studio to make an .appx:
- task: MSBuild@1
displayName: 'Build solution'
inputs:
solution: '$(unity.projectPath)$(unity.outputPath)' # Change to
'$(unity.projectPath)$(unity.outputPath)' to resume two jobs
configuration: Release
msbuildArguments: '/p:AppxBundle=Always /p:AppxBundlePlatforms="$(vs.appxPlatforms)"'
# Publish the package (.appxbundle/.msixbundle) that we just built:
- task: PublishPipelineArtifact@0
displayName: 'Publish Pipeline Artifact'
inputs:
artifactName: 'apppackages'
targetPath: '$(unity.projectPath)$(unity.outputPath)$(vs.packagePath)' # Change to
'$(unity.projectPath)$(unity.outputPath)$(vs.packagePath)' to resume two jobs
Microsoft Game Stack. Level Up.
What does it do?
• Builds the Visual Studio solution generated from the previous job
• Creates a package.
# Build the Visual Studio solution generated from the previous job and create a package.
- job: unitytests
dependsOn: unity
condition: and(succeeded(), eq(variables['runTests'], 'true'))
displayName: Unity Tests
variables:
installCached: false
steps:
# What version of Unity does the project say that it wants?:
- task: UnityGetProjectVersionTask@1
name: unitygetprojectversion
displayName: Calling UnityGetProjectVersionV1 from unity-azure-pipelines-tasks extension
inputs:
unityProjectPath: '$(unity.projectPath)'
Microsoft Game Stack. Level Up.
Unity Unit Tests
RayWenderlich.com/9454-introduction-to-unity-unit-testing
Microsoft Game Stack. Level Up.
YAML
# Install Unity (from cache or download) then create Visual Studio project from Unity
- job: unity
displayName: Unity Build
variables:
installCached: false
# Try to ensure that we have the right secrets set up to continue, otherwise fail the job:
condition: or( not(variables['unity.username']), not(variables['unity.password’]),
not(variables['unity.serialKey']) )
steps:
# What version of Unity does the project say that it wants?:
- task: UnityGetProjectVersionTask@1
name: unitygetprojectversion
displayName: Calling UnityGetProjectVersionV1 from unity-azure-pipelines-tasks extension
inputs:
unityProjectPath: '$(unity.projectPath)'
Microsoft Game Stack. Level Up.
YAML
# Install Unity (from cache or download) then create Visual Studio project from Unity
- job: unity
displayName: Unity Build
variables:
installCached: false
# Try to ensure that we have the right secrets set up to continue, otherwise fail the job:
condition: or( not(variables['unity.username']), not(variables['unity.password’]),
not(variables['unity.serialKey']) )
steps:
# What version of Unity does the project say that it wants?:
- task: UnityGetProjectVersionTask@1
name: unitygetprojectversion
displayName: Calling UnityGetProjectVersionV1 from unity-azure-pipelines-tasks extension
inputs:
unityProjectPath: '$(unity.projectPath)'
Microsoft Game Stack. Level Up.
YAML
# Install Unity (from cache or download) then create Visual Studio project from Unity
- job: unity
displayName: Unity Build
variables:
installCached: false
# Try to ensure that we have the right secrets set up to continue, otherwise fail the job:
condition: or( not(variables['unity.username']), not(variables['unity.password’]),
not(variables['unity.serialKey']) )
steps:
# What version of Unity does the project say that it wants?:
- task: UnityGetProjectVersionTask@1
name: unitygetprojectversion
displayName: Calling UnityGetProjectVersionV1 from unity-azure-pipelines-tasks extension
inputs:
unityProjectPath: '$(unity.projectPath)'
Microsoft Game Stack. Level Up.
Upload Azure-Pipelines.yml to Repository
Microsoft Game Stack. Level Up.
Add secret variables
Microsoft Game Stack. Level Up.
Create a new build pipeline
Microsoft Game Stack. Level Up.
Link this new YAML up in Azure DevOps
Microsoft Game Stack. Level Up.
This Azure DevOps "recipe" YAML will:
• Run Unity Unit Tests
• Dynamically activate
• Build UWP project
• Save new Visual Studio project as “artifact”
• Restore NuGet for .sln, build Visual Studio project
• Save the app packages it built as an “artifact”
• Deactivate Unity when finished
Microsoft Game Stack. Level Up.
DEMO
Setting up your own Azure DevOps build pipeline
Microsoft Game Stack. Level Up.
• Intro
• Why Use a Pipeline?
• Which Pipeline System should I use?
• My First Pipeline
• Next Steps and other Considerations
• Resources
Microsoft Game Stack. Level Up.
Section Title Goes Here
Next Steps and other
Considerations
Microsoft Game Stack. Level Up.
Define automatic build steps for
everything, no matter how trivial.
Apply branch policies to require
passing automated builds.
Publish successful build artifacts
to App Center for distribution.
Enhance your entire process
Microsoft Game Stack. Level Up.
Unity keys can only be on
2 machines at once.
If you want to run a series of build agents,
dynamically grabbing keys, you could
implement a key management system.
Unity Pro Keys Key Management
store.unity3d.com/account/licenses/other
Microsoft Game Stack. Level Up.
Helpful examples: MRTK’s automated pipelines
https://github.com/microsoft/MixedRealityToolkit-Unity/tree/mrtk_development/pipelines
Microsoft Game Stack. Level Up.
• Intro
• Why Use a Pipeline?
• Which Pipeline System should I use?
• My First Pipeline
• Next Steps and other Considerations
• Resources
Microsoft Game Stack. Level Up.
Resources
• Our example YAML:
GitHub.com/Microsoft/Azure-DevOps-YAML-for-Unity
• Unity + Azure DevOps Plugin:
Dinomite-studios.github.io/unity-azure-pipelines-tasks
• Unity Store license link:
https://store.unity3d.com/account/licenses/other
• YAML documentation:
Docs.Microsoft.Com/en-us/azure/devops/pipelines/yaml-schema?view=azure-
devops&tabs=schema
• Unity Unit Tests:
RayWenderlich.com/9454-introduction-to-unity-unit-testing
• MRTK:
GitHub.com/microsoft/MixedRealityToolkit-Unity/
Microsoft Game Stack. Level Up.

More Related Content

What's hot

MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
Seungmo Koo
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor App
TomomitsuKusaba
 
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
ShionITO1
 
Jira + Confluence + Bitbucket으로 이슈 트래킹 걸음마 떼기
Jira + Confluence + Bitbucket으로 이슈 트래킹 걸음마 떼기Jira + Confluence + Bitbucket으로 이슈 트래킹 걸음마 떼기
Jira + Confluence + Bitbucket으로 이슈 트래킹 걸음마 떼기
KyeongmanKang
 
정보시스템 하드웨어 규모산정 지침
정보시스템 하드웨어 규모산정 지침정보시스템 하드웨어 규모산정 지침
정보시스템 하드웨어 규모산정 지침
sam Cyberspace
 
게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치Seungjae Lee
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
日本マイクロソフト株式会社
 
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
UnityTechnologiesJapan002
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
JustSystems Corporation
 
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~devsumi2009
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
강 민우
 
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
Brian Hong
 
황규영 포트폴리오
황규영 포트폴리오황규영 포트폴리오
황규영 포트폴리오
Q_0
 
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Amazon Web Services Korea
 
[AIS 2018][Team Practice] CMMI 기반 환경의 애자일-투씨드
[AIS 2018][Team Practice] CMMI 기반 환경의 애자일-투씨드[AIS 2018][Team Practice] CMMI 기반 환경의 애자일-투씨드
[AIS 2018][Team Practice] CMMI 기반 환경의 애자일-투씨드
Atlassian 대한민국
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
Developing AR and VR Experiences with Unity
Developing AR and VR Experiences with UnityDeveloping AR and VR Experiences with Unity
Developing AR and VR Experiences with Unity
Mark Billinghurst
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
Jongwon Kim
 
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Kentaro Yoshida
 

What's hot (20)

MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor App
 
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
 
Jira + Confluence + Bitbucket으로 이슈 트래킹 걸음마 떼기
Jira + Confluence + Bitbucket으로 이슈 트래킹 걸음마 떼기Jira + Confluence + Bitbucket으로 이슈 트래킹 걸음마 떼기
Jira + Confluence + Bitbucket으로 이슈 트래킹 걸음마 떼기
 
정보시스템 하드웨어 규모산정 지침
정보시스템 하드웨어 규모산정 지침정보시스템 하드웨어 규모산정 지침
정보시스템 하드웨어 규모산정 지침
 
게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
 
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
 
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
 
황규영 포트폴리오
황규영 포트폴리오황규영 포트폴리오
황규영 포트폴리오
 
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
 
[AIS 2018][Team Practice] CMMI 기반 환경의 애자일-투씨드
[AIS 2018][Team Practice] CMMI 기반 환경의 애자일-투씨드[AIS 2018][Team Practice] CMMI 기반 환경의 애자일-투씨드
[AIS 2018][Team Practice] CMMI 기반 환경의 애자일-투씨드
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
 
Developing AR and VR Experiences with Unity
Developing AR and VR Experiences with UnityDeveloping AR and VR Experiences with Unity
Developing AR and VR Experiences with Unity
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
 
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
 

Similar to HoloLens Unity Build Pipelines on Azure DevOps

Continuous integration in games development
Continuous integration in games developmentContinuous integration in games development
Continuous integration in games development
Nebojsa Brindic
 
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agentsPVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
Andrey Karpov
 
AWS Code Services
AWS Code ServicesAWS Code Services
AWS Code Services
Amazon Web Services
 
Announcing AWS CodeBuild - January 2017 Online Teck Talks
Announcing AWS CodeBuild - January 2017 Online Teck TalksAnnouncing AWS CodeBuild - January 2017 Online Teck Talks
Announcing AWS CodeBuild - January 2017 Online Teck Talks
Amazon Web Services
 
Automated Build using teamcity
Automated Build using teamcityAutomated Build using teamcity
Automated Build using teamcity
Md Jawed
 
M365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx VersionM365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx Version
Thomas Daly
 
The Build System of Commercial RCP Application A Case Study
The Build System of Commercial RCP Application A Case StudyThe Build System of Commercial RCP Application A Case Study
The Build System of Commercial RCP Application A Case Study
gustavoeliano
 
Advanced Debugging with Visual Studio 2013 Preview
Advanced Debugging with Visual Studio 2013 PreviewAdvanced Debugging with Visual Studio 2013 Preview
Advanced Debugging with Visual Studio 2013 PreviewDanijel Malik
 
Migrating Unity3D projects to Windows 8
Migrating Unity3D projects to Windows 8Migrating Unity3D projects to Windows 8
Migrating Unity3D projects to Windows 8
282productions
 
TechMentor Fall, 2011 - WDS Tricks You Didn't Know
TechMentor Fall, 2011 - WDS Tricks You Didn't KnowTechMentor Fall, 2011 - WDS Tricks You Didn't Know
TechMentor Fall, 2011 - WDS Tricks You Didn't Know
Concentrated Technology
 
EclipseCon 2016 - OCCIware : one Cloud API to rule them all
EclipseCon 2016 - OCCIware : one Cloud API to rule them allEclipseCon 2016 - OCCIware : one Cloud API to rule them all
EclipseCon 2016 - OCCIware : one Cloud API to rule them all
Marc Dutoo
 
OCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open Wide
OCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open WideOCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open Wide
OCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open Wide
OCCIware
 
Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)
Mikkel Flindt Heisterberg
 
Streamlining React Component Development and Sharing with bit.pptx
Streamlining React Component Development and Sharing with bit.pptxStreamlining React Component Development and Sharing with bit.pptx
Streamlining React Component Development and Sharing with bit.pptx
ShubhamJayswal6
 
Release Management with Visual Studio Team Services and Office Dev PnP
Release Management with Visual Studio Team Services and Office Dev PnPRelease Management with Visual Studio Team Services and Office Dev PnP
Release Management with Visual Studio Team Services and Office Dev PnP
Petter Skodvin-Hvammen
 
Writing native Linux desktop apps with JavaScript
Writing native Linux desktop apps with JavaScriptWriting native Linux desktop apps with JavaScript
Writing native Linux desktop apps with JavaScript
Igalia
 
Deploy applications with TFS Build
Deploy applications with TFS BuildDeploy applications with TFS Build
Deploy applications with TFS Build
Gian Maria Ricci
 
Introduction to html5 game programming with ImpactJs
Introduction to html5 game programming with ImpactJsIntroduction to html5 game programming with ImpactJs
Introduction to html5 game programming with ImpactJs
Luca Galli
 

Similar to HoloLens Unity Build Pipelines on Azure DevOps (20)

Continuous integration in games development
Continuous integration in games developmentContinuous integration in games development
Continuous integration in games development
 
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agentsPVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
 
Vs2005p
Vs2005pVs2005p
Vs2005p
 
AWS Code Services
AWS Code ServicesAWS Code Services
AWS Code Services
 
Announcing AWS CodeBuild - January 2017 Online Teck Talks
Announcing AWS CodeBuild - January 2017 Online Teck TalksAnnouncing AWS CodeBuild - January 2017 Online Teck Talks
Announcing AWS CodeBuild - January 2017 Online Teck Talks
 
Deploying w7
Deploying w7Deploying w7
Deploying w7
 
Automated Build using teamcity
Automated Build using teamcityAutomated Build using teamcity
Automated Build using teamcity
 
M365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx VersionM365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx Version
 
The Build System of Commercial RCP Application A Case Study
The Build System of Commercial RCP Application A Case StudyThe Build System of Commercial RCP Application A Case Study
The Build System of Commercial RCP Application A Case Study
 
Advanced Debugging with Visual Studio 2013 Preview
Advanced Debugging with Visual Studio 2013 PreviewAdvanced Debugging with Visual Studio 2013 Preview
Advanced Debugging with Visual Studio 2013 Preview
 
Migrating Unity3D projects to Windows 8
Migrating Unity3D projects to Windows 8Migrating Unity3D projects to Windows 8
Migrating Unity3D projects to Windows 8
 
TechMentor Fall, 2011 - WDS Tricks You Didn't Know
TechMentor Fall, 2011 - WDS Tricks You Didn't KnowTechMentor Fall, 2011 - WDS Tricks You Didn't Know
TechMentor Fall, 2011 - WDS Tricks You Didn't Know
 
EclipseCon 2016 - OCCIware : one Cloud API to rule them all
EclipseCon 2016 - OCCIware : one Cloud API to rule them allEclipseCon 2016 - OCCIware : one Cloud API to rule them all
EclipseCon 2016 - OCCIware : one Cloud API to rule them all
 
OCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open Wide
OCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open WideOCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open Wide
OCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open Wide
 
Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)
 
Streamlining React Component Development and Sharing with bit.pptx
Streamlining React Component Development and Sharing with bit.pptxStreamlining React Component Development and Sharing with bit.pptx
Streamlining React Component Development and Sharing with bit.pptx
 
Release Management with Visual Studio Team Services and Office Dev PnP
Release Management with Visual Studio Team Services and Office Dev PnPRelease Management with Visual Studio Team Services and Office Dev PnP
Release Management with Visual Studio Team Services and Office Dev PnP
 
Writing native Linux desktop apps with JavaScript
Writing native Linux desktop apps with JavaScriptWriting native Linux desktop apps with JavaScript
Writing native Linux desktop apps with JavaScript
 
Deploy applications with TFS Build
Deploy applications with TFS BuildDeploy applications with TFS Build
Deploy applications with TFS Build
 
Introduction to html5 game programming with ImpactJs
Introduction to html5 game programming with ImpactJsIntroduction to html5 game programming with ImpactJs
Introduction to html5 game programming with ImpactJs
 

More from Sarah Sexton

A Whirlwind Tour of Recurrent Neural Networks
A Whirlwind Tour of Recurrent Neural NetworksA Whirlwind Tour of Recurrent Neural Networks
A Whirlwind Tour of Recurrent Neural Networks
Sarah Sexton
 
Recurrent Neural Networks (RNN)
Recurrent Neural Networks (RNN)Recurrent Neural Networks (RNN)
Recurrent Neural Networks (RNN)
Sarah Sexton
 
Developing for Consoles as an Indie in 2018
Developing for Consoles as an Indie in 2018Developing for Consoles as an Indie in 2018
Developing for Consoles as an Indie in 2018
Sarah Sexton
 
Implementing LUIS in Node.js
Implementing LUIS in Node.jsImplementing LUIS in Node.js
Implementing LUIS in Node.js
Sarah Sexton
 
Mixed Reality
Mixed RealityMixed Reality
Mixed Reality
Sarah Sexton
 
Code camp HoloLens Build and Deploy
Code camp HoloLens Build and DeployCode camp HoloLens Build and Deploy
Code camp HoloLens Build and Deploy
Sarah Sexton
 
How to Build and Deploy to HoloLens
How to Build and Deploy to HoloLensHow to Build and Deploy to HoloLens
How to Build and Deploy to HoloLens
Sarah Sexton
 
Breaking into Bots
Breaking into BotsBreaking into Bots
Breaking into Bots
Sarah Sexton
 
Getting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot FrameworkGetting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot Framework
Sarah Sexton
 
Word Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with TraceryWord Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with Tracery
Sarah Sexton
 
Video game development for everybody
Video game development for everybodyVideo game development for everybody
Video game development for everybody
Sarah Sexton
 
Introduction to Unity3D and Building your First Game
Introduction to Unity3D and Building your First GameIntroduction to Unity3D and Building your First Game
Introduction to Unity3D and Building your First Game
Sarah Sexton
 
Building Your First Node.js App and Publishing to Azure
Building Your First Node.js App and Publishing to AzureBuilding Your First Node.js App and Publishing to Azure
Building Your First Node.js App and Publishing to Azure
Sarah Sexton
 
New High Score! Leaderboards in the Cloud
New High Score! Leaderboards in the CloudNew High Score! Leaderboards in the Cloud
New High Score! Leaderboards in the Cloud
Sarah Sexton
 
Developing for Consoles as an Indie in 2015
Developing for Consoles as an Indie in 2015Developing for Consoles as an Indie in 2015
Developing for Consoles as an Indie in 2015
Sarah Sexton
 

More from Sarah Sexton (15)

A Whirlwind Tour of Recurrent Neural Networks
A Whirlwind Tour of Recurrent Neural NetworksA Whirlwind Tour of Recurrent Neural Networks
A Whirlwind Tour of Recurrent Neural Networks
 
Recurrent Neural Networks (RNN)
Recurrent Neural Networks (RNN)Recurrent Neural Networks (RNN)
Recurrent Neural Networks (RNN)
 
Developing for Consoles as an Indie in 2018
Developing for Consoles as an Indie in 2018Developing for Consoles as an Indie in 2018
Developing for Consoles as an Indie in 2018
 
Implementing LUIS in Node.js
Implementing LUIS in Node.jsImplementing LUIS in Node.js
Implementing LUIS in Node.js
 
Mixed Reality
Mixed RealityMixed Reality
Mixed Reality
 
Code camp HoloLens Build and Deploy
Code camp HoloLens Build and DeployCode camp HoloLens Build and Deploy
Code camp HoloLens Build and Deploy
 
How to Build and Deploy to HoloLens
How to Build and Deploy to HoloLensHow to Build and Deploy to HoloLens
How to Build and Deploy to HoloLens
 
Breaking into Bots
Breaking into BotsBreaking into Bots
Breaking into Bots
 
Getting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot FrameworkGetting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot Framework
 
Word Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with TraceryWord Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with Tracery
 
Video game development for everybody
Video game development for everybodyVideo game development for everybody
Video game development for everybody
 
Introduction to Unity3D and Building your First Game
Introduction to Unity3D and Building your First GameIntroduction to Unity3D and Building your First Game
Introduction to Unity3D and Building your First Game
 
Building Your First Node.js App and Publishing to Azure
Building Your First Node.js App and Publishing to AzureBuilding Your First Node.js App and Publishing to Azure
Building Your First Node.js App and Publishing to Azure
 
New High Score! Leaderboards in the Cloud
New High Score! Leaderboards in the CloudNew High Score! Leaderboards in the Cloud
New High Score! Leaderboards in the Cloud
 
Developing for Consoles as an Indie in 2015
Developing for Consoles as an Indie in 2015Developing for Consoles as an Indie in 2015
Developing for Consoles as an Indie in 2015
 

Recently uploaded

LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 

Recently uploaded (20)

LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 

HoloLens Unity Build Pipelines on Azure DevOps

  • 1. Microsoft Game Stack. Level Up. HoloLens Unity Build Pipelines on Azure DevOps Sarah Sexton
  • 2. Microsoft Game Stack. Level Up. Help me help you!
  • 3. Microsoft Game Stack. Level Up. • Intro • Why Use a Pipeline? • Which Pipeline System should I use? • My First Pipeline • Next Steps and other Considerations • Resources
  • 4. Microsoft Game Stack. Level Up. Introduction Sarah Sexton https://aka.ms/SarahSays GitHub.com/SarahSexton Twitter: @Saelia Software Engineer Microsoft Redmond, USA
  • 5. Microsoft Game Stack. Level Up. • Intro • Why Use a Pipeline? • Which Pipeline System should I use? • My First Pipeline • Next Steps and other Considerations • Resources
  • 6. Microsoft Game Stack. Level Up. Why use a pipeline? Without one: Code Manual Deploy to Device Manual Visual Studio Build Manual Unity Build Commit and push to repo Test More Coding Manual unit testing
  • 7. Microsoft Game Stack. Level Up. Why use a pipeline? With one: Code Automatic Send Build to App Center Automatic Visual Studio Build Automatic Unity Build Commit and push to repo Download build on device More Coding … Test Automatic unit testing
  • 8. Microsoft Game Stack. Level Up. Well, because it can’t build 2-step UWP projects. 😟 Why not Unity Cloud Build?
  • 9. Microsoft Game Stack. Level Up. Which Pipeline System should I use? Local/Manual Process Unity Cloud Build Custom Pipeline -Requires human resource time and equipment. -Process is error-prone. -ONLY builds projects from Unity. -Cannot add custom PowerShell scripts. -Cannot build 2-step UWP projects. (ex: Azure DevOps or GitHub Actions) -Fully automatable. -Fully customizable. -Self-hosted agent can automate any manual task.
  • 10. Microsoft Game Stack. Level Up. Pros and Cons of a pipeline: Pro • Increase efficiency • Spend more time doing important tasks • Waste less time on builds that ultimately fail • Collaborate faster • Build artifacts available to whole team • Ensure unit tests pass before every build • Work smarter • Grab build artifacts easily • Review PRs more wisely • Build the project without a PC Con • The time for a single “Commit to Deployment” could turn out to be slightly longer • Initial setup time • Team onboarding/training • May cost money • May require a Unity Plus or Pro license
  • 11. Microsoft Game Stack. Level Up. Prerequisites  Azure DevOps Organization/Tenant  Microsoft Account or a work/organization account  Knowledge how to add users to your Azure Active Directory Tenant (if you plan to collaborate)  Knowledge of how to ensure the Mixed Reality Toolkit (MRTK) foundation package is added to a Unity project (Release v2.1.0 at the time of this writing)  A Unity 2019 project* (2019.2.x at the time of this writing.) (*With MRTK Foundation added.)  A Unity Plus/Pro license serial key (With at least 1 available seat to activate.)
  • 12. Microsoft Game Stack. Level Up. A Unity Plus/Pro license is required (by Unity company) to build using hosted agents. 😟 Why not Unity Personal (free)?
  • 13. Microsoft Game Stack. Level Up. DEMO Start a build in Azure DevOps
  • 14. Microsoft Game Stack. Level Up. • Intro • Why Use a Pipeline? • Which Pipeline System should I use? • My First Pipeline • Next Steps and other Considerations • Resources
  • 15. Microsoft Game Stack. Level Up. Which Pipeline System should I use? Local/Manual Process Unity Cloud Build Custom Pipeline -Requires human resource time and equipment. -Process is error-prone. -ONLY builds projects from Unity. -Cannot add custom PowerShell scripts. -Cannot build 2-step UWP projects. (ex: Azure DevOps or GitHub Actions) -Fully automatable. -Fully customizable. -Self-hosted agent can automate any manual task.
  • 16. Microsoft Game Stack. Level Up. • Intro • Why Use a Pipeline? • Which Pipeline System should I use? • My First Pipeline • Next Steps and other Considerations • Resources
  • 17. Microsoft Game Stack. Level Up. Section Title Goes HereYour First Pipeline
  • 18. Microsoft Game Stack. Level Up. Your First Pipeline Microsoft Hosted Agent: • Tells Azure DevOps to spin up a Windows VM image that has Windows and VS installed. • Cheap because it’s only yours while you use it – first one is free • Only pay a monthly fee for simultaneous machines running. • Your mileage may vary Self-Hosted Agent: • Could be a Windows VM living in your Azure subscription • Could be a real computer • More expensive to run constantly, but offers more manual control • Faster than a Microsoft Hosted Agent
  • 19. Microsoft Game Stack. Level Up. We’ve set up a template for you! GitHub.com/microsoft/Azure-DevOps-YAML-for-Unity
  • 20. Microsoft Game Stack. Level Up. What does it do? • Publishes the solution folder & pipeline artifacts to target path # The path to the folder which contains the Assets folder of the project. # If your Unity project is located in a subfolder of your repo, make sure it is reflected in this. unity.projectPath: '$(System.DefaultWorkingDirectory)/'
  • 21. Microsoft Game Stack. Level Up. What does it do? • Finds, downloads, and caches NuGet • Restores the NuGet packages for the solution # Find, download, and cache NuGet: - task: NuGetToolInstaller@1 displayName: 'Install NuGet' # Restore the NuGet packages for the solution: - task: NuGetCommand@2 displayName: 'NuGet restore' inputs: restoreSolution: '$(unity.projectPath)$(unity.outputPath)/*.sln’ # Change to '$(unity.projectPath)$(unity.outputPath)/*.sln' to resume two jobs
  • 22. Microsoft Game Stack. Level Up. What does it do? • Builds the solution with Visual Studio to make an .appx • Publishes the package (.appxbundle/.msixbundle) it just built # Build the solution with Visual Studio to make an .appx: - task: MSBuild@1 displayName: 'Build solution' inputs: solution: '$(unity.projectPath)$(unity.outputPath)' # Change to '$(unity.projectPath)$(unity.outputPath)' to resume two jobs configuration: Release msbuildArguments: '/p:AppxBundle=Always /p:AppxBundlePlatforms="$(vs.appxPlatforms)"' # Publish the package (.appxbundle/.msixbundle) that we just built: - task: PublishPipelineArtifact@0 displayName: 'Publish Pipeline Artifact' inputs: artifactName: 'apppackages' targetPath: '$(unity.projectPath)$(unity.outputPath)$(vs.packagePath)' # Change to '$(unity.projectPath)$(unity.outputPath)$(vs.packagePath)' to resume two jobs
  • 23. Microsoft Game Stack. Level Up. What does it do? • Builds the Visual Studio solution generated from the previous job • Creates a package. # Build the Visual Studio solution generated from the previous job and create a package. - job: unitytests dependsOn: unity condition: and(succeeded(), eq(variables['runTests'], 'true')) displayName: Unity Tests variables: installCached: false steps: # What version of Unity does the project say that it wants?: - task: UnityGetProjectVersionTask@1 name: unitygetprojectversion displayName: Calling UnityGetProjectVersionV1 from unity-azure-pipelines-tasks extension inputs: unityProjectPath: '$(unity.projectPath)'
  • 24. Microsoft Game Stack. Level Up. Unity Unit Tests RayWenderlich.com/9454-introduction-to-unity-unit-testing
  • 25. Microsoft Game Stack. Level Up. YAML # Install Unity (from cache or download) then create Visual Studio project from Unity - job: unity displayName: Unity Build variables: installCached: false # Try to ensure that we have the right secrets set up to continue, otherwise fail the job: condition: or( not(variables['unity.username']), not(variables['unity.password’]), not(variables['unity.serialKey']) ) steps: # What version of Unity does the project say that it wants?: - task: UnityGetProjectVersionTask@1 name: unitygetprojectversion displayName: Calling UnityGetProjectVersionV1 from unity-azure-pipelines-tasks extension inputs: unityProjectPath: '$(unity.projectPath)'
  • 26. Microsoft Game Stack. Level Up. YAML # Install Unity (from cache or download) then create Visual Studio project from Unity - job: unity displayName: Unity Build variables: installCached: false # Try to ensure that we have the right secrets set up to continue, otherwise fail the job: condition: or( not(variables['unity.username']), not(variables['unity.password’]), not(variables['unity.serialKey']) ) steps: # What version of Unity does the project say that it wants?: - task: UnityGetProjectVersionTask@1 name: unitygetprojectversion displayName: Calling UnityGetProjectVersionV1 from unity-azure-pipelines-tasks extension inputs: unityProjectPath: '$(unity.projectPath)'
  • 27. Microsoft Game Stack. Level Up. YAML # Install Unity (from cache or download) then create Visual Studio project from Unity - job: unity displayName: Unity Build variables: installCached: false # Try to ensure that we have the right secrets set up to continue, otherwise fail the job: condition: or( not(variables['unity.username']), not(variables['unity.password’]), not(variables['unity.serialKey']) ) steps: # What version of Unity does the project say that it wants?: - task: UnityGetProjectVersionTask@1 name: unitygetprojectversion displayName: Calling UnityGetProjectVersionV1 from unity-azure-pipelines-tasks extension inputs: unityProjectPath: '$(unity.projectPath)'
  • 28. Microsoft Game Stack. Level Up. Upload Azure-Pipelines.yml to Repository
  • 29. Microsoft Game Stack. Level Up. Add secret variables
  • 30. Microsoft Game Stack. Level Up. Create a new build pipeline
  • 31. Microsoft Game Stack. Level Up. Link this new YAML up in Azure DevOps
  • 32. Microsoft Game Stack. Level Up. This Azure DevOps "recipe" YAML will: • Run Unity Unit Tests • Dynamically activate • Build UWP project • Save new Visual Studio project as “artifact” • Restore NuGet for .sln, build Visual Studio project • Save the app packages it built as an “artifact” • Deactivate Unity when finished
  • 33. Microsoft Game Stack. Level Up. DEMO Setting up your own Azure DevOps build pipeline
  • 34. Microsoft Game Stack. Level Up. • Intro • Why Use a Pipeline? • Which Pipeline System should I use? • My First Pipeline • Next Steps and other Considerations • Resources
  • 35. Microsoft Game Stack. Level Up. Section Title Goes Here Next Steps and other Considerations
  • 36. Microsoft Game Stack. Level Up. Define automatic build steps for everything, no matter how trivial. Apply branch policies to require passing automated builds. Publish successful build artifacts to App Center for distribution. Enhance your entire process
  • 37. Microsoft Game Stack. Level Up. Unity keys can only be on 2 machines at once. If you want to run a series of build agents, dynamically grabbing keys, you could implement a key management system. Unity Pro Keys Key Management store.unity3d.com/account/licenses/other
  • 38. Microsoft Game Stack. Level Up. Helpful examples: MRTK’s automated pipelines https://github.com/microsoft/MixedRealityToolkit-Unity/tree/mrtk_development/pipelines
  • 39. Microsoft Game Stack. Level Up. • Intro • Why Use a Pipeline? • Which Pipeline System should I use? • My First Pipeline • Next Steps and other Considerations • Resources
  • 40. Microsoft Game Stack. Level Up. Resources • Our example YAML: GitHub.com/Microsoft/Azure-DevOps-YAML-for-Unity • Unity + Azure DevOps Plugin: Dinomite-studios.github.io/unity-azure-pipelines-tasks • Unity Store license link: https://store.unity3d.com/account/licenses/other • YAML documentation: Docs.Microsoft.Com/en-us/azure/devops/pipelines/yaml-schema?view=azure- devops&tabs=schema • Unity Unit Tests: RayWenderlich.com/9454-introduction-to-unity-unit-testing • MRTK: GitHub.com/microsoft/MixedRealityToolkit-Unity/

Editor's Notes

  1. I am hoping to use this as a test-run to receive helpful feedback on how I can improve my presentation process for this talk. 
  2. My name is Sarah Sexton. I am a Software Engineer at Microsoft, where I code with developers all over the world on Microsoft’s newest technologies. The story behind what I’m about to present to you, is that my team needed a consistent method for their Unity work environments that would enable all members to work with the same build configurations - for both Visual Studio and Unity. Our solution, which I will be talking about today, was to create Unity Build Pipelines on Azure DevOps. This solution is platform-agnostic, however – in fact, we are as we speak in the process of investigating GitHub Actions to accomplish goals similar to Azure DevOps. In this talk, I will show you how we managed to implement this solution, to build UWP apps for Hololens 2.
  3. These are things that most devs do not want to think or care about. Most devs sit down to a computer with a vision to create, and these hassles are a barrier to their creativity and/or productivity.
  4. Automated Build Pipelines can be triggered on commit to a certain branch, such as master, or whenever there is a Pull Request.
  5. -ONLY builds projects from Unity. -Cannot add custom PowerShell scripts. -Cannot build 2-step UWP projects. So, as a HoloLens developer who wants to do UWP applications, this isn’t an option for you.
  6. With self hosted agent, can do anything you would do manually. Other pipeline options ◦ Unity cloud builds ◦ Local ◦ Azure DevOps ◦ GitHub Actions (new) ◦ Travis CI
  7. stop wasting time compiling builds in Unity, then Visual Studio, then manually deploying. Save time with an automated pipeline! Create builds from start to finish, implement Unit Tests, save every build artifact.
  8. The Dinomite extension supports Microsoft hosted agents as well as custom agents. Some of Unity’s target build platforms are not supported on hosted agents, since they require manual configuration of SDKs & Tools, which we can’t do on hosted agents. For full control over the tools and software, they recommend using your own build agent. A Unity Plus / Pro seat with one available activation is required to build using hosted agents. This is a requirement by Unity not this extension
  9. Start a build and build results in Azure DevOps
  10. With self hosted agent, can do anything you would do manually.
  11. First, identify your current process and all the steps involved. Don’t forget to include when and where files are stored. Identify when work is bottlenecked. Highly recommend "The Phoenix Project" book to learn about devops and process.
  12. We made this project specifically for UWP apps, but we can generalize for other distributions. This Azure DevOps "recipe" yaml will: Run Unity Unit Tests -Dynamically Activate -Builds UWP project, saves new Visual Studio project as “artifact” -Restores NuGet for .sln, builds Visual Studio project -Saves the app packages that it built as an “artifact” -Deactivate Unity when finished
  13. A unit test is (ideally) for testing a single “unit” of code. Exactly what makes up a “unit” varies, but the important thing to keep in mind is that a unit test should be testing exactly one ‘thing’ at a time. You can learn more about how Unit Tests in Unity work and how to use them in your projects in this tutorial I’ve linked here. To open the Unity Test Runner, choose Window ▸ General ▸ Test Runner. Unit Testing can be triggered from Azure DevOps ◦ Spin up Unity ◦ Run project in Unity ◦ Only proceed if Unit Tests pass ◦ Skip the build if the Unit Tests fail ◦ Free up the agent to do more jobs
  14. A YAML file specifies the build steps https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema
  15. A YAML file specifies the build steps https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema
  16. A YAML file specifies the build steps https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema
  17. Link this new YAML up in Azure DevOps
  18. This pipeline depends on Secret Variables that you must define within your Azure DevOps:  unity.username = Your Unity account email address  unity.password = Your Unity account password (keep it secret)  unity.serialkey = The serial key for your Unity Pro licence (keep it safe) Without all three, this pipeline will fail to run. 
  19. You can create a new YAML file, or import an existing one.
  20. Link this new YAML up in Azure DevOps
  21. Show YAML file, talk about how it works. Demonstrate what is needed to include in your project Show “previous success” or “previous fail” build
  22. Ensure your entire process is replicated, and artifacts you want saved are preserved. Apply branch policies once working to ensure builds are triggered.
  23. Your Unity key can only be on two machines at once. If you wanted to run a series of build agents dynamically grabbing keys, you could implement some sort of key management system. https://store.unity3d.com/account/licenses/other
  24. The Mixed Reality Toolkit MRTK team uses automated pipelines, with publicly available YAML files for you to use as examples.