当上一个管道失败时,我希望当前的管道陷入队列中

问题描述 投票:0回答:1

当先前的管道失败时,我希望当前的管道陷入队列中。我不希望它通过脚本完成,我想要任何其他方式。只是我希望当下一个计划运行管道时,管道卡在队列中,因为上一次运行由于任何其他原因而失败。

azure-pipelines.yml

pool: Default


schedules:
- cron: "*/3 * * * *"
  displayName: Every 10 minutes trigger
  branches:
    include:
      - main

variables:
  - group: dbbackup

parameters:
  - name: selectedDatabase
    type: string
    default: testdb
    values:
      - testdb
      - testdb1
      - testdb2

stages:
- template: template.yml
  parameters:
    selectedDatabase: ${{ parameters.selectedDatabase }}

模板.yml

parameters:
  selectedDatabase: ''

stages:
- stage: Backup
  jobs:
  - job: BackupDatabase
    steps:
    - script: |
        mkdir "$(backupPath)"
      displayName: 'Create backup directory'

    - script: |
        sqlcmd -S $(sqlServer) -U $(sqlUser) -P $(sqlPassword) -Q "BACKUP DATABASE [$(selectedDatabase)] TO DISK = N'$(backupPath)\\$(backupFileName)' WITH NOFORMAT, INIT, NAME = N'$(selectedDatabase)-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
      displayName: 'Backup SQL Database'  
- stage: Restore
  dependsOn: Backup
  condition: and(succeeded(), eq(dependencies.Backup.result, 'Succeeded'))
  jobs:
  - job: RestoreDatabase
    steps:
    - script: |
        sqlcmd -S $(sqlServer) -U $(sqlUser) -P $(sqlPassword) -Q "RESTORE DATABASE [$(selectedDatabase)] FROM DISK = N'$(backupPath)\\$(backupFileName)' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5" -o "$(backupPath)\\restore_log.txt"
      displayName: 'Restore SQL Database'

这是我的脚本

azure-devops azure-pipelines azure-pipelines-yaml azure-scheduler
1个回答
0
投票

当先前的管道失败时,我希望当前的管道陷入队列中。我不希望它通过脚本完成,我想要任何其他方式。只是我希望当下一个计划运行管道时,管道卡在队列中,因为上一次运行由于任何其他原因而失败。

管道的每次运行都是独立的,不支持在上次管道运行失败时卡住当前管道。请参阅排队策略的doc

enter image description here

可以实现的是查看目标pipeline的运行结果,并判断当前pipeline是否运行。

您可以在管道中添加

pre-step
,使用rest api Builds - List获取目标构建最新结果。请参阅我的回答获取代码示例。对于当前管道,您需要过滤到
value[1].result
,对于其他管道,需要过滤到
value[0].result

© www.soinside.com 2019 - 2024. All rights reserved.