Зависимость и состояние oder в azure DevOps Pipeline - PullRequest
0 голосов
/ 15 апреля 2020

В Azure файле конвейерного yaml, при определении нескольких заданий за один этап, можно указать зависимости между ними. Можно также указать условия, при которых выполняется каждое задание.

Код № 1

jobs:
- job: A
  steps:
  - script: echo hello

- job: B
  dependsOn: A
  condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/master'))
  steps:
  - script: echo this only runs for master

Код № 2

jobs:
- job: A
  steps:
  - script: "echo ##vso[task.setvariable variable=skipsubsequent;isOutput=true]false"
    name: printvar

- job: B
  condition: and(succeeded(), ne(dependencies.A.outputs['printvar.skipsubsequent'], 'true'))
  dependsOn: A
  steps:
  - script: echo hello from B

Вопрос:

Код № 1 & # 2 выше имеют разные порядки зависимости и условия. Имеет ли значение заказ? Если так, то в чем дело? (в чем разница между разными заказами)

1 Ответ

1 голос
/ 16 апреля 2020

Обсудите 1 и 2. отдельно.

Код # 1 :

Поскольку между job1 и * 1010 нет соединения для передачи данных *, подключение данных здесь относится к совместному использованию переменных и т. д. c.

Таким образом, для # 1 нет вопросов по порядку. Здесь вы можете игнорировать указанную dependsOn, в то время как у вас нет особых требований к порядку выполнения между job A и job B.

НО, есть одна ключевая вещь, на которую нужно обратить внимание: фактический порядок выполнения будет меняться случайным образом, если вы не укажете dependsOn. Например, большую часть времени они будут соблюдать порядок job A, job B. Иногда они случайным образом запускаются как job B, job A.

Код # 2 :

. Это должно сделать dependsOn указанным. Потому что ваш job B использует выходную переменную, которая была создана / сгенерирована в job A. Поскольку наша система допускает, что одно и то же имя переменной существует в разных заданиях, вы должны указать dependsOn, чтобы система могла знать, что job B должна найти переменную skipsubsequent из job A, а не другие. Только указанные ключевые слова, переменные, сгенерированные в job A, могут быть доступны и доступны для следующих заданий.

Итак, вкратце: если между заданиями есть какая-либо связь с данными, например, переменная передача, вы должны указать dependsOn, чтобы задания связывали друг с другом.

...