конвейер, вызывающий одну и ту же функцию powershell дважды, не распознает первый вызов функции - PullRequest
0 голосов
/ 08 мая 2019

У меня есть конвейер ниже:

trigger:
- master

jobs:
- job: BuildDacPac
  steps:
  - task: MSBuild@1
    displayName: 'Build DACPAC'
    inputs:
      solution: 'AzureDevops-Fa-Snapshot-CI-Pipeline-Adv.sln'
      msbuildArguments: '/property:OutDir=bin\Release'

- job: RefreshIntegrationTestDb
  dependsOn: BuildDacPac
  workspace:
    clean: all
  steps:
  - powershell: |
      $securePassword = ConvertTo-SecureString -String '$(pfaPassword)' -AsPlainText -Force
      $pfaCreds = New-Object System.Management.Automation.PSCredential '$(pfaUsername)', $securePassword
      Invoke-PfaDbRefresh -RefreshDatabase $(refreshDatabase) `
                          -RefreshSource   $(refreshSource) `
                          -DestSqlInstance Z-STN-WIN2016-A\DEVOPSIAT `
                          -PfaEndpoint     $(pfaEndpoint) `
                          -PfaCredentials  $pfaCreds

- job: DeployDacPac
  dependsOn: RefreshIntegrationTestDb
  steps:
  - script: sqlpackage.exe /Action:Publish /SourceFile:"$(System.DefaultWorkingDirectory)\AzureDevOps-Fa-Snapshot-Ci-Pipeline-Adv\bin\Release\AzureDevOps-Fa-Snapshot-Ci-Pipeline-Adv.dacpac" /TargetConnectionString:"server=$(iatInstanceName);database=$(refreshDatabase)" 

- job: ParallelDevDatabaseRefresh
  dependsOn: RefreshIntegrationTestDb
  pool: $(agentPool)
  strategy: 
    matrix:
      dev_1:
        instanceName: Z-STN-WIN2016-A\DEVOPSDEV1
      dev_2:
        instanceName: Z-STN-WIN2016-A\DEVOPSDEV2
      dev_3:
        instanceName: Z-STN-WIN2016-A\DEVOPSDEV3
      dev_4:
        instanceName: Z-STN-WIN2016-A\DEVOPSDEV4
  steps:
  - powershell: |
      $securePassword = ConvertTo-SecureString -String '$(pfaPassword)' -AsPlainText -Force
      $pfaCreds = New-Object System.Management.Automation.PSCredential '$(pfaUsername)', $securePassword
      Invoke-PfaDbRefresh -RefreshDatabase $(refreshDatabase) `
                          -RefreshSource   $(refreshSource) `
                          -DestSqlInstance $(instanceName) `
                          -PfaEndpoint     $(pfaEndpoint) `
                          -PfaCredentials  $pfaCreds

Вызов Invoke-PfaDbRefresh в задании ParallelDevDatabaseRefresh работает без каких-либо проблем, однако вызов этой функции в задании RefreshIntegrationTestDb завершается неудачно с:

##[section]Starting: PowerShell
==============================================================================
Task         : PowerShell
Description  : Run a PowerShell script on Windows, macOS, or Linux.
Version      : 2.148.0
Author       : Microsoft Corporation
Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=613736)
==============================================================================
Generating script.
========================== Starting Command Output ===========================
[command]/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command . '/home/vsts/work/_temp/022ae053-d678-4d53-9f14-48a828a2d619.ps1'
refreshDatabase : The term 'refreshDatabase' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At /home/vsts/work/_temp/022ae053-d678-4d53-9f14-48a828a2d619.ps1:4 char:40
+ Invoke-PfaDbRefresh -RefreshDatabase $(refreshDatabase) `
+                                        ~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (refreshDatabase:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : CommandNotFoundException

##[error]PowerShell exited with code '1'.
##[section]Finishing: PowerShell

Мне трудно понять, почему конвейер может распознавать вызов функции powershell в одной части конвейера, а не в другой.

1 Ответ

0 голосов
/ 08 мая 2019

После большого разочарования я дошел до сути, в разделе, в котором работает вызов Invoke-PfaDbRefresh, была строка:

pool: $(agentPool)

Раздел, в котором вызов функции, которая не работает, не включает эту строку и, следовательно, по умолчанию использует агент сборки из пула Ubuntu, размещенного в Azure.

...