build.yml 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. parameters:
  2. # Agent OS identifier and used as job name
  3. agentOs: ''
  4. # Agent pool
  5. pool: {}
  6. # Additional variables
  7. variables: {}
  8. # Build strategy - matrix
  9. strategy: ''
  10. # Job timeout
  11. timeoutInMinutes: 180
  12. jobs:
  13. - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/release/8.0.3xx'), not(contains(parameters.agentOs, 'TemplateEngine'))) }}:
  14. - template: /eng/common/templates-official/job/onelocbuild.yml@self
  15. parameters:
  16. CreatePr: true
  17. LclSource: lclFilesfromPackage
  18. LclPackageId: 'LCL-JUNO-PROD-DOTNETSDK'
  19. MirrorBranch: release/8.0.4xx
  20. MirrorRepo: sdk
  21. - ${{ if not(contains(parameters.agentOs, 'TemplateEngine')) }}:
  22. - template: /eng/common/templates-official/job/job.yml@self
  23. parameters:
  24. name: ${{ parameters.agentOs }}
  25. enableMicrobuild: true
  26. enablePublishBuildAssets: true
  27. enableTelemetry: true
  28. enablePublishUsingPipelines: true
  29. helixRepo: dotnet/sdk
  30. pool: ${{ parameters.pool }}
  31. timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
  32. ${{ if ne(parameters.strategy, '') }}:
  33. strategy: ${{ parameters.strategy }}
  34. workspace:
  35. clean: all
  36. variables:
  37. - ${{ each variable in parameters.variables }}:
  38. - ${{ if ne(variable.name, '') }}:
  39. - name: ${{ variable.name }}
  40. value: ${{ variable.value }}
  41. - name: _AgentOSName
  42. value: ${{ parameters.agentOs }}
  43. - name: _TeamName
  44. value: DotNetCore
  45. - name: _OfficialBuildIdArgs
  46. value: ''
  47. - name: _SignArgs
  48. value: ''
  49. - name: _HelixApiToken
  50. value: ''
  51. # Helix Testing requires a token when internally run
  52. - ${{ if ne(variables['System.TeamProject'], 'public') }}:
  53. - group: DotNet-HelixApi-Access
  54. - name: _HelixApiToken
  55. value: $(HelixApiAccessToken)
  56. - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
  57. - group: dotnet-benchview
  58. - name: _OfficialBuildIdArgs
  59. value: /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
  60. - name: _SignArgs
  61. value: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName)
  62. - name: _PerfIterations
  63. value: 25
  64. steps:
  65. - ${{ if ne(variables['System.TeamProject'], 'public') }}:
  66. - task: PowerShell@2
  67. displayName: Setup Private Feeds Credentials
  68. inputs:
  69. filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
  70. arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
  71. env:
  72. Token: $(dn-bot-dnceng-artifact-feeds-rw)
  73. - ${{ if eq(parameters.agentOs, 'Windows_NT') }}:
  74. - powershell: eng\common\build.ps1
  75. $(_CIBuild)
  76. -configuration $(_BuildConfig)
  77. -nativeToolsOnMachine
  78. $(_PublishArgs)
  79. $(_SignArgs)
  80. $(_OfficialBuildIdArgs)
  81. /p:Test=false
  82. $(_InternalRuntimeDownloadArgs)
  83. $(_OfficialBuildArgs)
  84. continueOnError: false
  85. displayName: Build
  86. env:
  87. BuildConfig: $(_BuildConfig)
  88. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  89. HelixAccessToken: ${{ parameters.HelixAccessToken }}
  90. - powershell: eng\common\build.ps1
  91. -configuration $(_BuildConfig)
  92. -nativeToolsOnMachine
  93. -prepareMachine
  94. -ci
  95. -restore
  96. $(_Test)
  97. -projects $(Build.SourcesDirectory)\test\UnitTests.proj
  98. /bl:$(Build.SourcesDirectory)\artifacts\log\$(_BuildConfig)\TestInHelix.binlog
  99. /p:_CustomHelixTargetQueue=${{ parameters.helixTargetQueue }}
  100. $(_InternalRuntimeDownloadArgs)
  101. displayName: Run Tests in Helix
  102. condition: succeeded()
  103. env:
  104. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  105. HelixAccessToken: $(_HelixApiToken)
  106. RunAoTTests: 'false'
  107. - ${{ if eq(parameters.agentOs, 'Windows_NT_FullFramework') }}:
  108. - powershell: eng\common\build.ps1
  109. $(_CIBuild)
  110. -configuration $(_BuildConfig)
  111. -nativeToolsOnMachine
  112. $(_SignArgs)
  113. $(_OfficialBuildIdArgs)
  114. $(_InternalRuntimeDownloadArgs)
  115. /p:Test=false
  116. continueOnError: false
  117. displayName: Build
  118. env:
  119. BuildConfig: $(_BuildConfig)
  120. TestFullMSBuild: 'true'
  121. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  122. HelixAccessToken: ${{ parameters.HelixAccessToken }}
  123. - powershell: eng\common\build.ps1
  124. -configuration $(_BuildConfig)
  125. -nativeToolsOnMachine
  126. -prepareMachine
  127. -ci
  128. -restore
  129. -test
  130. -projects $(Build.SourcesDirectory)\test\UnitTests.proj
  131. /bl:$(Build.SourcesDirectory)\artifacts\log\$(_BuildConfig)\TestInHelix.binlog
  132. /p:_CustomHelixTargetQueue=${{ parameters.helixTargetQueue }}
  133. $(_InternalRuntimeDownloadArgs)
  134. displayName: Run Tests in Helix
  135. condition: succeededOrFailed()
  136. env:
  137. TestFullMSBuild: 'true'
  138. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  139. HelixAccessToken: $(_HelixApiToken)
  140. - ${{ if eq(parameters.agentOs, 'Windows_NT_TestAsTools') }}:
  141. - powershell: eng\common\build.ps1
  142. $(_CIBuild)
  143. -configuration $(_BuildConfig)
  144. -nativeToolsOnMachine
  145. $(_SignArgs)
  146. $(_OfficialBuildIdArgs)
  147. $(_InternalRuntimeDownloadArgs)
  148. /p:RunTestsAsTool=true
  149. displayName: Build
  150. env:
  151. BuildConfig: $(_BuildConfig)
  152. - ${{ if notIn(parameters.agentOs, 'Windows_NT', 'Windows_NT_FullFramework', 'Windows_NT_TestAsTools') }}:
  153. - script: eng/common/build.sh
  154. $(_CIBuild)
  155. --configuration $(_BuildConfig)
  156. $(_SignArgs)
  157. $(_OfficialBuildIdArgs)
  158. $(_InternalRuntimeDownloadArgs)
  159. -p:Test=false
  160. continueOnError: false
  161. displayName: Build
  162. env:
  163. BuildConfig: $(_BuildConfig)
  164. - powershell: eng/common/build.sh
  165. -configuration $(_BuildConfig)
  166. -prepareMachine
  167. -ci
  168. -restore
  169. -test
  170. -projects $(Build.SourcesDirectory)/test/UnitTests.proj
  171. /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/TestInHelix.binlog
  172. /p:_CustomHelixTargetQueue=${{ parameters.helixTargetQueue }}
  173. $(_InternalRuntimeDownloadArgs)
  174. displayName: Run Tests in Helix
  175. condition: succeededOrFailed()
  176. env:
  177. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  178. HelixAccessToken: $(_HelixApiToken)
  179. RunAoTTests: 'false'
  180. - task: CopyFiles@2
  181. displayName: Gather Logs
  182. inputs:
  183. SourceFolder: '$(Build.SourcesDirectory)/artifacts'
  184. Contents: |
  185. log/$(_BuildConfig)/**/*
  186. TestResults/$(_BuildConfig)/**/*
  187. SymStore/$(_BuildConfig)/**/*
  188. tmp/$(_BuildConfig)/**/*.binlog
  189. TargetFolder: '$(Build.ArtifactStagingDirectory)'
  190. continueOnError: true
  191. condition: always()
  192. - task: 1ES.PublishBuildArtifacts@1
  193. displayName: Publish Logs to VSTS
  194. inputs:
  195. PathtoPublish: '$(Build.ArtifactStagingDirectory)'
  196. ArtifactName: '$(_AgentOSName)_$(Agent.JobName)_$(Build.BuildNumber)'
  197. publishLocation: Container
  198. continueOnError: true
  199. condition: always()
  200. # AoT Jobs
  201. - ${{ if and(in(parameters.agentOs, 'Windows_NT', 'Darwin'), or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest'))) }}:
  202. - template: /eng/common/templates-official/job/job.yml@self
  203. parameters:
  204. name: ${{ parameters.agentOs }}_AoT_Tests
  205. enableMicrobuild: true
  206. enablePublishBuildAssets: true
  207. enableTelemetry: true
  208. enablePublishUsingPipelines: true
  209. helixRepo: dotnet/sdk
  210. pool: ${{ parameters.pool }}
  211. timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
  212. ${{ if ne(parameters.strategy, '') }}:
  213. strategy: ${{ parameters.strategy }}
  214. workspace:
  215. clean: all
  216. variables:
  217. - ${{ each variable in parameters.variables }}:
  218. - ${{ if ne(variable.name, '') }}:
  219. - name: ${{ variable.name }}
  220. value: ${{ variable.value }}
  221. - name: _AgentOSName
  222. value: ${{ parameters.agentOs }}
  223. - name: _TeamName
  224. value: DotNetCore
  225. - name: _OfficialBuildIdArgs
  226. value: ''
  227. - name: _PublishArgs
  228. value: ''
  229. - name: _SignArgs
  230. value: ''
  231. - name: _HelixApiToken
  232. value: ''
  233. # Helix Testing requires a token when internally run
  234. - ${{ if ne(variables['System.TeamProject'], 'public') }}:
  235. - group: DotNet-HelixApi-Access
  236. - name: _HelixApiToken
  237. value: $(HelixApiAccessToken)
  238. - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
  239. - group: dotnet-benchview
  240. - name: _OfficialBuildIdArgs
  241. value: /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
  242. - name: _SignArgs
  243. value: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName)
  244. - name: _PerfIterations
  245. value: 25
  246. steps:
  247. - ${{ if and(ne(variables['System.TeamProject'], 'public'), in(parameters.agentOs, 'Windows_NT', 'Darwin')) }}:
  248. - task: PowerShell@2
  249. displayName: Setup Private Feeds Credentials
  250. inputs:
  251. filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
  252. arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
  253. env:
  254. Token: $(dn-bot-dnceng-artifact-feeds-rw)
  255. - ${{ if eq(parameters.agentOs, 'Windows_NT') }}:
  256. - powershell: eng\common\build.ps1
  257. $(_CIBuild)
  258. -configuration $(_BuildConfig)
  259. -nativeToolsOnMachine
  260. $(_SignArgs)
  261. $(_OfficialBuildIdArgs)
  262. /p:Test=false
  263. $(_InternalRuntimeDownloadArgs)
  264. continueOnError: false
  265. displayName: Build
  266. env:
  267. BuildConfig: $(_BuildConfig)
  268. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  269. HelixAccessToken: ${{ parameters.HelixAccessToken }}
  270. - script: $(Build.SourcesDirectory)/artifacts/bin/redist/$(_BuildConfig)/dotnet/dotnet workload install wasm-tools --skip-manifest-update
  271. displayName: Install wasm-tools Workload
  272. continueOnError: false
  273. - powershell: $(Build.SourcesDirectory)/eng/common/build.ps1
  274. -ci
  275. -restore
  276. -test
  277. -prepareMachine
  278. -projects $(Build.SourcesDirectory)/test/UnitTests.proj
  279. -configuration $(_BuildConfig)
  280. -nativeToolsOnMachine
  281. /bl:$(Build.SourcesDirectory)\artifacts\log\$(_BuildConfig)\TestInHelix.binlog
  282. /p:_CustomHelixTargetQueue=${{ parameters.helixTargetQueue }}
  283. $(_InternalRuntimeDownloadArgs)
  284. displayName: Run AoT Tests in Helix
  285. env:
  286. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  287. HelixAccessToken: $(_HelixApiToken)
  288. RunAoTTests: 'true'
  289. - ${{ if eq(parameters.agentOs, 'Darwin') }}:
  290. - script: eng/common/build.sh
  291. --configuration $(_BuildConfig)
  292. --restore
  293. --build
  294. --pack
  295. --ci
  296. $(_SignArgs)
  297. $(_OfficialBuildIdArgs)
  298. $(_InternalRuntimeDownloadArgs)
  299. -p:Test=false
  300. displayName: Build
  301. env:
  302. BuildConfig: $(_BuildConfig)
  303. - script: $(Build.SourcesDirectory)/artifacts/bin/redist/$(_BuildConfig)/dotnet/dotnet workload install wasm-tools --skip-manifest-update
  304. displayName: Install wasm-tools Workload
  305. continueOnError: false
  306. - script: eng/common/build.sh
  307. --configuration $(_BuildConfig)
  308. --prepareMachine
  309. --ci
  310. --restore
  311. --test
  312. --projects $(Build.SourcesDirectory)/test/UnitTests.proj
  313. /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/TestInHelix.binlog
  314. /p:_CustomHelixTargetQueue=${{ parameters.helixTargetQueue }}
  315. $(_InternalRuntimeDownloadArgs)
  316. displayName: Run AoT Tests in Helix
  317. env:
  318. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  319. HelixAccessToken: $(_HelixApiToken)
  320. RunAoTTests: 'true'
  321. - ${{ if in(parameters.agentOs, 'Windows_NT', 'Darwin') }}:
  322. - task: CopyFiles@2
  323. displayName: Gather Logs
  324. inputs:
  325. SourceFolder: '$(Build.SourcesDirectory)/artifacts'
  326. Contents: |
  327. log/$(_BuildConfig)/**/*
  328. TestResults/$(_BuildConfig)/**/*
  329. SymStore/$(_BuildConfig)/**/*
  330. tmp/$(_BuildConfig)/**/*.binlog
  331. TargetFolder: '$(Build.ArtifactStagingDirectory)'
  332. continueOnError: true
  333. condition: always()
  334. - task: 1ES.PublishBuildArtifacts@1
  335. displayName: Publish Logs to VSTS
  336. inputs:
  337. PathtoPublish: '$(Build.ArtifactStagingDirectory)'
  338. ArtifactName: '$(_AgentOSName)_$(Agent.JobName)_$(Build.BuildNumber)'
  339. publishLocation: Container
  340. continueOnError: true
  341. condition: always()
  342. # TemplateEngine Jobs
  343. - ${{ if contains(parameters.agentOs, 'TemplateEngine') }}:
  344. - template: /eng/common/templates-official/job/job.yml@self
  345. parameters:
  346. name: ${{ parameters.agentOs }}
  347. enableMicrobuild: true
  348. enablePublishBuildAssets: true
  349. enableTelemetry: true
  350. enablePublishUsingPipelines: true
  351. helixRepo: dotnet/sdk
  352. pool: ${{ parameters.pool }}
  353. timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
  354. ${{ if ne(parameters.strategy, '') }}:
  355. strategy: ${{ parameters.strategy }}
  356. workspace:
  357. clean: all
  358. variables:
  359. - ${{ each variable in parameters.variables }}:
  360. - ${{ if ne(variable.name, '') }}:
  361. - name: ${{ variable.name }}
  362. value: ${{ variable.value }}
  363. - name: _AgentOSName
  364. value: ${{ parameters.agentOs }}
  365. - name: _TeamName
  366. value: DotNetCore
  367. - name: _OfficialBuildIdArgs
  368. value: ''
  369. - name: _PublishArgs
  370. value: ''
  371. - name: _SignArgs
  372. value: ''
  373. - name: _HelixApiToken
  374. value: ''
  375. # Helix Testing requires a token when internally run
  376. - ${{ if ne(variables['System.TeamProject'], 'public') }}:
  377. - group: DotNet-HelixApi-Access
  378. - name: _HelixApiToken
  379. value: $(HelixApiAccessToken)
  380. - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
  381. - group: dotnet-benchview
  382. - name: _OfficialBuildIdArgs
  383. value: /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
  384. - name: _SignArgs
  385. value: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName)
  386. - name: _PerfIterations
  387. value: 25
  388. steps:
  389. - ${{ if ne(variables['System.TeamProject'], 'public') }}:
  390. - task: PowerShell@2
  391. displayName: Setup Private Feeds Credentials
  392. inputs:
  393. filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
  394. arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
  395. env:
  396. Token: $(dn-bot-dnceng-artifact-feeds-rw)
  397. - ${{ if contains(parameters.agentOs, 'Windows_NT') }}:
  398. - powershell: eng\common\build.ps1
  399. $(_CIBuild)
  400. -configuration $(_BuildConfig)
  401. -nativeToolsOnMachine
  402. $(_SignArgs)
  403. $(_OfficialBuildIdArgs)
  404. /p:Test=false
  405. $(_InternalRuntimeDownloadArgs)
  406. displayName: Build
  407. env:
  408. BuildConfig: $(_BuildConfig)
  409. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  410. HelixAccessToken: ${{ parameters.HelixAccessToken }}
  411. - powershell: eng\common\build.ps1
  412. -configuration $(_BuildConfig)
  413. -nativeToolsOnMachine
  414. -prepareMachine
  415. -ci
  416. -restore
  417. $(_Test)
  418. -projects $(Build.SourcesDirectory)\test\Microsoft.TemplateEngine.Cli.UnitTests\Microsoft.TemplateEngine.Cli.UnitTests.csproj
  419. /bl:$(Build.SourcesDirectory)\artifacts\log\$(_BuildConfig)\TemplateEngine.Cli.UnitTests.binlog
  420. $(_InternalRuntimeDownloadArgs)
  421. displayName: Run TemplateEngine Cli Unit Tests
  422. - powershell: eng\common\build.ps1
  423. -configuration $(_BuildConfig)
  424. -nativeToolsOnMachine
  425. -prepareMachine
  426. -ci
  427. -restore
  428. $(_Test)
  429. -projects $(Build.SourcesDirectory)\test\dotnet-new.Tests\dotnet-new.IntegrationTests.csproj
  430. /bl:$(Build.SourcesDirectory)\artifacts\log\$(_BuildConfig)\dotnet-new.IntegrationTests.binlog
  431. $(_InternalRuntimeDownloadArgs)
  432. displayName: Run dotnet new Integration Tests
  433. - ${{ if not(contains(parameters.agentOs, 'Windows_NT')) }}:
  434. - script: eng/common/build.sh
  435. --configuration $(_BuildConfig)
  436. --restore
  437. --build
  438. --ci
  439. $(_SignArgs)
  440. $(_OfficialBuildIdArgs)
  441. $(_InternalRuntimeDownloadArgs)
  442. -p:Test=false
  443. displayName: Build
  444. env:
  445. BuildConfig: $(_BuildConfig)
  446. - powershell: eng/common/build.sh
  447. -configuration $(_BuildConfig)
  448. -prepareMachine
  449. -ci
  450. -restore
  451. -test
  452. -projects $(Build.SourcesDirectory)/test/Microsoft.TemplateEngine.Cli.UnitTests/Microsoft.TemplateEngine.Cli.UnitTests.csproj
  453. /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/TemplateEngine.Cli.UnitTests.binlog
  454. $(_InternalRuntimeDownloadArgs)
  455. displayName: Run TemplateEngine Cli Unit Tests
  456. - powershell: eng/common/build.sh
  457. -configuration $(_BuildConfig)
  458. -prepareMachine
  459. -ci
  460. -restore
  461. -test
  462. -projects $(Build.SourcesDirectory)/test/dotnet-new.Tests/dotnet-new.IntegrationTests.csproj
  463. /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/dotnet-new.IntegrationTests.binlog
  464. $(_InternalRuntimeDownloadArgs)
  465. displayName: Run dotnet new Integration Tests
  466. - task: PublishTestResults@2
  467. displayName: Publish Test Results
  468. inputs:
  469. testResultsFormat: xUnit
  470. testResultsFiles: 'artifacts/TestResults/$(_BuildConfig)/*.xml'
  471. testRunTitle: '$(_AgentOSName)_$(Agent.JobName)'
  472. buildPlatform: '$(BuildPlatform)'
  473. buildConfiguration: '$(_BuildConfig)'
  474. condition: always()
  475. - task: CopyFiles@2
  476. displayName: Gather Logs
  477. inputs:
  478. SourceFolder: '$(Build.SourcesDirectory)/artifacts'
  479. Contents: |
  480. log/$(_BuildConfig)/**/*
  481. TestResults/$(_BuildConfig)/**/*
  482. SymStore/$(_BuildConfig)/**/*
  483. tmp/$(_BuildConfig)/**/*.binlog
  484. TargetFolder: '$(Build.ArtifactStagingDirectory)'
  485. continueOnError: true
  486. condition: always()
  487. - task: 1ES.PublishBuildArtifacts@1
  488. displayName: Publish Logs to VSTS
  489. inputs:
  490. PathtoPublish: '$(Build.ArtifactStagingDirectory)'
  491. ArtifactName: '$(_AgentOSName)_$(Agent.JobName)_$(Build.BuildNumber)'
  492. publishLocation: Container
  493. continueOnError: true
  494. condition: always()