Conclusion
Hopefully you've gone through all the steps and now have a basic pipeline that's working. If so, congratulations!
Clean up
If you used the Azure Game Development VMs in the pipeline, you might want to stop and deallocate them when not in use - the NV-class VMs can be costly.
The journey begins here
Of course, this is not a production-grade pipeline yet! Build on this pipeline and make it really work for your studio's situation.
Below are just a few other areas to explore with the pipeline you've just built. Please contact us at azuregamedevs@microsoft.com for any feedback or inquiries.
Identity Management
Azure Active Directory can be integrated with Perforce's Helix Authentication Service to provide convenient, secure Single-Sign On capability for your Perforce users and the build system. Please take a look at how to integrate AAD together with Perforce and boost security in your workflow.
For more on this, see how to use AAD Managed Identities with Perforce.
Perforce Proxies
In this example pipeline, we have a single Perforce commit server. In real-world situations, however, a more advanced Perforce deployment topology is probably required to address the geographical locality of your development staff.
Proxies are a way of balancing the load between local depots and the main commit server. Check out how to set up a Perforce Proxy in Azure.
Perforce Changelist Number
In this example pipeline, you saw the Azure DevOps Perforce extension used, as seen in this script fragment:
- task: Perforce@1
displayName: Sync Perforce to CL
inputs:
...
This is useful for a build trigger per-check in, but in many cases, you will also want a regular timed build, e.g. nightly builds.
There is another Azure DevOps Perforce extension called FindPerforceChangeListNumber. This extension lets you specify the changelist number from within the Azure DevOps pipeline, including the head of a given branch. To do this, define a pipeline variable $(ChangelistNumber) that will contain the changelist that FindPerforceChangeListNumber will write into, then have the other Perforce extension consume that variable. For instance:
- task: FindPerforceChangelistNumber@1
displayName: Find Perforce CL Number
inputs:
STATUS: 'submitted'
DEPOTPATH: '$(p4depotpath)'
P4PORT: '$(p4port)'
ssl: true
fingerprint: '$(fingerprint)'
P4USER: '$(p4user)'
P4PASSWD: '$(p4pass)'
- task: Perforce@1
displayName: Sync Perforce to CL
inputs:
UseDepotPath: true
DepotPath: '$(p4depotpath)'
P4ROOT: '$(p4root)'
CreateWorkspace: false
Sync: true
Clean: false
Force: false
synctype: 'changelist'
CHANGELIST: '$(ChangelistNumber)'
P4CLIENT: '$(p4client)'
P4PORT: '$(p4port)'
ssl: true
fingerprint: '$(fingerprint)'
P4USER: '$(p4user)'
P4PASSWD: '$(p4pass)'
This extension makes Perforce changelist operations more flexible from within Azure DevOps, so please check it out.
Pixel Streaming
Azure Gaming and Epic Games have collaborated to integrate Unreal Engine Pixel Streaming capabilities into Azure. Check out this guide to see how you can enable builds to be streamed to production and QA staff for quick reviews, post-build.
Customer examples
Other game developers are benefitting from Azure cloud build pipelines today. Please take a look at these examples:
Bandai Namco Studios: Building a Cloud Native CI/CD Pipeline for Unity Games
Game Studio Inc. uses Azure to cloudify its development
Cloud Build Pipelines: The Coalition
Next steps
Return to the Introduction.
Troubleshooting page is here.