Команды ведения журнала
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Команды ведения журнала — это способ взаимодействия задач и скриптов с агентом. Они охватывают такие действия, как создание переменных, маркировка шага как неудачная и отправка артефактов. Команды ведения журнала полезны при устранении неполадок конвейера.
Внимание
Мы делаем попытку маскировать секреты от отображения в выходных данных Azure Pipelines, но вам по-прежнему необходимо принять меры предосторожности. Никогда не повторять секреты в качестве выходных данных. Некоторые аргументы командной строки журнала операционных систем. Никогда не передавать секреты в командной строке. Вместо этого мы рекомендуем сопоставить секреты с переменными среды.
Мы никогда не маскируем подстроки секретов. Если, например, "abc123" задается как секрет, "abc" не маскируется из журналов. Это позволяет избежать маскирования секретов на слишком детальном уровне, что делает журналы нечитаемыми. По этой причине секреты не должны содержать структурированные данные. Если, например, "{ "foo": "bar" }" имеет значение секрета, "панель" не маскируется из журналов.
Тип | Команды |
---|---|
Команды задач | AddAttachment, Complete, LogDetail, LogIssue, PrependPath, SetEndpoint, SetProgress, SetVariable, SetSecret, UploadFile, UploadSummary |
Команды артефактов | Связывание, отправка |
Команды сборки | AddBuildTag, UpdateBuildNumber, UploadLog |
Команды выпуска | UpdateReleaseName |
Формат команды ведения журнала
Общий формат команды ведения журнала:
##vso[area.action property1=value;property2=value;...]message
Существуют также несколько команд форматирования с немного другим синтаксисом:
##[command]message
Чтобы вызвать команду ведения журнала, выполните команду через стандартные выходные данные.
#!/bin/bash
echo "##vso[task.setvariable variable=testvar;]testvalue"
Пути к файлам должны быть предоставлены в качестве абсолютных путей: корневым диском в Windows или начиная с /
Linux и macOS.
Примечание.
Обратите внимание, что вы не можете использовать set -x
команду перед командой ведения журнала при использовании Linux или macOS. См . сведения об устранении неполадок, чтобы узнать, как временно отключить set -x
Bash.
Команды форматирования
Примечание.
Используйте кодировку UTF-8 для команд ведения журнала.
Эти команды — это сообщения в формате журнала в Azure Pipelines. Они помечают определенные строки журнала как ошибки, предупреждения, свертые разделы и т. д.
Команды форматирования:
##[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]
Команды форматирования можно использовать в задаче bash или 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]"
Эти команды будут отображаться в таких журналах:
Этот блок команд также можно свернуть и выглядеть следующим образом:
Команды задач
LogIssue: регистрация ошибки или предупреждения
##vso[task.logissue]error/warning message
Использование
Запишите сообщение об ошибке или предупреждении в записи временной шкалы текущей задачи.
Свойства
type
=error
илиwarning
(обязательно)sourcepath
= расположение исходного файлаlinenumber
= номер строкиcolumnnumber
= номер столбцаcode
= код ошибки или предупреждения
Пример. Регистрация ошибки
#!/bin/bash
echo "##vso[task.logissue type=error]Something went very wrong."
exit 1
Совет
exit 1
является необязательным, но часто возникает команда, которую вы будете выдавать вскоре после записи ошибки. Если выбрать параметры управления: продолжить ошибку, результатом exit 1
будет частично успешной сборки вместо неудачной сборки. Кроме того, можно использовать task.logissue type=error
в качестве альтернативы.
Пример. Ведение журнала предупреждения о конкретном месте в файле
#!/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: отображение процента завершено
##vso[task.setprogress]current operation
Использование
Задайте ход выполнения и текущую операцию для текущей задачи.
Свойства
value
= процент завершения
Пример
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."
Чтобы узнать, как он выглядит, сохраните и в очереди сборку, а затем просмотрите выполнение сборки. Обратите внимание, что индикатор хода выполнения изменяется при выполнении этого скрипта.
Завершение: временная шкала завершения
##vso[task.complete]current operation
Использование
Завершите запись временной шкалы для текущей задачи, задайте результат задачи и текущую операцию. Если результат не указан, задайте результат успешно.
Свойства
result
=Succeeded
Задача выполнена успешно.SucceededWithIssues
Задача столкнулась с проблемами. Сборка будет завершена как частично выполненная в лучшем случае.Failed
Сборка завершится по мере сбоя. (Если Параметры элемента управления: выбран параметр "Продолжить ошибку ", сборка будет завершена частично успешно.)
Пример
Зайдите в журнал задачи по мере успешного выполнения.
##vso[task.complete result=Succeeded;]DONE
Задайте задачу как сбой. Кроме того, можно использовать 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: создание или обновление записи временной шкалы для задачи
##vso[task.logdetail]current operation
Использование
Создает и обновляет записи временной шкалы. Это в основном используется Azure Pipelines для создания отчетов о шагах, заданиях и этапах. Хотя клиенты могут добавлять записи на временную шкалу, они обычно не отображаются в пользовательском интерфейсе.
При первом ##vso[task.detail]
отображении на шаге мы создадим запись "подробной временной шкалы" для шага. Мы можем создавать и обновлять вложенные записи временной шкалы.id
parentid
Авторы задач должны помнить, какой GUID они использовали для каждой записи временной шкалы. Система ведения журнала будет отслеживать GUID для каждой записи временной шкалы, поэтому любой новый GUID приведет к новой записи временной шкалы.
Свойства
id
= GUID записи временной шкалы (обязательный)parentid
= GUID родительской временной шкалыtype
= тип записи (требуется в первый раз, не удается перезаписать)name
= имя записи (требуется в первый раз, не удается перезаписать)order
= порядок записи временной шкалы (требуется в первый раз, не удается перезаписать)starttime
=Datetime
finishtime
=Datetime
progress
= процент завершенияstate
=Unknown
|Initialized
|InProgress
|Completed
result
=Succeeded
|SucceededWithIssues
|Failed
Примеры
Создайте новую корневую запись временной шкалы:
##vso[task.logdetail id=new guid;name=project1;type=build;order=1]create new timeline record
Создайте вложенную запись временной шкалы:
##vso[task.logdetail id=new guid;parentid=exist timeline record guid;name=project1;type=build;order=1]create new nested timeline record
Обновить запись временной шкалы:
##vso[task.logdetail id=existing timeline record guid;progress=15;state=InProgress;]update timeline record
SetVariable: инициализация или изменение значения переменной
##vso[task.setvariable]value
Использование
Задает переменную в службе переменных taskcontext. Первая задача может задать переменную и следующие задачи могут использовать переменную. Переменная предоставляется следующим задачам в качестве переменной среды.
Если issecret
задано значение true
, значение переменной будет сохранено как секрет и замаскировано из журнала. Секретные переменные не передаются в задачи в качестве переменных среды и вместо этого должны передаваться в качестве входных данных.
Если isoutput
задан true
синтаксис для ссылки на переменную набора, зависит от того, имеет ли вы доступ к этой переменной в одном задании, будущем задании или будущем этапе. Кроме того, если isoutput
задан false
синтаксис для использования этой переменной в одном задании, отличается. Ознакомьтесь с уровнями выходных переменных , чтобы определить соответствующий синтаксис для каждого варианта использования.
Дополнительные сведения см . в разделе "Задать переменные в скриптах " и определить переменные .
Свойства
variable
= имя переменной (обязательно)issecret
= логическое значение (необязательно, по умолчанию — false)isoutput
= логическое значение (необязательно, по умолчанию — false)isreadonly
= логическое значение (необязательно, по умолчанию — false)
Примеры
Присвойте переменные:
- 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
Чтение переменных:
- 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)"
Выходные данные консоли:
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: регистрация значения в качестве секрета
##vso[task.setsecret]value
Использование
Значение регистрируется в качестве секрета в течение длительности задания. Значение будет маскировано из журналов из этого пункта вперед. Эта команда полезна при преобразовании секрета (например, кодировке Base64) или производном.
Примечание. Предыдущие вхождения значения секрета не будут маскированы.
Примеры
Присвойте переменные:
- bash: |
NEWSECRET=$(echo $OLDSECRET|base64)
echo "##vso[task.setsecret]$NEWSECRET"
name: SetSecret
env:
OLDSECRET: "SeCrEtVaLuE"
Чтение переменных:
- bash: |
echo "Transformed and derived secrets will be masked: $(echo $OLDSECRET|base64)"
env:
OLDSECRET: "SeCrEtVaLuE"
Выходные данные консоли:
Transformed and derived secrets will be masked: ***
SetEndpoint: изменение поля подключения к службе
##vso[task.setendpoint]value
Использование
Задайте поле подключения службы с заданным значением. Обновление значения будет сохранено в конечной точке для последующих задач, выполняемых в одном задании.
Свойства
id
= идентификатор подключения службы (обязательно)field
= тип поля, один изauthParameter
,dataParameter
илиurl
(обязательный)key
= ключ (обязательный, еслиfield
=url
только не )
Примеры
##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: присоединение файла к сборке
##vso[task.addattachment]value
Использование
Отправка и присоединение вложений к текущей записи временной шкалы. Эти файлы недоступны для скачивания с помощью журналов. Они могут ссылаться только на расширения с помощью значений типа или имени.
Свойства
type
= тип вложения (обязательный)name
= имя вложения (обязательно)
Пример
##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]c:\myattachment.txt
UploadSummary: добавление некоторых содержимого Markdown в сводку сборки
##vso[task.uploadsummary]local file path
Использование
Отправка и присоединение сводки Markdown из MD-файла в репозитории в текущую запись временной шкалы. Эта сводка должна быть добавлена в сводку по сборке или выпуску и недоступна для скачивания с помощью журналов. Сводка должна быть в формате UTF-8 или ASCII. Сводка появится на вкладке "Расширения" запуска конвейера. Отрисовка Markdown на вкладке "Расширения" отличается от визуализации вики-сайта Azure DevOps. Дополнительные сведения о синтаксисе Markdown см. в руководстве Markdown.
Примеры
##vso[task.uploadsummary]$(System.DefaultWorkingDirectory)/testsummary.md
Это короткая форма для команды
##vso[task.addattachment type=Distributedtask.Core.Summary;name=testsummaryname;]c:\testsummary.md
UploadFile: отправка файла, который можно скачать с помощью журналов задач
##vso[task.uploadfile]local file path
Использование
Отправьте интересующий пользователя файл в виде дополнительных сведений журнала в текущую запись временной шкалы. Файл должен быть доступен для скачивания вместе с журналами задач.
Пример
##vso[task.uploadfile]c:\additionalfile.log
PrependPath: предопределен путь к переменной среды PATH
##vso[task.prependpath]local file path
Использование
Обновите переменную среды PATH путем подготовки к PATH. Обновленная переменная среды будет отражена в последующих задачах.
Пример
##vso[task.prependpath]c:\my\directory\path
Команды артефактов
Связывание: инициализация артефакта
##vso[artifact.associate]artifact location
Использование
Создайте ссылку на существующий артефакт. Расположение артефакта должно быть путь к контейнеру файлов, VC-путь или UNC-путь к общей папке.
Свойства
artifactname
= имя артефакта (обязательно)type
= тип артефакта (обязательный)container
|filepath
|versioncontrol
|gitref
|tfvclabel
Примеры
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
Настраиваемый артефакт
##vso[artifact.associate artifactname=myDrop;artifacttype=myartifacttype]https://downloads.visualstudio.com/foo/bar/package.zip
Отправка артефакта
##vso[artifact.upload]local file path
Использование
Отправьте локальный файл в папку контейнера файлов и при необходимости опубликуйте артефакт как artifactname
.
Свойства
containerfolder
= папка, в которую будет отправлен файл, при необходимости будет создана папка.artifactname
= имя артефакта. (Обязательно)
Пример
##vso[artifact.upload containerfolder=testresult;artifactname=uploadedresult]c:\testresult.trx
Примечание.
Разница между Artifact.associate и Artifact.upload заключается в том, что первый может использоваться для создания ссылки на существующий артефакт, а последний можно использовать для отправки и публикации нового артефакта.
Команды сборки
UploadLog: Отправка журнала
##vso[build.uploadlog]local file path
Использование
Отправьте пользователю нужный журнал в папку "" контейнераlogs\tool
сборки.
Пример
##vso[build.uploadlog]c:\msbuild.log
UpdateBuildNumber: переопределите автоматически созданный номер сборки
##vso[build.updatebuildnumber]build number
Использование
Вы можете автоматически создать номер сборки из маркеров, указанных в параметрах конвейера. Однако если вы хотите использовать собственную логику для задания номера сборки, можно использовать эту команду ведения журнала.
Пример
##vso[build.updatebuildnumber]my-new-build-number
AddBuildTag: добавление тега в сборку
##vso[build.addbuildtag]build tag
Использование
Добавьте тег для текущей сборки. Вы можете развернуть тег с предварительно определенной или пользовательской переменной. Например, здесь новый тег добавляется в задачу Bash со значением last_scanned-$(currentDate)
. Нельзя использовать двоеточие с AddBuildTag.
Пример
- task: Bash@3
inputs:
targetType: 'inline'
script: |
last_scanned="last_scanned-$(currentDate)"
echo "##vso[build.addbuildtag]$last_scanned"
displayName: 'Apply last scanned tag'
Команды выпуска
UpdateReleaseName: переименование текущего выпуска
##vso[release.updatereleasename]release name
Использование
Обновите имя выпуска для запущенного выпуска.
Примечание.
Поддерживается в Azure DevOps и Azure DevOps Server, начиная с версии 2020.
Пример
##vso[release.updatereleasename]my-new-release-name