我有一个包含两个作业(job: Publish
和deployment: 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)
因为当您使用的语法不包含作业依赖项时,此时,它将是并行构建的语法(无依赖项)。
如果没有指定依赖关系并且实际组织情况允许并行,这些作业将并行运行。
但是,如果组织本身不满足并行条件,用户也不会指定作业顺序(依赖性)。现在服务器将随机运行该作业。因为没有依赖关系的作业对于服务器来说是两个独立的作业。
注意:这只发生在 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
。
归档时间: |
|
查看次数: |
3922 次 |
最近记录: |