作业在上一个作业完成之前开始

Mig*_*ura 2 azure-pipelines

我有一个包含两个作业(job: Publishdeployment: Deploy)的 Azure Pipelines 阶段。

有时作业在完成deployment: Deploy之前就开始运行job: Publish

我收到错误,然后我需要等待job: Publish完成并重新运行deployment: Deploy

当我重新运行时deployment: Deploy一切顺利......

问题
为什么deployment: Deploy先开始后job: Publish结束?

这是该阶段的 YML 代码:

- stage: Production
  dependsOn: Staging
  jobs:
  - job: Publish
    pool:
      vmImage: 'Ubuntu 16.04'
    steps:
    - task: UseDotNet@2
      displayName: Setup
      inputs:
        packageType: sdk
        version: 3.0.x
    - task: DotNetCoreCLI@2
      displayName: Publish
      inputs:
        command: publish
        publishWebProjects: false
        projects: 'src/**/*.csproj'
        arguments: '--configuration production --output $(Build.ArtifactStagingDirectory)'
        zipAfterPublish: true
    - task: PublishPipelineArtifact@0
      displayName: Export
      inputs:
        artifactName: Production
        targetPath: '$(Build.ArtifactStagingDirectory)'
  - deployment: Deploy
    pool:
      vmImage: Ubuntu-16.04
    environment: production
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@1
            displayName: Import
            inputs:
              artifactName: Production
          - task: AzureRmWebAppDeployment@3
            displayName: Api
            inputs:
              package: '$(Build.ArtifactStagingDirectory)/Api.zip'
              removeAdditionalFilesFlag: true
              azureSubscription: '$(azure.subscription)'
              appType: 'Web App on Linux'
              webAppName: 'app-api'
Run Code Online (Sandbox Code Playgroud)

Mer*_*SFT 5

因为当您使用的语法不包含作业依赖项时,此时,它将是并行构建的语法(无依赖项)

如果没有指定依赖关系并且实际组织情况允许并行,这些作业将并行运行。

但是,如果组织本身不满足并行条件,用户也不会指定作业顺序(依赖性)。现在服务器将随机运行该作业。因为没有依赖关系的作业对于服务器来说是两个独立的作业。

注意:这只发生在 YAML 架构中,经典编辑器具有默认执行顺序。


要解决您的麻烦,只需dependsOn: Publish在您的deployment: Deploy工作中添加:

  - deployment: Deploy
    dependsOn: Publish
    pool:
      vmImage: Ubuntu-16.04
    environment: production
Run Code Online (Sandbox Code Playgroud)

现在,deployment: Deploy只会在完成后运行job: Publish