Нужно ли нам устанавливать isOutput = true, чтобы использовать переменные в качестве входных данных для задач в рамках одной и той же работы? - PullRequest
0 голосов
/ 09 ноября 2019

Я читаю эту статью: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=classic%2Cbatch#set-in-script

Пример скрипта Powershell, показанный здесь: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=classic%2Cpowershell#set-a-job-scoped-variable-from-a-script-1

Я предполагаю, что «Задать переменные sauce и secret.Sauce» - это одна задачаи «Чтение переменных» является еще одной задачей. И что аргументы передаются в качестве аргументов задачи.

Если это так (то есть значение, заданное в одной задаче powershell, может использоваться в другой задаче powershell), то почему выполняет приведенный ниже разделэто (см. https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=classic%2Cpowershell#using-variables-as-task-inputs), посоветуйте, что:

Чтобы использовать переменную в качестве входных данных задачи, переменная должна быть выходной переменной, и вы должны дать производящей задаче ссылочное имя.

Этот раздел (https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#set-a-multi-job-output-variable) говорит:

Если вы хотите сделать переменную доступной для будущих заданий, вы должны пометить ее как выходную переменную, используяisOutput = true.

1 Ответ

0 голосов
/ 11 ноября 2019

Во-первых, то, что вы предположили о

«Задать переменные sauce и secret.Sauce» - это одна задача, а «Чтение переменных» - другая задача

верный. Если вы прочитаете его в той же задаче, вы получите сообщение об ошибке, например "{output variable name}".

Если вы используете переменную в том же задании , используйте $() напрямую, то же самое сиспользование $(<ReferenceName>.<VariableName>) в большинстве сценариев, включая получение переменных в одном задании агента, и не задание переменных с одинаковым именем в другой задаче. Но, очевидно, $() является наиболее простым методом.


  • 1. Если вы задали переменную с тем же именем в другой задаче.

    Иногда вам может потребоваться выполнить один и тот же сценарий с другим условием, поэтому его результат может иметь то же имя, но другое значение. Одним словом, вам нужно установить разные значения в разных задачах, используя одно и то же имя переменной. И тогда вам нужно выполнить следующую задачу в соответствии со значениями, которые генерируются в разных состояниях.

    В настоящее время использование $(<ReferenceName>.<output VariableName>) является лучшим решением, чтобы получить конкретное значение переменной, которое задает, в каком состоянии. Поскольку действие read может получить только последнее присвоение значения.

  • 2. Если вы хотите использовать эту переменную в другом задании агента

    В некоторых крупных проектах следующее задание агента должно использовать переменные, заданные в последнем задании агента (Примечание: Эти 2 задания должны находиться в одном конвейере). Повторный запуск сценария для установки переменной увеличит время, затрачиваемое на сборку, что также увеличит стоимость проверки кода.

    При этом условии $(<ReferenceName>.<output VariableName>) - единственный подход, который может достичь этогосценарий.

    НО, до сих пор этот подход поддерживал только схему YAML . Если вы используете классический редактор для реализации этого сценария, вы можете переписать только сценарий с установленной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...