Comandos de registro
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Los comandos de registro son cómo se comunican las tareas y los scripts con el agente. Tratan acciones como crear nuevas variables, marcar un paso como erróneo y cargar artefactos. Los comandos de registro son útiles al solucionar problemas con las canalizaciones.
Importante
Hacemos un esfuerzo por enmascarar los secretos para que no aparezcan en la salida de Azure Pipelines, pero debe tomar precauciones. Nunca haga eco de secretos como salida. Algunos sistemas operativos registran los argumentos de la línea de comandos. Nunca pase secretos en la línea de comandos. En su lugar, se recomienda asignar los secretos a variables de entorno.
Nunca enmascaramos las subcadenas de los secretos. Si, por ejemplo, se establece "abc123" como secreto, "abc" no se enmascara en los registros. El objetivo de esto es no enmascarar los secretos de un modo demasiado pormenorizado, que haría los registros ilegibles. Por este motivo, los secretos no deben contener datos estructurados. Si, por ejemplo, se establece "{ "foo": "bar" }" como secreto, "bar" no se enmascara en los registros.
Tipo | Comandos |
---|---|
Comandos de tarea | AddAttachment, Complete, LogDetail, LogIssue, PrependPath, SetEndpoint, SetProgress, SetVariable, SetSecret, UploadFile, UploadSummary |
Comandos de artefacto | Associate, Upload |
Comandos de compilación | AddBuildTag, UpdateBuildNumber, UploadLog |
Comandos de versión | UpdateReleaseName |
Formato de los comandos de registro
El formato general de los comandos de registro es:
##vso[area.action property1=value;property2=value;...]message
También hay algunos comandos de formato con una sintaxis ligeramente diferente:
##[command]message
Para invocar un comando de registro, repita el comando mediante la salida estándar.
#!/bin/bash
echo "##vso[task.setvariable variable=testvar;]testvalue"
Las rutas de acceso de archivo deben proporcionarse como absolutas: con la raíz en una unidad en Windows o con /
al principio en Linux y macOS.
Nota:
Tenga en cuenta que no puede usar el comando set -x
antes de un comando de registro con Linux o macOS. Consulte la solución de problemas para más información sobre cómo deshabilitar temporalmente set -x
para Bash.
Comandos de formato
Nota:
Use la codificación UTF-8 para los comandos de registro.
Estos comandos son mensajes para el formateador del registro en Azure Pipelines. Marcan líneas de registro específicas como errores, advertencias, secciones contraíbles, etc.
Los comandos de formato son:
##[group]Beginning of a group
##[warning]Warning message
##[error]Error message
##[section]Start of a section
##[debug]Debug text
##[command]Command-line being run
##[endgroup]
Puede usar los comandos de formato en una tarea de Bash o PowerShell.
steps:
- bash: |
echo "##[group]Beginning of a group"
echo "##[warning]Warning message"
echo "##[error]Error message"
echo "##[section]Start of a section"
echo "##[debug]Debug text"
echo "##[command]Command-line being run"
echo "##[endgroup]"
Estos comandos se representarán en los registros de la siguiente manera:
Ese bloque de comandos también se puede contraer y tiene el siguiente aspecto:
Comandos de tarea
LogIssue: registra un error o una advertencia.
##vso[task.logissue]error/warning message
Uso
Registre un mensaje de error o de advertencia en el registro temporal de la tarea actual.
Propiedades
type
=error
owarning
(obligatorio)sourcepath
= ubicación del archivo de origenlinenumber
= número de líneacolumnnumber
= número de columnacode
= cualquier error o advertencia
Ejemplo: registro de un error
#!/bin/bash
echo "##vso[task.logissue type=error]Something went very wrong."
exit 1
Sugerencia
exit 1
es opcional, pero suele ser un comando que se emitirá poco después del registro de un error. Si selecciona Control Options: Continue on error, exit 1
dará como resultado una compilación parcialmente correcta en lugar de una compilación con errores. Como alternativa, también puede usar task.logissue type=error
.
Ejemplo: Registro de una advertencia sobre un lugar específico en un archivo
#!/bin/bash
echo "##vso[task.logissue type=warning;sourcepath=consoleapp/main.cs;linenumber=1;columnnumber=1;code=100;]Found something that could be a problem."
SetProgress: muestra el porcentaje completado.
##vso[task.setprogress]current operation
Uso
Establezca el progreso y la operación actual para la tarea actual.
Propiedades
value
= porcentaje de finalización
Ejemplo
echo "Begin a lengthy process..."
for i in {0..100..10}
do
sleep 1
echo "##vso[task.setprogress value=$i;]Sample Progress Indicator"
done
echo "Lengthy process is complete."
Para ver cómo parece, guarde y ponga en cola la compilación y observe la ejecución de la compilación. Observe que un indicador de progreso cambia cuando la tarea ejecuta este script.
Complete: fin de la escala de tiempo.
##vso[task.complete]current operation
Uso
Finalice el registro temporal de la tarea actual, establezca el resultado de la tarea y la operación actual. Cuando no se proporciona el resultado, establézcalo en correcto.
Propiedades
result
=Succeeded
Tarea realizada con éxito.SucceededWithIssues
La tarea tuvo problemas. La compilación se completará como parcialmente correcta en el mejor de los casos.Failed
La compilación se completará como con errores. (Si se selecciona la opción Control Options: Continue on error, la compilación se completará como parcialmente correcta en el mejor de los casos).
Ejemplo
Registre una tarea como que se realizó correctamente.
##vso[task.complete result=Succeeded;]DONE
Establezca una tarea como errónea. Como alternativa, también puede usar exit 1
.
- bash: |
if [ -z "$SOLUTION" ]; then
echo "##vso[task.logissue type=error;]Missing template parameter \"solution\""
echo "##vso[task.complete result=Failed;]"
fi
LogDetail: crea o actualiza un registro temporal para una tarea.
##vso[task.logdetail]current operation
Uso
Crea y actualiza los registros temporales. Azure Pipelines usa internamente esto para informar sobre los pasos, los trabajos y las fases. Aunque los clientes pueden agregar entradas a la escala de tiempo, normalmente no se mostrarán en la interfaz de usuario.
La primera vez que vemos ##vso[task.detail]
durante un paso, creamos un registro de "detalle de la escala de tiempo" para el paso. Podemos crear y actualizar registros temporales anidados basados en id
y parentid
.
Los autores de las tareas deben recordar qué GUID usaron para cada registro temporal. El sistema de registro realizará un seguimiento del GUID para cada registro temporal, por lo que cualquier GUID nuevo dará como resultado un registro temporal nuevo.
Propiedades
id
= GUID de registro temporal (obligatorio)parentid
= GUID del registro temporal primariotype
= tipo de registro (obligatorio la primera vez, no se puede sobrescribir)name
= nombre de registro (obligatorio la primera vez, no se puede sobrescribir)order
= orden del registro temporal (obligatorio la primera vez, no se puede sobrescribir)starttime
=Datetime
finishtime
=Datetime
progress
= porcentaje de finalizaciónstate
=Unknown
|Initialized
|InProgress
|Completed
result
=Succeeded
|SucceededWithIssues
|Failed
Ejemplos
Cree un registro temporal raíz:
##vso[task.logdetail id=new guid;name=project1;type=build;order=1]create new timeline record
Cree un registro temporal anidado:
##vso[task.logdetail id=new guid;parentid=exist timeline record guid;name=project1;type=build;order=1]create new nested timeline record
Actualice un registro temporal existente:
##vso[task.logdetail id=existing timeline record guid;progress=15;state=InProgress;]update timeline record
SetVariable: inicialice o modifique el valor de una variable.
##vso[task.setvariable]value
Uso
Establece una variable en el servicio de variables de taskcontext. La primera tarea puede establecer una variable y las siguientes pueden usarla. La variable se expone a las tareas siguientes como variable de entorno.
Cuando issecret
se establece en true
, el valor de la variable se guarda como secreto y se enmascara en el registro. Las variables secretas no se pasan a las tareas como variables de entorno, sino que se deben pasar como entradas.
Cuando isoutput
se establece en true
, la sintaxis que hace referencia a la variable establecida varía en función de si se accede a esa variable en el mismo trabajo, un trabajo futuro o una fase futura. Además, si isoutput
se establece en false
, la sintaxis para usar esa variable dentro del mismo trabajo es distinta. Consulte los niveles de las variables de salida para determinar la sintaxis adecuada para cada caso de uso.
Consulte Establecimiento de variables en scripts y Definición de variables para más detalles.
Propiedades
variable
= nombre de la variable (obligatorio)issecret
= booleano (opcional, el valor predeterminado es false)isoutput
= booleano (opcional, el valor predeterminado es false)isreadonly
= booleano (opcional, el valor predeterminado es false)
Ejemplos
Establezca las variables:
- bash: |
echo "##vso[task.setvariable variable=sauce;]crushed tomatoes"
echo "##vso[task.setvariable variable=secretSauce;issecret=true]crushed tomatoes with garlic"
echo "##vso[task.setvariable variable=outputSauce;isoutput=true]canned goods"
name: SetVars
Lea las variables:
- bash: |
echo "Non-secrets automatically mapped in, sauce is $SAUCE"
echo "Secrets are not automatically mapped in, secretSauce is $SECRETSAUCE"
echo "You can use macro replacement to get secrets, and they'll be masked in the log: $(secretSauce)"
Salida de la consola:
Non-secrets automatically mapped in, sauce is crushed tomatoes
Secrets are not automatically mapped in, secretSauce is
You can use macro replacement to get secrets, and they'll be masked in the log: ***
Future jobs can also see canned goods
Future jobs can also see canned goods
SetSecret: registrar un valor como secreto
##vso[task.setsecret]value
Uso
El valor se registra como secreto durante el trabajo. El valor se enmascarará desde los registros desde este punto hacia delante. Este comando es útil cuando se transforma un secreto (por ejemplo, codificado en base64) o se deriva.
Nota: Las apariciones anteriores del valor secreto no se enmascararán.
Ejemplos
Establezca las variables:
- bash: |
NEWSECRET=$(echo $OLDSECRET|base64)
echo "##vso[task.setsecret]$NEWSECRET"
name: SetSecret
env:
OLDSECRET: "SeCrEtVaLuE"
Lea las variables:
- bash: |
echo "Transformed and derived secrets will be masked: $(echo $OLDSECRET|base64)"
env:
OLDSECRET: "SeCrEtVaLuE"
Salida de la consola:
Transformed and derived secrets will be masked: ***
SetEndpoint: modifica un campo de conexión de servicio.
##vso[task.setendpoint]value
Uso
Establezca un campo de conexión de servicio con un valor especificado. El valor actualizado se conservará en el punto de conexión para las tareas posteriores que se ejecuten en el mismo trabajo.
Propiedades
id
= identificador de conexión de servicio (obligatorio)field
= tipo de campo, uno deauthParameter
,dataParameter
ourl
(obligatorio)key
= clave (obligatorio, a menos quefield
=url
)
Ejemplos
##vso[task.setendpoint id=000-0000-0000;field=authParameter;key=AccessToken]testvalue
##vso[task.setendpoint id=000-0000-0000;field=dataParameter;key=userVariable]testvalue
##vso[task.setendpoint id=000-0000-0000;field=url]https://example.com/service
AddAttachment: adjunta un archivo a la compilación.
##vso[task.addattachment]value
Uso
Cargue y adjunte datos al registro temporal actual. Estos archivos no están disponibles para su descarga con los registros. Solo se puede hacer referencia a ellos mediante extensiones con los valores de tipo o nombre.
Propiedades
type
= tipo de los datos adjuntos (obligatorio)name
= nombre de los datos adjuntos (obligatorio)
Ejemplo
##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]c:\myattachment.txt
UploadSummary: agrega contenido de Markdown al resumen de la compilación.
##vso[task.uploadsummary]local file path
Uso
Cargue y adjunte el resumen de Markdown desde un archivo .md del repositorio al registro de escala de tiempo actual. Este resumen se agregará al resumen de la compilación o versión y no estará disponible para su descarga con los registros. El resumen debe estar en formato UTF-8 o ASCII. El resumen aparecerá en la pestaña Extensiones de la ejecución de la canalización. La representación de Markdown en la pestaña Extensiones es diferente de la representación de la wiki de Azure DevOps.
Ejemplos
##vso[task.uploadsummary]$(System.DefaultWorkingDirectory)/testsummary.md
Es una forma abreviada para el comando.
##vso[task.addattachment type=Distributedtask.Core.Summary;name=testsummaryname;]c:\testsummary.md
UploadFile: carga un archivo que se puede descargar con los registros de tarea.
##vso[task.uploadfile]local file path
Uso
Cargue el archivo que le interesa al usuario como información de registro adicional en el registro temporal actual. El archivo estará disponible para su descarga junto con los registros de tarea.
Ejemplo
##vso[task.uploadfile]c:\additionalfile.log
PrependPath: antepone una ruta de acceso a la variable de entorno PATH.
##vso[task.prependpath]local file path
Uso
Actualice la variable de entorno PATH anteponiéndola a PATH. La variable de entorno actualizada se reflejará en las tareas posteriores.
Ejemplo
##vso[task.prependpath]c:\my\directory\path
Comandos de artefacto
Associate: inicia un artefacto.
##vso[artifact.associate]artifact location
Uso
Cree un vínculo a un artefacto existente. La ubicación del artefacto debe ser una ruta de acceso del contenedor de archivos, una ruta de acceso verificable o una ruta de acceso de recurso compartido UNC.
Propiedades
artifactname
= nombre del artefacto (obligatorio)type
= tipo de artefacto (obligatorio)container
|filepath
|versioncontrol
|gitref
|tfvclabel
Ejemplos
container
##vso[artifact.associate type=container;artifactname=MyServerDrop]#/1/build
filepath
##vso[artifact.associate type=filepath;artifactname=MyFileShareDrop]\\MyShare\MyDropLocation
versioncontrol
##vso[artifact.associate type=versioncontrol;artifactname=MyTfvcPath]$/MyTeamProj/MyFolder
gitref
##vso[artifact.associate type=gitref;artifactname=MyTag]refs/tags/MyGitTag
tfvclabel
##vso[artifact.associate type=tfvclabel;artifactname=MyTag]MyTfvcLabel
Artefacto personalizado
##vso[artifact.associate artifactname=myDrop;artifacttype=myartifacttype]https://downloads.visualstudio.com/foo/bar/package.zip
Upload: carga un artefacto.
##vso[artifact.upload]local file path
Uso
Cargue un archivo local en una carpeta de contenedor de archivos y, opcionalmente, publique un artefacto como artifactname
.
Propiedades
containerfolder
= carpeta en la que se cargará el archivo, si es necesario, se crea.artifactname
= nombre del artefacto. (Requerido)
Ejemplo
##vso[artifact.upload containerfolder=testresult;artifactname=uploadedresult]c:\testresult.trx
Nota
La diferencia entre Artifact.associate y Artifact.upload es que la primera se puede usar para crear un vínculo a un artefacto existente, mientras que la última se puede usar para cargar o publicar un artefacto nuevo.
Comandos de compilación
UploadLog: carga un registro.
##vso[build.uploadlog]local file path
Uso
Cargue el registro que le interesa al usuario en la carpeta "logs\tool
" del contenedor de la compilación.
Ejemplo
##vso[build.uploadlog]c:\msbuild.log
UpdateBuildNumber: invalida el número de compilación generado automáticamente.
##vso[build.updatebuildnumber]build number
Uso
Puede generar automáticamente un número de compilación a partir de los tokens que especifique en las opciones de canalización. Sin embargo, si desea usar su propia lógica para establecer el número de compilación, puede usar este comando de registro.
Ejemplo
##vso[build.updatebuildnumber]my-new-build-number
AddBuildTag: agrega una etiqueta a la compilación.
##vso[build.addbuildtag]build tag
Uso
Agregue una etiqueta para la compilación actual. Puede expandir la etiqueta con una variable predefinida o definida por el usuario. Por ejemplo, aquí se agrega una nueva etiqueta en una tarea de Bash con el valor last_scanned-$(currentDate)
. No puede usar dos puntos con AddBuildTag.
Ejemplo
- task: Bash@3
inputs:
targetType: 'inline'
script: |
last_scanned="last_scanned-$(currentDate)"
echo "##vso[build.addbuildtag]$last_scanned"
displayName: 'Apply last scanned tag'
Comandos de versión
UpdateReleaseName: cambia el nombre de la versión actual.
##vso[release.updatereleasename]release name
Uso
Actualice el nombre de la versión en ejecución.
Nota:
Se admite en Azure DevOps y Azure DevOps Server a partir de la versión 2020.
Ejemplo
##vso[release.updatereleasename]my-new-release-name