Безопасное использование переменных и параметров в конвейере
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Узнайте, как безопасно использовать переменные и параметры для сбора входных данных от пользователей конвейера. Дополнительные сведения см. в следующих статьях:
- Определение переменных
- Определение переменных секрета
- Использование предопределенных переменных
- Использование параметров среды выполнения
- Использование типов шаблонов
Соблюдайте осторожность с секретными переменными. Рекомендуемые методы настройки секретных переменных включают использование пользовательского интерфейса, создание группы переменных или использование группы переменных, исходной из Azure Key Vault. Дополнительные сведения см. в разделе "Задание секретных переменных".
Переменные
Переменные служат удобным способом для сбора входных данных пользователей и упрощения передачи данных между шагами конвейера. Однако при работе с переменными следует соблюдать осторожность. По умолчанию только что созданные переменные, определенные в YAML или скрипте, являются чтением и записью. Подчиненные шаги могут неожиданно изменять значения переменных.
Например, рассмотрим следующий фрагмент скрипта:
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Если предыдущий шаг задан MyConfig
Debug & deltree /y c:
, это может привести к непредвиденным последствиям. Хотя этот пример просто удаляет содержимое агента сборки, он подчеркивает потенциальную опасность таких параметров.
Переменные можно сделать только для чтения.
Системные переменные, такие как Build.SourcesDirectory
, выходные переменные задачи и переменные времени очереди всегда доступны только для чтения.
Переменные, созданные в YAML или созданные во время выполнения скриптом, могут быть назначены только для чтения.
Когда скрипт или задача создают новую переменную, она может передать isReadonly=true
флаг в своей команде ведения журнала, чтобы сделать переменную доступной только для чтения.
В YAML можно указать переменные, доступные только для чтения, с помощью следующего ключа:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Переменные во время очереди
При определении переменной в редакторе пользовательского интерфейса Pipelines пользователи могут переопределить его значение во время выполнения конвейера. Эти переменные называются переменными во время очереди и всегда определяются в редакторе пользовательского интерфейса Pipelines.
Переменные во время очереди предоставляются конечному пользователю при выполнении конвейера вручную, и они могут изменять свои значения.
Пользователям требуется разрешение на изменение конфигурации сборки очереди в конвейере, чтобы указать переменные, заданные во время очереди.
Ограничить переменные, которые можно задать во время ожидания
Пользовательский интерфейс и REST API, используемые для запуска конвейера, позволяют пользователям определять новые переменные во время очереди.
В ранние дни Azure Pipelines эта функция имела следующие проблемы:
- Он позволил пользователям определять новые переменные, которые еще не определены автором конвейера в определении.
- Это позволяло пользователям переопределять системные переменные.
Для решения этих проблем мы определили параметр, ограничивающий переменные, которые можно задать во время очереди. Если этот параметр включен, можно задать только те переменные, которые явно помечены как Settable во время очереди. Другими словами, можно задать любые переменные во время очереди, если этот параметр не включен.
Этот параметр предназначен для работы на уровнях организации и проекта.
- Уровень организации:
- Если параметр включен, он применяет, что только переменные, явно помеченные как Settable во время очереди, могут быть изменены для всех конвейеров во всех проектах в организации.
- Администраторы коллекции проектов могут включить или отключить этот параметр.
- Получите доступ к этому параметру в разделе "Параметры конвейеров>> организации".
- Уровень проекта:
- Как и на уровне организации, включение этого параметра гарантирует, что для всех конвейеров в определенном проекте можно изменить только переменные, помеченные как Settable во время очереди.
- Если параметр уровня организации включен, он применяется ко всем проектам и не может быть отключен.
- Администраторы проектов могут включить или отключить этот параметр.
- Получите доступ к этому параметру в разделе "Параметры конвейеров>>проекта".
В следующем примере показано, что параметр включен, и конвейер определяет переменную с именем my_variable
, которая не задана во время очереди.
Затем предположим, что вы хотите запустить конвейер. На панели "Переменные" не отображаются переменные , а кнопка "Добавить переменную " отсутствует.
Использование сборок — очередь и запуск вызовов REST API конвейера для очереди выполнения конвейера и задания значения my_variable
новой переменной завершается ошибкой, аналогичной приведенной ниже.
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
"typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
"typeKey": "PipelineValidationException",
"errorCode": 0,
"eventId": 3000
}
Параметры
В отличие от переменных, выполняющийся конвейер не может изменять параметры конвейера.
Параметры имеют такие типы данных, как number
и string
, и они могут быть ограничены определенными подмножествами значений. Это ограничение полезно, если настраиваемый пользователем аспект конвейера должен принимать только значения из предопределенного списка, гарантируя, что конвейер не принимает произвольные данные.
Включение проверки параметров аргументов задач оболочки
Конвейеры могут ссылаться на задачи, выполняемые в конвейере. Некоторые задачи включают arguments
параметр, позволяющий указать дополнительные параметры для задачи.
Если включена проверка параметра "Включить аргументы задач оболочки", параметр аргументов проходит проверку, чтобы убедиться, что оболочка правильно выполняет такие символы, как запятая, кавычки и скобки. Как и переменные ограничения, которые можно задать в параметре времени очереди, можно настроить проверку аргументов параметров оболочки на уровне организации или проекта в разделе "Параметры>конвейеров".>
Если эта функция включена, все проблемы проверки, связанные с arguments
параметром, вызывают сообщение об ошибке, например следующее:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Чтобы устранить эту проблему, настройте аргументы, экранируя специальные символы, как указано в сообщении об ошибке. Эта проверка применяется к параметру arguments
в следующих конкретных задачах:
- PowerShell
- BatchScript
- Bash
- Ssh
- AzureFileCopy
- WindowsMachineFileCopy