Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Cosmos emulator instead of Azure instance #19263

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 16 additions & 11 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,22 @@ stages:
- _DotNetPublishToBlobFeed: true
- _InternalBuildArgs: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) /p:DotNetPublishBlobFeedUrl=$(_PublishBlobFeedUrl) /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) /p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory) /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
steps:
- task: Cache@2
inputs:
key: 'ConstantCosmosMsiKey'
path: cosmosdb-emulator-cache-dir
cacheHitVar: CACHE_RESTORED
displayName: Cache Cosmos Emulator MSI
- powershell: mkdir cosmosdb-emulator-cache-dir; Invoke-WebRequest https://aka.ms/cosmosdb-emulator -outfile cosmosdb-emulator-cache-dir\cosmosdb-emulator.msi
condition: ne(variables.CACHE_RESTORED, 'true')
displayName: Download CosmosDB Emulator
- powershell: msiexec /i cosmosdb-emulator-cache-dir\cosmosdb-emulator.msi /qn /quiet /norestart /log install.log
displayName: Install CosmosDB Emulator
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Can the emulator be xcopy installed? Making permanent changes to the AzDO agents is not recommended.
  2. Why repeat the installation if the MSI has already been installed? I suggest checking for the Azure Cosmos DB Emulator folder before doing this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @dougbu, thanks for taking a look. I'm a total newcomer to our build system so there's likely to be some silliness here.

So do I understand correctly that an MSI installation would persist on the agent, i.e. that state is carried over from one build to the next? Because I was operating with the assumption that the build runs in a VM which is later reset, like the way things work on a normal non-hosted Azure Pipelines build.

I don't think there's a simple xcopy install option for the Cosmos Emulator (here are the docs). They do provide a docker image which I've tried to set up as a service container, but apparently our agents don't have the right version of Windows to support that. The current MSI-based installation also seems like it's much faster because we can cache.

However, if agents don't reset between builds, then is it possible simply have this MSI installed in all our agents once (or included in our image), rather than do it in our script every single time? Aside from having to mess around with caches, it seems like it would be easier to manage upgrades as well (we'd ask for a manual upgrade every now and then, it should really happen pretty rarely).

Thanks for your help and insights on this!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@roji the BYOC queues work differently from the hosted AzDO queues.

@MattGal what's the process to request the addition of the Cosmos Emulator to the BuildPool.Windows.10.Amd64.VS2017 and BuildPool.Windows.10.Amd64.VS2017.Open queues? Is this doable in a reasonable timeframe?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@roji the BYOC queues work differently from the hosted AzDO queues.

@MattGal what's the process to request the addition of the Cosmos Emulator to the BuildPool.Windows.10.Amd64.VS2017 and BuildPool.Windows.10.Amd64.VS2017.Open queues? Is this doable in a reasonable timeframe?

Create an issue in dotnet/core-eng and we'll discuss in triage. At this point your timeframe is "next year" as at best we'll only have one more rollout before EOY.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ajcvickers @roji is "next year" soon enough?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll start a thread about this offline.

- powershell: |
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
displayName: Start CosmosDB Emulator

- task: NuGetCommand@2
displayName: 'Clear NuGet caches'
condition: succeeded()
Expand Down Expand Up @@ -125,20 +141,9 @@ stages:
- bash: sudo apt-get install -y libsqlite3-mod-spatialite
displayName: Install SpatiaLite
continueOnError: true
- bash: |
echo "##vso[task.setvariable variable=_CosmosConnectionUrl]https://ef-nightly-test.documents.azure.com:443/"
echo "##vso[task.setvariable variable=_CosmosToken]$(ef-nightly-cosmos-key)"
displayName: Prepare to run Cosmos tests on ef-nightly-test
condition: and(eq(variables['_CosmosConnectionUrl'], 'true'), or(endsWith(variables['_runCounter'], '0'), endsWith(variables['_runCounter'], '2'), endsWith(variables['_runCounter'], '4'), endsWith(variables['_runCounter'], '6'), endsWith(variables['_runCounter'], '8')))
- bash: |
echo "##vso[task.setvariable variable=_CosmosConnectionUrl]https://ef-pr-test.documents.azure.com:443/"
echo "##vso[task.setvariable variable=_CosmosToken]$(ef-pr-cosmos-test)"
displayName: Prepare to run Cosmos tests on ef-pr-test
condition: and(eq(variables['_CosmosConnectionUrl'], 'true'), or(endsWith(variables['_runCounter'], '1'), endsWith(variables['_runCounter'], '3'), endsWith(variables['_runCounter'], '5'), endsWith(variables['_runCounter'], '7'), endsWith(variables['_runCounter'], '9')))
- script: eng/common/cibuild.sh --configuration $(_BuildConfig) --prepareMachine
env:
Test__Cosmos__DefaultConnection: $(_CosmosConnectionUrl)
Test__Cosmos__AuthToken: $(_CosmosToken)
name: Build
- task: PublishBuildArtifacts@1
displayName: Upload TestResults
Expand Down