Polecenia rejestrowania

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Polecenia rejestrowania to sposób, w jaki zadania i skrypty komunikują się z agentem. Obejmują one akcje, takie jak tworzenie nowych zmiennych, oznaczanie kroku jako nieudanego i przekazywanie artefaktów. Polecenia rejestrowania są przydatne podczas rozwiązywania problemów z potokiem.

Ważne

Staramy się maskować wpisy tajne przed pojawieniem się w danych wyjściowych usługi Azure Pipelines, ale nadal trzeba podjąć środki ostrożności. Nigdy nie powtarzaj wpisów tajnych jako danych wyjściowych. Niektóre argumenty wiersza polecenia dziennika systemów operacyjnych. Nigdy nie przekazuj wpisów tajnych w wierszu polecenia. Zamiast tego sugerujemy mapowania wpisów tajnych na zmienne środowiskowe.

Nigdy nie maskujemy podciągów wpisów tajnych. Jeśli na przykład "abc123" jest ustawiony jako wpis tajny, "abc" nie jest maskowany z dzienników. Jest to unikanie maskowania wpisów tajnych na zbyt szczegółowym poziomie, dzięki czemu dzienniki są nieczytelne. Z tego powodu wpisy tajne nie powinny zawierać danych strukturalnych. Jeśli na przykład "{ "foo": "bar" }" jest ustawiony jako wpis tajny, "pasek" nie jest maskowany z dzienników.

Typ Polecenia
Polecenia zadań AddAttachment, Complete, LogDetail, LogIssue, PrependPath, SetEndpoint, SetProgress, SetVariable, SetSecret, UploadFile, UploadSummary
Polecenia artefaktu Kojarzenie, przekazywanie
Polecenia kompilacji AddBuildTag, UpdateBuildNumber, UploadLog
Polecenia wydania UpdateReleaseName

Format polecenia rejestrowania

Ogólny format polecenia rejestrowania to:

##vso[area.action property1=value;property2=value;...]message

Istnieje również kilka poleceń formatowania z nieco inną składnią:

##[command]message

Aby wywołać polecenie rejestrowania, echo polecenia za pośrednictwem standardowych danych wyjściowych.

#!/bin/bash
echo "##vso[task.setvariable variable=testvar;]testvalue"

Ścieżki plików powinny być podane jako ścieżki bezwzględne: rooted na dysku w systemie Windows lub począwszy od / w systemach Linux i macOS.

Uwaga

Pamiętaj, że nie można użyć set -x polecenia przed poleceniem rejestrowania w przypadku korzystania z systemu Linux lub macOS. Zobacz rozwiązywanie problemów, aby dowiedzieć się, jak tymczasowo wyłączyć set -x powłokę Bash.

Polecenia formatowania

Uwaga

Użyj kodowania UTF-8 na potrzeby poleceń rejestrowania.

Te polecenia to komunikaty do formatowania dziennika w usłudze Azure Pipelines. Oznaczają określone wiersze dziennika jako błędy, ostrzeżenia, zwijane sekcje itd.

Polecenia formatowania to:

##[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]

Polecenia formatowania można używać w zadaniu powłoki bash lub programu 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]"

Te polecenia będą renderowane w dziennikach w następujący sposób:

Zrzut ekranu przedstawiający dzienniki z niestandardowymi opcjami formatowania

Ten blok poleceń można również zwinąć i wygląda następująco:

Zrzut ekranu przedstawiający zwiniętą sekcję dzienników

Polecenia zadań

LogIssue: rejestrowanie błędu lub ostrzeżenia

##vso[task.logissue]error/warning message

Użycie

Zarejestruj komunikat o błędzie lub ostrzeżeniu w rekordzie osi czasu bieżącego zadania.

Właściwości

  • type = error lub warning (wymagane)
  • sourcepath = lokalizacja pliku źródłowego
  • linenumber = numer wiersza
  • columnnumber = liczba kolumn
  • code = kod błędu lub ostrzeżenia

Przykład: rejestrowanie błędu

#!/bin/bash
echo "##vso[task.logissue type=error]Something went very wrong."
exit 1

Napiwek

exit 1 jest opcjonalne, ale często jest to polecenie, które będzie wystawiane wkrótce po zarejestrowaniu błędu. Jeśli wybierzesz pozycję Opcje sterowania: kontynuuj po błędzie, exit 1 spowoduje to częściowo pomyślną kompilację zamiast kompilacji zakończonej niepowodzeniem. Alternatywnie możesz również użyć polecenia task.logissue type=error.

Przykład: rejestrowanie ostrzeżenia o określonym miejscu w pliku

#!/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: Pokaż wartość procentową ukończoną

##vso[task.setprogress]current operation

Użycie

Ustaw postęp i bieżącą operację dla bieżącego zadania.

Właściwości

  • value = procent ukończenia

Przykład

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."

Aby zobaczyć, jak wygląda, zapisz i utwórz kolejkę kompilacji, a następnie obejrzyj przebieg kompilacji. Zwróć uwagę, że wskaźnik postępu zmienia się, gdy zadanie uruchamia ten skrypt.

Ukończono: Zakończenie osi czasu

##vso[task.complete]current operation

Użycie

Zakończ rekord osi czasu dla bieżącego zadania, ustaw wynik zadania i bieżącą operację. Jeśli wynik nie zostanie podany, ustaw wynik na powodzenie.

Właściwości

  • result =
    • Succeeded Zadanie zakończyło się pomyślnie.
    • SucceededWithIssues Zadanie napotkało problemy. Kompilacja zostanie ukończona jako częściowo zakończona pomyślnie.
    • Failed Kompilacja zostanie ukończona jako zakończona niepowodzeniem. (Jeśli Opcje sterowania: opcja Kontynuuj przy błędzie jest zaznaczona. Kompilacja zostanie ukończona jako częściowo zakończona pomyślnie.

Przykład

Zarejestruj zadanie jako zakończone pomyślnie.

##vso[task.complete result=Succeeded;]DONE

Ustaw zadanie jako nieudane. Alternatywnie możesz również użyć polecenia 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: tworzenie lub aktualizowanie rekordu osi czasu dla zadania

##vso[task.logdetail]current operation

Użycie

Tworzy i aktualizuje rekordy osi czasu. Jest ona używana głównie wewnętrznie przez usługę Azure Pipelines do raportowania kroków, zadań i etapów. Klienci mogą dodawać wpisy do osi czasu, ale zazwyczaj nie będą one wyświetlane w interfejsie użytkownika.

Podczas pierwszego kroku tworzymy ##vso[task.detail] rekord "szczegółowa oś czasu" dla kroku. Możemy tworzyć i aktualizować zagnieżdżone rekordy osi czasu oparte na elementach id i parentid.

Autorzy zadań muszą pamiętać, który identyfikator GUID był używany dla każdego rekordu osi czasu. System rejestrowania będzie śledzić identyfikator GUID dla każdego rekordu osi czasu, więc każdy nowy identyfikator GUID spowoduje nowy rekord osi czasu.

Właściwości

  • id = Identyfikator GUID rekordu osi czasu (wymagany)
  • parentid = identyfikator GUID rekordu osi czasu nadrzędnego
  • type = Typ rekordu (wymagany po raz pierwszy, nie można zastąpić)
  • name = Nazwa rekordu (wymagana po raz pierwszy, nie można zastąpić)
  • order = kolejność rekordu osi czasu (wymagane po raz pierwszy, nie można zastąpić)
  • starttime = Datetime
  • finishtime = Datetime
  • progress = procent ukończenia
  • state = Unknown | Initialized | InProgress | Completed
  • result = Succeeded | SucceededWithIssues | Failed

Przykłady

Utwórz nowy rekord osi czasu głównego:

##vso[task.logdetail id=new guid;name=project1;type=build;order=1]create new timeline record

Utwórz nowy zagnieżdżony rekord osi czasu:

##vso[task.logdetail id=new guid;parentid=exist timeline record guid;name=project1;type=build;order=1]create new nested timeline record

Aktualizacja istnieje rekord osi czasu:

##vso[task.logdetail id=existing timeline record guid;progress=15;state=InProgress;]update timeline record

SetVariable: inicjowanie lub modyfikowanie wartości zmiennej

##vso[task.setvariable]value

Użycie

Ustawia zmienną w usłudze zmiennej taskcontext. Pierwsze zadanie może ustawić zmienną, a następujące zadania mogą używać zmiennej. Zmienna jest widoczna dla następujących zadań jako zmiennej środowiskowej.

Gdy issecret zostanie ustawiona truewartość , wartość zmiennej zostanie zapisana jako wpis tajny i zamaskowana z dziennika. Zmienne tajne nie są przekazywane do zadań jako zmiennych środowiskowych i zamiast tego muszą być przekazywane jako dane wejściowe.

Gdy isoutput jest ustawiona składnia, aby odwoływać się do true zmiennej ustawionej, różni się w zależności od tego, czy uzyskujesz dostęp do tej zmiennej w tym samym zadaniu, w przyszłym zadaniu, czy w przyszłym etapie. Ponadto jeśli isoutput jest ustawiona false na składnię używania tej zmiennej w ramach tego samego zadania, jest odrębna. Zobacz poziomy zmiennych wyjściowych , aby określić odpowiednią składnię dla każdego przypadku użycia.

Aby uzyskać więcej informacji, zobacz ustawianie zmiennych w skryptach i definiowanie zmiennych .

Właściwości

  • variable = nazwa zmiennej (wymagane)
  • issecret = wartość logiczna (opcjonalna, domyślna wartość false)
  • isoutput = wartość logiczna (opcjonalna, domyślna wartość false)
  • isreadonly = wartość logiczna (opcjonalna, domyślna wartość false)

Przykłady

Ustaw wartości zmiennych:

- 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

Odczytywanie zmiennych:

- 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)"

Dane wyjściowe konsoli:

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: Rejestrowanie wartości jako wpisu tajnego

##vso[task.setsecret]value

Użycie

Wartość jest rejestrowana jako wpis tajny przez czas trwania zadania. Wartość zostanie zamaskowana z dzienników z tego punktu do przodu. To polecenie jest przydatne, gdy wpis tajny jest przekształcany (np. zakodowany w formacie base64) lub pochodny.

Uwaga: Poprzednie wystąpienia wartości wpisu tajnego nie będą maskowane.

Przykłady

Ustaw wartości zmiennych:

- bash: |
    NEWSECRET=$(echo $OLDSECRET|base64)
    echo "##vso[task.setsecret]$NEWSECRET"
  name: SetSecret
  env:
    OLDSECRET: "SeCrEtVaLuE"

Odczytywanie zmiennych:

- bash: |
    echo "Transformed and derived secrets will be masked: $(echo $OLDSECRET|base64)"
  env:
    OLDSECRET: "SeCrEtVaLuE"

Dane wyjściowe konsoli:

Transformed and derived secrets will be masked: ***

SetEndpoint: Modyfikowanie pola połączenia usługi

##vso[task.setendpoint]value

Użycie

Ustaw pole połączenia usługi z daną wartością. Zaktualizowana wartość zostanie zachowana w punkcie końcowym dla kolejnych zadań wykonywanych w ramach tego samego zadania.

Właściwości

  • id = identyfikator połączenia usługi (wymagany)
  • field = typ pola, jeden z authParameter, dataParameterlub url (wymagane)
  • key = klucz (wymagany, chyba że field = url)

Przykłady

##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: dołączanie pliku do kompilacji

##vso[task.addattachment]value

Użycie

Przekaż i dołącz załącznik do bieżącego rekordu osi czasu. Te pliki nie są dostępne do pobrania za pomocą dzienników. Można do nich odwoływać się tylko za pomocą rozszerzeń przy użyciu wartości typu lub nazwy.

Właściwości

  • type = typ załącznika (wymagany)
  • name = nazwa załącznika (wymagane)

Przykład

##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]c:\myattachment.txt

UploadSummary: dodawanie zawartości języka Markdown do podsumowania kompilacji

##vso[task.uploadsummary]local file path

Użycie

Przekaż i dołącz podsumowanie języka Markdown z pliku md w repozytorium do bieżącego rekordu osi czasu. To podsumowanie należy dodać do podsumowania kompilacji/wydania i nie jest dostępne do pobrania z dziennikami. Podsumowanie powinno być w formacie UTF-8 lub ASCII. Podsumowanie zostanie wyświetlone na karcie Rozszerzenia przebiegu potoku. Renderowanie języka Markdown na karcie Rozszerzenia różni się od renderowania w witrynie typu wiki usługi Azure DevOps.

Przykłady

##vso[task.uploadsummary]$(System.DefaultWorkingDirectory)/testsummary.md

Jest to krótka forma polecenia

##vso[task.addattachment type=Distributedtask.Core.Summary;name=testsummaryname;]c:\testsummary.md

UploadFile: przekaż plik, który można pobrać z dziennikami zadań

##vso[task.uploadfile]local file path

Użycie

Przekaż zainteresowany plik jako dodatkowe informacje dziennika do bieżącego rekordu osi czasu. Plik jest dostępny do pobrania wraz z dziennikami zadań.

Przykład

##vso[task.uploadfile]c:\additionalfile.log

PrependPath: wstępna ścieżka do zmiennej środowiskowej PATH

##vso[task.prependpath]local file path

Użycie

Zaktualizuj zmienną środowiskową PATH, poprzedzając element PATH. Zaktualizowana zmienna środowiskowa zostanie odzwierciedlona w kolejnych zadaniach.

Przykład

##vso[task.prependpath]c:\my\directory\path

Polecenia artefaktu

Kojarzenie: inicjowanie artefaktu

##vso[artifact.associate]artifact location

Użycie

Utwórz link do istniejącego artefaktu. Lokalizacja artefaktu musi być ścieżką kontenera plików, ścieżką VC lub ścieżką udziału UNC.

Właściwości

  • artifactname = nazwa artefaktu (wymagane)
  • type = typ artefaktu (wymagany) container | filepath | versioncontrol | gitref | tfvclabel

Przykłady

  • Kontenera

    ##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
    
  • Artefakt niestandardowy

    ##vso[artifact.associate artifactname=myDrop;artifacttype=myartifacttype]https://downloads.visualstudio.com/foo/bar/package.zip
    

Przekazywanie: przekazywanie artefaktu

##vso[artifact.upload]local file path

Użycie

Przekaż plik lokalny do folderu kontenera plików i opcjonalnie opublikuj artefakt jako artifactname.

Właściwości

  • containerfolder = folder, do którego zostanie przekazany plik, folder zostanie utworzony w razie potrzeby.
  • artifactname = nazwa artefaktu. (Wymagane)

Przykład

##vso[artifact.upload containerfolder=testresult;artifactname=uploadedresult]c:\testresult.trx

Uwaga

Różnica między Artifact.associate i Artifact.upload polega na tym, że pierwszy może służyć do utworzenia linku do istniejącego artefaktu, podczas gdy ten ostatni może służyć do przekazywania/publikowania nowego artefaktu.

Polecenia kompilacji

UploadLog: przekazywanie dziennika

##vso[build.uploadlog]local file path

Użycie

Przekaż interesujący użytkownika dziennik do folderu "logs\tool" kontenera kompilacji.

Przykład

##vso[build.uploadlog]c:\msbuild.log

UpdateBuildNumber: zastąpij automatycznie wygenerowany numer kompilacji

##vso[build.updatebuildnumber]build number

Użycie

Możesz automatycznie wygenerować numer kompilacji na podstawie tokenów, które określisz w opcjach potoku. Jeśli jednak chcesz użyć własnej logiki do ustawienia numeru kompilacji, możesz użyć tego polecenia rejestrowania.

Przykład

##vso[build.updatebuildnumber]my-new-build-number

AddBuildTag: dodawanie tagu do kompilacji

##vso[build.addbuildtag]build tag

Użycie

Dodaj tag dla bieżącej kompilacji. Możesz rozwinąć tag ze wstępnie zdefiniowaną lub zdefiniowaną przez użytkownika zmienną. Na przykład w tym miejscu nowy tag zostanie dodany w zadaniu powłoki Bash z wartością last_scanned-$(currentDate). Nie można użyć dwukropka z elementem AddBuildTag.

Przykład

- task: Bash@3
    inputs:
    targetType: 'inline'
    script: |
        last_scanned="last_scanned-$(currentDate)"
        echo "##vso[build.addbuildtag]$last_scanned"
    displayName: 'Apply last scanned tag'

Polecenia wydania

UpdateReleaseName: Zmiana nazwy bieżącej wersji

##vso[release.updatereleasename]release name

Użycie

Zaktualizuj nazwę wydania dla uruchomionej wersji.

Uwaga

Obsługiwane w usługach Azure DevOps i Azure DevOps Server począwszy od wersji 2020.

Przykład

##vso[release.updatereleasename]my-new-release-name