Compartir vía


Uso seguro de variables y parámetros en la canalización

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

En este artículo se describe cómo usar de forma segura las variables y los parámetros para recopilar la entrada de los usuarios de la canalización. Si quiere obtener más información sobre el uso de variables y parámetros, consulte:

Tenga cuidado con las variables secretas. Las formas recomendadas de establecer variables secretas están en la interfaz de usuario, en un grupo de variables y en un grupo de variables de Azure Key Vault. Para más información, consulte configurar variables de entorno.

variables

Las variables pueden ser una forma cómoda de recopilar información del usuario por adelantado. También puede usar variables para pasar datos de paso a paso dentro de una canalización.

Pero debe usar las variables con precaución. Las variables recién creadas, ya sean definidas en YAML o escritas por un script, son de forma predeterminada de lectura y escritura. Un paso de bajada puede cambiar el valor de una variable de un modo inesperado.

Por ejemplo, tiene este script:

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

Un paso anterior podría establecer MyConfig en Debug & deltree /y c:. Aunque este ejemplo solo eliminaría el contenido del agente de compilación, puede imaginar cómo esta configuración podría llegar a ser mucho más peligrosa con facilidad.

Puede hacer que las variables sean de solo lectura. Las variables del sistema, como Build.SourcesDirectory, las variables de salida de tareas y las variables en tiempo de cola siempre son de solo lectura. Las variables creadas en YAML o creadas en tiempo de ejecución por un script se pueden designar como de solo lectura. Cuando un script o una tarea crea una variable, puede pasar la marca isReadonly=true en su comando de registro para que la variable sea de solo lectura.

En YAML, puede especificar variables de solo lectura mediante una clave específica:

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

Variables de tiempo en cola

Al definir una variable en el editor de interfaz de usuario de canalizaciones, puede optar por permitir que los usuarios invaliden su valor al ejecutar la canalización. Llamamos a esta variable una «variable en tiempo de cola». Las variables en tiempo de cola siempre se definen en el editor de la interfaz de usuario de canalizaciones.

Captura de pantalla de la definición de una variable en tiempo de cola.

Las variables en tiempo de cola se exponen al usuario final cuando ejecutan manualmente una canalización y pueden cambiar sus valores. Captura de pantalla de la actualización del valor de una variable en tiempo de cola.

Los usuarios necesitan el permiso Editar configuración de compilación de colas en la canalización para especificar variables establecidas en tiempo de cola.

Limitar las variables que pueden establecerse en el momento de la puesta en cola.

La interfaz de usuario y la API REST usadas para ejecutar una canalización ofrecen medios para que los usuarios definan nuevas variables en tiempo de cola.

Captura de pantalla de cómo agregar una variable en tiempo de cola justo antes de ejecutar la canalización.

En los inicios de Azure Pipelines, esta funcionalidad tenía algunos problemas:

  • Permitía a los usuarios definir nuevas variables que el autor de la canalización no había incluido explícitamente en la definición.
  • Permitía a los usuarios invalidar las variables del sistema.

Para corregir estos problemas, definimos una configuración que limita las variables que se pueden establecer en tiempo de cola. Con esta configuración habilitada, solo se pueden establecer las variables que se marcan explícitamente como "Settable at queue time" (configurable en el momento de poner en cola). En otras palabras, puede establecer cualquier variable en tiempo de cola a menos que esta configuración esté habilitada.

La configuración está diseñada para funcionar a nivel de organización y de proyecto.

  1. A nivel de organización. Cuando esta opción está activada, para todas las canalizaciones de todos los proyectos de la organización, solo pueden establecerse las variables que están marcadas explícitamente como "Configurable en el momento de poner en cola". Cuando esta opción está desactivada, cada proyecto puede optar por restringir o no las variables establecidas en el tiempo en cola. La opción es un botón de alternancia en Configuración de la organización -> Canalizaciones -> Configuración. Solo los administradores de la colección de proyectos pueden habilitarla o deshabilitarla. Captura de pantalla que muestra la limitación de variables que se pueden establecer en el tiempo en cola en el nivel de organización.
  2. A nivel de proyecto. Cuando esta opción está activada, para todas las canalizaciones del proyecto, solo pueden establecerse las variables que están marcadas explícitamente como "Configurable en el momento de poner en cola". Si la opción está activada en el nivel de organización, lo está para todos los proyectos y no se puede desactivar. La opción es un botón de alternancia en Configuración del proyecto -> Canalizaciones -> Configuración. Solo los administradores del proyecto pueden habilitarla o deshabilitarla. Captura de pantalla de la limitación de variables que se puede establecer en tiempo de cola a nivel de proyecto.

Veamos un ejemplo. Supongamos que la configuración está activada y la canalización define una variable denominada my_variable que no se puede establecer en tiempo de cola. Captura de pantalla de la definición de una variable en una canalización clásica.

A continuación, supongamos que desea ejecutar la canalización. El panel Variables no muestra ninguna variable y falta el botón Agregar variable.

Captura de pantalla del panel Variables con la configuración activada.

El uso de las llamadas API REST Compilaciones: cola y Ejecuciones: ejecución de canalización para poner en cola una ejecución de canalización y establecer el valor de my_variable o de una variable nueva producirá un error similar al siguiente.

{
  "$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
}

Parámetros

A diferencia de las variables, una canalización no puede cambiar los parámetros mientras se está ejecutando. Los parámetros tienen tipos de datos como number y string, y se pueden restringir a un subconjunto de valores. Restringir los parámetros es útil cuando una parte de la canalización configurable por el usuario debe tomar un valor sólo de una lista restringida. La configuración garantiza que la canalización no tome datos arbitrarios.

Habilitar la validación de parámetros de argumentos de tareas de shell

Las canalizaciones pueden hacer referencia a tareas que se ejecutan en la canalización. Varias tareas incluidas en Azure DevOps tienen un parámetro de argumentos que le permite especificar más opciones para la tarea.

Cuando la configuración Habilitar la validación de parámetros de argumentos de tareas de shell está habilitada, se revisa el parámetro de argumentos para detectar los caracteres que el shell podría no ejecutar correctamente. Los caracteres de ejemplo pueden ser punto y coma, comillas y paréntesis.

De forma similar a la opción Limitar variables que se pueden establecer en el tiempo en cola, Habilitar la validación de parámetros de argumentos de tareas de shell se puede configurar en el nivel de organización en Configuración>Canalizaciones>Configuración o en el nivel de proyecto en Configuración>Canalizaciones>Configuración.

Cuando está habilitada, hay un problema de validación detectado, se registra un mensaje de error similar al siguiente: Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Para resolver el problema, ajuste los argumentos mediante el escape de caracteres especiales, como se indica en el mensaje de error.

Cuando Habilitar la validación de parámetro de argumentos de tareas de shell está habilitado, la validación se aplica al parámetro de argumentos en las siguientes tareas.

  • PowerShell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

Pasos siguientes

Después de proteger las entradas, también debe proteger la infraestructura compartida.