Udostępnij za pośrednictwem


Obsługa wyrażeń szablonów w definicjach zasobów repozytorium i kontenera

Dzięki tej aktualizacji dołączyliśmy obsługę wyrażeń szablonów w definicjach zasobów repozytorium i kontenera. Teraz możesz użyć wyrażeń szablonu podczas definiowania ref właściwości repository zasobu w potoku YAML, aby wybrać gałąź zasobu repozytorium. Ponadto dodaliśmy obsługę wyrażeń szablonów podczas definiowania endpointwłaściwości container zasobu , volumesportsi options w potoku YAML.

Zapoznaj się z informacjami o wersji, aby uzyskać szczegółowe informacje.

Azure Boards

Azure Pipelines

Azure Boards

Wcześniej zmiana linku elementu roboczego wymaga wykonania co najmniej trzech kroków. Aby na przykład zmienić link nadrzędny do powiązanego linku, musisz skopiować identyfikator elementu roboczego, usunąć link nadrzędny, dodać nowy istniejący link powiązany z typem, a następnie wkleić skopiowany identyfikator i zapisać. Jest to kłopotliwy proces.

Rozwiązaliśmy ten problem, umożliwiając bezpośrednią edycję i zmianę typu linku. Możesz szybko zmienić typ łącza w jednym kroku.

Plik GIF do demonstracyjnego edytowania typów linków elementów roboczych.

Uwaga

Ta funkcja będzie dostępna tylko w wersji zapoznawczej usługi New Boards Hubs.

Tworzenie tymczasowego punktu końcowego REST zapytania

Widzieliśmy kilka wystąpień autorów rozszerzeń próbujących uruchamiać niezapisane zapytania, przekazując instrukcję WIQL (Work Item Query Language) za pośrednictwem ciągu zapytania. Działa to dobrze, chyba że masz dużą instrukcję WIQL, która osiąga limity przeglądarki na długości ciągu zapytania. Aby rozwiązać ten problem, utworzyliśmy nowy punkt końcowy REST, aby umożliwić autorom narzędzi generowanie zapytania tymczasowego. Użycie identyfikatora z odpowiedzi w celu przekazania przez element querystring eliminuje ten problem.

Dowiedz się więcej na stronie dokumentacji interfejsu API REST zapytań tymczasowych.

Interfejs API usuwania usługi Batch (prywatna wersja zapoznawcza)

Obecnie jedynym sposobem usunięcia elementów roboczych z kosza jest użycie tego interfejsu API REST do jednorazowego usunięcia. Może to być powolny proces i podlega ograniczeniu szybkości podczas próby przeprowadzenia dowolnego rodzaju masowego czyszczenia. W odpowiedzi dodaliśmy nowy punkt końcowy interfejsu API REST do usuwania i/lub niszczenia elementów roboczych w partii.

Jeśli chcesz wziąć udział w prywatnej wersji zapoznawczej tego nowego punktu końcowego, wyślij nam wiadomość e-mail bezpośrednio.

@CurrentIteration makro w planach dostarczania

Dzięki tej aktualizacji dodaliśmy obsługę makr dla @CurrentIteration stylów w planach dostarczania. To makro umożliwi uzyskanie bieżącej iteracji z kontekstu zespołu każdego wiersza w planie.

Plik GIF do demonstracyjnego makra CurrentIteration w planach dostarczania.

Azure Pipelines

Wyrażenia szablonów w definicji zasobu repozytorium

Dodaliśmy obsługę wyrażeń szablonu podczas definiowania ref właściwości repository zasobu w potoku YAML. Była to bardzo żądana funkcja przez naszą społeczność deweloperów.

Istnieją przypadki użycia, gdy potok ma wyewidencjonować różne gałęzie tego samego zasobu repozytorium.

Załóżmy na przykład, że masz potok, który kompiluje własne repozytorium, a w tym celu musi wyewidencjonować bibliotekę z repozytorium zasobów. Ponadto załóżmy, że chcesz, aby potok wyewidencjonowył tę samą gałąź biblioteki, której używa sam. Jeśli na przykład potok jest uruchamiany w main gałęzi, należy wyewidencjonować main gałąź repozytorium biblioteki. Jeśli potoki działają w dev gałęzi, należy wyewidencjonować dev gałąź biblioteki.

Do dziś trzeba było jawnie określić gałąź do wyewidencjonowania i zmienić kod potoku za każdym razem, gdy gałąź ulegnie zmianie.

Teraz możesz użyć wyrażeń szablonu, aby wybrać gałąź zasobu repozytorium. Zapoznaj się z poniższym przykładem kodu YAML, który ma być używany dla gałęzi innych niż główne potoku:

resources:
  repositories:
    - repository: library
      type: git
      name: FabrikamLibrary
      ref: ${{ variables['Build.SourceBranch'] }}

steps:
- checkout: library
- script: echo ./build.sh
- script: echo ./test.sh

Po uruchomieniu potoku możesz określić gałąź do wyewidencjonowania library repozytorium.

Określanie wersji szablonu do rozszerzenia w czasie kolejki kompilacji

Szablony stanowią doskonały sposób na zmniejszenie duplikowania kodu i zwiększenie bezpieczeństwa potoków.

Jednym z popularnych przypadków użycia jest domowy szablony we własnym repozytorium. Zmniejsza to sprzężenie między szablonem a potokami, które go rozszerzają, i ułatwia niezależne rozwijanie szablonu i potoków.

Rozważmy poniższy przykład, w którym szablon jest używany do monitorowania wykonywania listy kroków. Kod szablonu Templates znajduje się w repozytorium.

# template.yml in repository Templates
parameters:
- name: steps
  type: stepList
  default: []

jobs:
- job:
  steps:
  - script: ./startMonitoring.sh
  - ${{ parameters.steps }}
  - script: ./stopMonitoring.sh

Załóżmy, że masz potok YAML, który rozszerza ten szablon znajdujący się w repozytorium FabrikamFiber. Do dziś nie można było dynamicznie określić ref właściwości templates zasobu repozytorium w przypadku używania repozytorium jako źródła szablonu. Oznaczało to, że trzeba zmienić kod potoku, jeśli chcesz, aby potok był następujący: rozszerzenie szablonu z innej gałęzi rozszerza szablon z tej samej nazwy gałęzi co potok, niezależnie od gałęzi, w której uruchomiono potok

Wprowadzenie wyrażeń szablonu w definicji zasobu repozytorium umożliwia napisanie potoku w następujący sposób:

resources:
  repositories:
    - repository: templates
      type: git
      name: Templates
      ref: ${{ variables['Build.SourceBranch'] }}

extends:
  template: template.yml@templates
  parameters:
    steps:
      - script: echo ./build.sh
      - script: echo ./test.sh

W ten sposób potok rozszerzy szablon w tej samej gałęzi co gałąź, w której działa potok, aby upewnić się, że gałęzie potoku i szablonu są zawsze zgodne. Oznacza to, że uruchomienie potoku w gałęzi devspowoduje rozszerzenie szablonu określonego przez template.yml plik w dev gałęzi templates repozytorium.

Możesz też wybrać w czasie kompilacji kolejki, która gałąź repozytorium szablonów ma być używana, pisząc następujący kod YAML.

parameters:
  - name: branch
    default: main

resources:
  repositories:
    - repository: templates
      type: git
      name: Templates
      ref: ${{ parameters.branch }}

extends:
  template: template.yml@templates
  parameters:
    steps:
      - script: echo ./build.sh
      - script: echo ./test.sh

Teraz możesz mieć potok w gałęzi main rozszerzać szablon z gałęzi dev w jednym przebiegu i rozszerzać szablon z gałęzi main w innym przebiegu bez zmiany kodu potoku.

Podczas określania wyrażenia szablonu dla ref właściwości zasobu repozytorium można użyć parameters i wstępnie zdefiniowanych zmiennych systemowych, ale nie można użyć zmiennych zdefiniowanych przez interfejs użytkownika yaML ani pipelines.

Wyrażenia szablonu w definicji zasobu kontenera

Dodaliśmy obsługę wyrażeń szablonu podczas definiowania endpointwłaściwości container , volumesi portsoptions zasobu w potoku YAML. Była to bardzo żądana funkcja przez naszą społeczność deweloperów.

Teraz możesz pisać potoki YAML, takie jak poniżej.

parameters:
  - name: endpointName    
    default: AzDOACR
    type: string

resources:
  containers:
    - container: linux
      endpoint: ${{ parameters.endpointName }}
      image: fabrikamfiber.azurecr.io/ubuntu:latest

jobs:
- job:
  container: linux
  steps:
  - task: CmdLine@2
    inputs:
      script: 'echo Hello world'

Możesz użyć parameters. wyrażeń szablonu i variables. . W przypadku zmiennych można używać tylko tych zdefiniowanych w pliku YAML, ale nie zdefiniowanych w interfejsie użytkownika potoków. Jeśli na przykład ponownie zdefiniowasz zmienną przy użyciu poleceń dziennika agenta, nie będzie to miało żadnego wpływu.

Inspekcja zdarzeń pod kątem zmian w zatwierdzeniach

Zatwierdzenia umożliwiają kontrolowanie, kiedy etap powinien zostać uruchomiony. Jest to często używane do kontrolowania wdrożeń w środowiskach produkcyjnych. Inspekcja umożliwia spełnianie wymagań dotyczących zgodności i monitorowanie zabezpieczeń organizacji usługi Azure DevOps.

Gdy użytkownik zostanie poproszony o zatwierdzenie potoku w celu wdrożenia na określonym etapie, użytkownik może zdecydować się na ponowne przypisanie zatwierdzenia innej osobie.

Inspekcja zdarzeń pod kątem zmian w zatwierdzeniach

Do tej pory takie akcje nie były rejestrowane w dziennikach inspekcji. Ten problem został rozwiązany teraz.

Dzienniki inspekcji będą zawierać wpis podobny do poniższego.

[
    {
        "Id": "2517368925862632546;00000264-0000-8888-8000-000000000000;839ad1ba-f72b-4258-bc3f-88be7a4553b5",
        "CorrelationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
        "ActivityId": "a298a06c-965f-4e60-9643-2593f2066e37",
        "ActorCUID": "fe950802-bf07-755b-826d-e8dcc066252c",
        "ActorUserId": "fe950802-bf07-755b-826d-e8dcc066252c",
        "ActorUPN": "silviu@fabrikam.app",
        "AuthenticationMechanism": "AAD_Cookie",
        "Timestamp": "2022-10-10T11:26:53.7367453Z",
        "ScopeType": "Organization",
        "ScopeDisplayName": "Fabrikam (Organization)",
        "ScopeId": "547a7316-cdf4-40d2-af16-3215f97d053e",
        "ProjectId": "4bf16944-3595-421f-9947-79d9eb190284",
        "ProjectName": "FabrikamFiber",
        "IpAddress": "127.0.0.1",
        "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.37",
        "ActionId": "ApproverReassigned",
        "Data": {
            "ApprovalId": "dae6e7c9-2a10-4cd8-b63a-579a6e7ba78d",
            "OldApproverUserId": "692b6e2a-dd61-4872-866a-85498da390fc",
            "OldApproverDisplayName": "[FabrikamFiber]\\Build Administrators",
            "NewApproverUserId": "fe95080b-bf07-655b-226d-e8dcc066252c",
            "NewApproverDisplayName": "Jack Fabrikam",
            "Comment": "All admins are OOO"
        },
        "Details": "Reassigned approver of Approval dae6e7c9-9a10-4cd8-b63a-579a6e7ba78d in Project \"FabrikamFiber\" from \"[FabrikamFiber]\\Build Administrators\" to \"Jack Fabrikam\" with comment \"All admins are OOO\".",
        "Area": "Checks",
        "Category": "Modify",
        "CategoryDisplayName": "Modify",
        "ActorDisplayName": "Silviu"
    }
]

Ponadto zostanie on wyświetlony w interfejsie użytkownika inspekcji.

Wpis dziennika w interfejsie użytkownika inspekcji

Biblioteka zadań uwidacznia model hostingu agenta

Autorzy zadań, którzy chcą określić, czy agent jest uruchomiony w pulach hostowanych przez firmę Microsoft, czy nie może teraz używać funkcji getAgentMode() Biblioteka zadań w celu określenia modelu hostingu. Jest to korzystne w scenariuszach, w których zadanie chce wpływać na zachowanie w oparciu o dostęp do sieci klienta lub nie. Zadanie może próbować nawiązać połączenie z usługą platformy Azure za pośrednictwem prywatnego punktu końcowego, jeśli jest wykonywane z własnego agenta lub agentów zestawu skalowania znajdujących się w sieci klienta. Zobacz dokumentację zadania.

Następne kroki

Uwaga

Te funkcje będą wdrażane w ciągu najbliższych dwóch do trzech tygodni.

Przejdź do usługi Azure DevOps i przyjrzyj się.

Jak przekazać opinię

Chcielibyśmy usłyszeć, co myślisz o tych funkcjach. Użyj menu Pomocy, aby zgłosić problem lub podać sugestię.

Utwórz sugestię

Możesz również uzyskać porady i odpowiedzi na pytania społeczności w witrynie Stack Overflow.

Dzięki,

Vijay Machiraju