Możesz zarządzać wydajnością i kosztami swojej instancji Managed DevOps Pools, konfigurując ustawienia skalowania. Aby uzyskać informacje na temat cen i wydajności, zobacz Zarządzanie kosztami i wydajnością.
Stan agenta
Można skonfigurować pule jako:
-
Stateless: udostępnij nowego agenta dla każdego zadania.
-
Stanowe: zezwalaj na udostępnianie agentów między wieloma zadaniami.
Domyślnym ustawieniem dla puli jest ustawienie bezstanowe, które można osiągnąć, używając opcji Świeży agent za każdym razem. W niektórych przypadkach zespoły mogą chcieć ponownie użyć agentów do ponownego użycia pakietów lub plików utworzonych podczas poprzedniego uruchomienia potoku. Obciążenie kompilacji to typowy scenariusz, w którym zespoły chcą zachować stan i użyć ponownie agentów. Pule stanowe można osiągnąć za pomocą zarządzanych pul DevOps, równoważąc je przy użyciu najlepszych rozwiązań w zakresie zabezpieczeń. Agent może być domyślnie ponownie używany przez maksymalnie siedem dni, ale można go skonfigurować do ponownego recyklingu wcześniej.
Uwaga
Agenci zabezpieczeń zalecają użytkownikom używanie pul bezstanowych jako obrony przed atakami łańcucha dostaw. Użyj ustawienia stanu agenta Odśwież agenta za każdym razem.
Pule bezstanowe
Podczas konfigurowania bezstanowego agenta, dla każdego zadania jest przydzielany nowy agent. Agent zostanie odrzucony po zakończeniu zadania.
Aby dowiedzieć się więcej na temat cyklu życia agentów bezstanowych i sposobu ich użycia w usłudze Azure Pipelines, zobacz sekcję Cykl życia agentów i potencjalne opóźnienia w alokacji .
Agentów można skonfigurować przy użyciu właściwości agentProfile w zasobie Zarządzanej puli DevOps. Poniższy przykład określa agenta Stateless .
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless"
}
}
}
]
}
Agentów można skonfigurować przy użyciu parametru agent-profile podczas tworzenia lub aktualizowania puli.
W poniższym przykładzie określono agenta Stateless bez agentów rezerwowych.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Poniższy przykład przedstawia zawartość pliku agent-profile.json .
{
"Stateless": {}
}
Możesz skonfigurować agentów przy użyciu agentProfile właściwości w zasobie Zarządzanych pul DevOps. Poniższy przykład określa agenta Stateless .
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
}
}
}
Po ustawieniu stanu agenta na Nowy agent za każdym razem nowy agent jest pozyskiwany dla każdego zadania. Agent zostanie odrzucony po zakończeniu zadania.
Pule stanowe
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"maxAgentLifetime": "7.00:00:00",
"gracePeriodTimeSpan": "00:30:00",
"kind": "Stateful"
}
}
}
]
}
Agentów można skonfigurować przy użyciu parametru agent-profile podczas tworzenia lub aktualizowania puli.
W poniższym przykładzie określono agenta Stateful z siedmiodniowym maksymalnym okresem istnienia i trzydziestominutowym okresem prolongaty.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Poniższy przykład przedstawia zawartość agent-profile.json pliku.
{
"Stateful":
{
"maxAgentLifetime": "7.00:00:00",
"gracePeriodTimeSpan": "00:30:00"
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateful'
maxAgentLifetime: '7.00:00:00'
gracePeriodTimeSpan:'00:30:00'
}
}
}
Po włączeniu tego samego agenta można używać przez wiele kompilacji ( "kind": "stateful" ustawienie w szablonach zasobów lub { "stateful": {...} } ustawienie w interfejsie wiersza polecenia platformy Azure), agenci w puli są stanowi. Pule stanowe można skonfigurować przy użyciu następujących ustawień:
Maksymalny czas życia dla agentów rezerwowych (maxAgentLifetime) konfiguruje maksymalny czas działania agenta w puli z zachowaniem stanu, zanim zostanie zamknięty i odrzucony. Format maksymalnego czasu wygaśnięcia dla agentów rezerwowych to dd.hh:mm:ss. Wartość domyślna maksymalna czasu wygaśnięcia dla agentów rezerwowych jest ustawiona na maksymalny dozwolony czas trwania siedmiu dni (7.00:00:00).
Okres prolongaty (gracePeriodTimeSpan) konfiguruje czas oczekiwania agenta w puli stanowej na nowe zadania przed zamknięciem po zakończeniu wszystkich bieżących i w kolejce zadań. Format okresu prolongaty to dd.hh:mm:ss i domyślny okres prolongaty nie jest okresem prolongaty.
Ważne
Jeśli zadanie jest uruchomione, gdy wygaśnie maksymalny czas życia dla agentów rezerwowych, agent nie zostanie zamknięty do momentu zakończenia zadania, chyba że zadanie trwa dłużej niż dwa dni. Pojedyncze zadania w zarządzanych pulach DevOps mogą działać maksymalnie przez dwa dni, nawet jeśli są uruchamiane na agencie rezerwowym, którego ustawienie maksymalnego czasu życia przekracza dwa dni dla agentów rezerwowych. Skontaktuj się z pomocą techniczną, jeśli przepływ pracy wymaga uruchomienia pojedynczego zadania, które trwa dłużej niż dwa dni.
Agenci w pulach bezstanowych są zamykani i odrzucani po każdym zadaniu. Agenci w pulach stanowych nadal działają, jeżeli spełniony jest którykolwiek z następujących warunków:
- Jeśli kolejne zadanie jest w kolejce po zakończeniu pierwszego zadania, Zarządzana pula DevOps przekazuje kolejne zadanie do agenta, który obsłużył pierwsze zadanie, zamiast go zamknąć.
- Jeśli dla puli skonfigurowano okres prolongaty, agenci czekają na nowe zadania na czas określony przez okres prolongaty przed zamknięciem.
- Jeśli agenci rezerwowi są włączeni, a obraz agenta spełnia kryteria aktywnego okresu aprowizacji, agent będzie nadal działać i czekać na zadania.
Agenci, którzy działają w pulach stanowych, są zamykani i odrzucani, jeśli są one uruchamiane w sposób ciągły przez czas określony przez maksymalny czas wygaśnięcia dla agentów rezerwowych, nawet jeśli poprzednie warunki są spełnione. Jeśli na przykład maksymalny czas życia agentów rezerwowych jest skonfigurowany na trzy dni, a tryb agenta rezerwowego jest ustawiony na Manual, All Week Scheme (Maszyny dostępne 24/7), agenci zostają ponownie uruchomieni po trzech ciągłych dniach pracy.
Ważne
Agenci w stanowych pulach mogą być nadal zamykani i odrzucani po zakończeniu zadania, jeśli nie ma przyznanego okresu łaski, czynnego okresu przydziału dla agentów rezerwowych oraz jeśli nie ma zadań w kolejce pasujących do agenta. Gdy agent zostanie odrzucony, każdy stan zostanie utracony.
Okresy karencji umożliwiają najbardziej efektywny sposób działania zespołów z zachowaniem stanu dla potoków ze spójnym obciążeniem. Okresy prolongaty nie wymagają korzystania z trybu oczekiwania agenta, aby agenci pozostali online i gotowi do przyjmowania zadań.
Tryb agenta rezerwowego
Podczas tworzenia puli tryb agenta rezerwowego jest domyślnie wyłączony. Gdy tryb rezerwowego agenta jest wyłączony, nie ma agentów rezerwowych do natychmiastowego przypisania do potoków. Twoje potoki mogą czasem wymagać odczekania od kilku chwil do 15 minut, zanim agent zostanie przydzielony na żądanie. Aby uzyskać lepszą wydajność, włącz tryb agenta rezerwowego i skonfiguruj harmonogram agenta rezerwowego, który zapewnia pojemność dla obciążenia.
Podczas konfigurowania harmonogramu agenta rezerwowego, Managed DevOps Pools okresowo porównuje liczbę aprowizowanych agentów z liczbą agentów rezerwowych określoną w bieżącym schemacie aprowizacji. Uruchamia nowych agentów zgodnie z wymaganiami, aby zachować liczbę agentów rezerwowych. Bieżący stan i liczba agentów w puli można wyświetlić przy użyciu okienka Agenci .
Ważne
Liczba aprowizacji w schemacie nie może być większa niż wartość Maksymalna liczba agentów, którą skonfigurowano w ustawieniach puli.
Tryb agenta rezerwowego można skonfigurować przy użyciu następujących ustawień:
-
Wyłączone: Tryb agenta w stanie gotowości jest wyłączony, a agenci są przydzielani na żądanie w momencie kolejkowania zadań.
-
Ręczne: Skonfiguruj ręczny harmonogram trybu oczekiwania.
-
Automatyczne: użyj automatycznego harmonogramu rezerwowego na podstawie historii użycia agenta. Można go skonfigurować pod kątem kosztów i wydajności.
Można skonfigurować agentów rezerwowych przy użyciu sekcji resourcePredictionsProfile właściwości agentProfile. Ustaw "kind": "Manual", aby skonfigurować schemat rozpoczęcia od podstaw, schemat dni roboczych lub schemat całotygodniowy, a następnie określ szczegóły tego schematu w sekcji resourcePredictions. Aby skonfigurować automatycznych agentów rezerwowych, ustaw wartość "kind": "Automatic". Wyłącz agentów rezerwowych, pomijając sekcję ResourcePredictionsProfile . Szczegółowe informacje na temat konfigurowania poszczególnych typów skalowania można znaleźć w poniższych sekcjach.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {...}
}
}
}
]
}
Agentów można skonfigurować przy użyciu parametru agent-profile podczas tworzenia lub aktualizowania puli.
Agentów rezerwowych można skonfigurować przy użyciu resourcePredictionsProfile sekcji parametru agent-profile . Użyj ustawienia "Manual": {}, aby skonfigurować schemat od zera, schemat dni tygodnia lub schemat całotygodniowy oraz aby określić szczegóły tego schematu w sekcji resourcePredictions. Aby skonfigurować automatycznych agentów rezerwowych, użyj "Automatic": {} ustawienia . Szczegółowe informacje na temat konfigurowania poszczególnych typów skalowania można znaleźć w poniższych sekcjach.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Poniższy przykład przedstawia zawartość agent-profile.json pliku:
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {...}
}
Agentów rezerwowych można skonfigurować, używając sekcji resourcePredictionsProfile właściwości agentProfile. Użyj ustawienia "kind": "Manual", aby skonfigurować schemat rozpoczęcia od podstaw, schemat dni powszednich lub schemat całotygodniowy i określ szczegóły schematu w sekcji resourcePredictions. Aby skonfigurować automatycznych agentów rezerwowych, użyj ustawienia kind: 'Automatic'. Wyłącz agentów rezerwowych, pomijając sekcję ResourcePredictionsProfile . Szczegółowe informacje na temat konfigurowania poszczególnych typów skalowania można znaleźć w poniższych sekcjach.
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {...}
}
}
}
Ręcznie
Tryb ręczny jest najlepszy dla zespołów, które znają wzorce wykorzystywania potoków ciągłej integracji i ciągłego dostarczania (CI/CD). W przypadku korzystania z opcji ręcznej należy zdefiniować schemat wstępnej aprowizacji. Schemat można zdefiniować na podstawie zrozumienia, jakich agentów w puli najprawdopodobniej będzie używanych i ilu agentów prawdopodobnie będzie używanych. Należy określić liczbę agentów, którzy spełniają przewidywane zapotrzebowanie.
Możesz utworzyć własny harmonogram aprowizacji lub wybrać jeden ze wstępnie zdefiniowanych harmonogramów. Możesz skonfigurować strefę czasową, która będzie używana do określania harmonogramów. Wartość domyślna wstępnego aprowizowania strefy czasowej to (UTC) uniwersalny czas koordynowany.
Agentów rezerwowych można skonfigurować na jeden z następujących trzech sposobów:
Każdy z przewodników szybkiego startu dotyczących wstępnej aprowizacji ma następujące wspólne ustawienia (oprócz ustawień specyficznych dla tego konkretnego przewodnika szybkiego startu):
-
Wstępne aprowizowanie strefy czasowej: umożliwia skonfigurowanie strefy czasowej dla okresów w schemacie wstępnej aprowizacji. Wartość domyślna wstępnego aprowizowania strefy czasowej to (UTC) uniwersalny czas koordynowany.
-
Procent agenta rezerwowego: konfiguruje procent agentów rezerwowych, których chcesz użyć dla każdego obrazu. Możesz wprowadzić polecenie
* , aby upewnić się, że wszystkie obrazy są aprowidowane w równym stopniu lub można określić liczbę całkowitą z zakresu od 0 do 100, aby reprezentować wartość procentową. Jeśli określisz wartość procentową, suma dla wszystkich obrazów musi być równa 100. Jeśli masz pojedynczy obraz, określ * wartość lub 100. W przypadku korzystania z szablonów Azure Resource Manager (szablonów ARM) można skonfigurować ustawienie procent stanu gotowości agenta w sekcji images. Aby uzyskać więcej informacji, zobacz Konfigurowanie obrazów.
Możesz określić ręczną konfigurację agenta rezerwowego w sekcji resourcePredictionsProfileagentProfile. Szczegóły można skonfigurować w resourcePredictions sekcji .
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"00:00:00": 1,
"04:00:00": 0
},
{},
{},
{},
{},
{}
]
}
}
}
}
]
}
Określ żądaną strefę czasową dla swojego schematu, korzystając z właściwości timeZone. Domyślna wartość to UTC. Aby pobrać listę nazw stref czasowych dla tej właściwości, zobacz TimeZoneInfo.GetSystemTimeZones Method (Metoda TimeZoneInfo.GetSystemTimeZones).
Harmonogram agentów rezerwowych można zdefiniować z pomocą listy daysData. Lista daysData może zawierać jeden lub siedem elementów.
daysData Lista z siedmioma elementami jest mapowana na dni tygodnia, począwszy od niedzieli. Każdy z tych siedmiu elementów może mieć zero lub więcej "time": count wpisów, określając czas w formacie 24-godzinnym i liczbę agentów rezerwowych. Określona liczba agentów rezerwowych jest utrzymywana do następnego "time": count wpisu, który może być w tym samym dniu lub następnego dnia.
Lista daysData z pojedynczym elementem definiuje schemat All-week, gdzie pojedynczy "time": count wpis odpowiada liczbie agentów rezerwowych przez cały tydzień.
Poniższy przykład to ręczny schemat agenta rezerwowego. Używa wartości Eastern Standard Time z jednym agentem przydzielonym od poniedziałku do piątku, od 9:00 (liczba agentów rezerwowych 1) do 17:00 (liczba agentów rezerwowych 0).
{
"kind": "Stateless",
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{}
]
},
"resourcePredictionsProfile": {
"kind": "Manual"
}
}
Pojedynczy daysData element zawiera słownik czasów i liczby agentów rezerwowych. Każdy "time" : count wpis określa liczbę agentów rezerwowych, którzy mają być zaplanowani od wskazanego czasu w formacie 24-godzinnym. Kolejne "time" : count wpisy określają sekwencję zaplanowanych liczników agentów dla tego dnia.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
Liczby agentów rezerwowych nie są automatycznie resetowane z powrotem do zera na koniec dnia ani na koniec tygodnia. Określanie pustego elementu daysData nie powoduje wyłączenia agentów w trybie czuwania na ten dzień.
daysData Pusty element oznacza, że nie ma żadnych zmian w harmonogramie liczby agentów rezerwowych dla tego dnia. Aby ustawić agenta rezerwowego na zero rozpoczynający się od określonego okresu, należy jawnie podać "time" : count wpis z wartością count0.
Przykłady
Aby nie zmieniać liczby agentów rezerwowych określonych na koniec poprzedniego dnia (lub tygodnia, jeśli konfigurujesz pierwszy okres tygodnia), określaj element daysData z zerową liczbą wpisów.
{}
Aby zaplanować pojedynczego agenta rezerwowego do uruchomienia o 09:00:00 i zatrzymania o 17:00:00 (używając strefy czasowej określonej przez właściwość resourcePredictions), określ następującą konfigurację:
{
"09:00:00": 1,
"17:00:00": 0
}
Aby zaplanować jednego agenta rezerwowego od północy do 09:00:00, a następnie 10 agentów rezerwowych do 17:00:00, określ następującą konfigurację:
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Aby zaplanować, żeby agent rezerwowy był dostępny od określonej godziny 09:00:00 w danym dniu i przestał być dostępny o 17:00:00 następnego dnia, użyj dwóch kolejnych elementów daysData.
{
"09:00:00": 1
},
{
"17:00:00": 0
}
Agentów można skonfigurować przy użyciu parametru agent-profile podczas tworzenia lub aktualizowania puli.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Poniższy przykład przedstawia zawartość pliku agent-profile.json . Możesz określić ręczną konfigurację agenta rezerwowego w sekcji resourcePredictionsProfile parametru agent-profile. Skonfiguruj szczegóły w resourcePredictions sekcji:
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"00:00:00": 1,
"04:00:00": 0
},
{},
{},
{},
{},
{}
]
}
}
Określ strefę czasową dla schematu, korzystając z właściwości timeZone. Domyślna wartość to UTC. Aby pobrać listę nazw stref czasowych dla tej właściwości, zobacz TimeZoneInfo.GetSystemTimeZones Method (Metoda TimeZoneInfo.GetSystemTimeZones).
Lista daysData definiuje harmonogram agentów rezerwowych. Lista daysData może zawierać jeden lub siedem elementów.
daysData Lista z siedmioma elementami jest mapowana na dni tygodnia, począwszy od niedzieli. Każdy z tych siedmiu elementów może mieć zero lub więcej "time": count wpisów, określając czas w formacie 24-godzinnym i liczbę agentów rezerwowych. Określona liczba agentów rezerwowych jest utrzymywana do następnego "time": count wpisu, który może nastąpić tego samego dnia lub na następny dzień.
Lista daysData z pojedynczym elementem definiuje schemat całodniowy, w którym pojedynczy "time": count wpis odpowiada liczbie agentów rezerwowych przez cały tydzień.
Poniższy przykład to ręczny schemat agenta rezerwowego. Schemat używa wartości Eastern Standard Time z jednym agentem skonfigurowanym od poniedziałku do piątku, od 9:00 (liczba agentów oczekujących 1) do 17:00 (liczba agentów oczekujących 0):
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{}
]
}
}
Pojedynczy daysData element zawiera słownik czasów i liczby agentów rezerwowych. Każdy "time" : count wpis określa liczbę agentów rezerwowych, których należy zaplanować na określoną godzinę w formacie 24-godzinnym. Kolejne "time" : count wpisy określają sekwencję zaplanowanych liczników agentów dla tego dnia.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
Liczby agentów rezerwowych nie są automatycznie resetowane z powrotem do zera na koniec dnia ani na koniec tygodnia. Określanie pustego elementu daysData nie powoduje wyłączenia agentów w trybie czuwania na ten dzień.
daysData Pusty element oznacza, że nie ma żadnych zmian w harmonogramie liczby agentów rezerwowych dla tego dnia. Aby ustawić agenta rezerwowego na zero rozpoczynający się od określonego okresu, należy jawnie podać "time" : count wpis z wartością count0.
Przykłady
Jeśli nie chcesz zmieniać liczby określonych agentów rezerwowych na koniec poprzedniego dnia (lub tygodnia, jeśli konfigurujesz pierwszy okres tygodnia), określ daysData element z zerowym wpisem.
{}
Aby zaplanować uruchomienie pojedynczego agenta rezerwowego o 09:00:00 i zatrzymanie o 17:00:00 (przy użyciu strefy czasowej określonej w właściwości resourcePredictions), określ następującą konfigurację:
{
"09:00:00": 1,
"17:00:00": 0
}
Aby zaplanować jednego agenta rezerwowego od północy do 09:00:00, a następnie 10 agentów rezerwowych do 17:00:00, określ następującą konfigurację:
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Aby zaplanować dyżur agenta rezerwowego od 09:00:00 w określonym dniu i zakończyć go o 17:00:00 następnego dnia, użyj dwóch kolejnych daysData pozycji.
{
"09:00:00": 1
},
{
"17:00:00": 0
}
Możesz określić ręczną konfigurację agenta rezerwowego w sekcji resourcePredictionsProfileagentProfile. Szczegóły można skonfigurować w resourcePredictions sekcji:
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{}
{
'00:00:00': 1
'04:00:00': 0
}
{}
{}
{}
{}
{}
]
}
}
}
}
Określ żądaną strefę czasową dla swojego schematu, korzystając z właściwości timeZone. Domyślna wartość to UTC. Aby pobrać listę nazw stref czasowych dla tej właściwości, zobacz TimeZoneInfo.GetSystemTimeZones Method (Metoda TimeZoneInfo.GetSystemTimeZones).
Lista daysData definiuje harmonogram agentów rezerwowych. Lista daysData może zawierać jeden lub siedem elementów.
daysData Lista z siedmioma elementami jest mapowana na dni tygodnia, począwszy od niedzieli. Każdy z tych siedmiu elementów może mieć zero lub więcej 'time': count wpisów, określając czas w formacie 24-godzinnym i liczbę agentów rezerwowych. Określona liczba agentów rezerwowych jest utrzymywana do następnego 'time': count wpisu, który może być w tym samym dniu lub następnego dnia.
Lista daysData z pojedynczym elementem definiuje schemat całodniowy, w którym pojedynczy 'time': count wpis odpowiada liczbie agentów rezerwowych przez cały tydzień.
Poniższy przykład to ręczny schemat agenta rezerwowego, który używa wartości Eastern Standard Time, z pojedynczym agentem dyżurującym od poniedziałku do piątku, od 9:00 (liczba agentów rezerwowych 1) do 17:00 (liczba agentów rezerwowych 0):
{
kind: 'Stateless'
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{}
{
'09:00:00': 1
'17:00:00': 0
}
{
'09:00:00': 1
'17:00:00': 0
}
{
'09:00:00': 1
'17:00:00': 0
}
{
'09:00:00': 1
'17:00:00': 0
}
{
'09:00:00': 1
'17:00:00': 0
}
{}
]
}
resourcePredictionsProfile: {
kind: 'Manual'
}
}
Pojedynczy daysData element zawiera słownik czasów i liczby agentów rezerwowych. Każdy 'time' : count wpis określa liczbę agentów rezerwowych, którzy mają być zaplanowani od wskazanego czasu w formacie 24-godzinnym. Kolejne 'time' : count wpisy określają sekwencję zaplanowanych liczników agentów dla tego dnia.
daysData: [
{} // Schedule of standby agent count adjustments for Sunday
{ // Schedule of standby agent count adjustments for Monday
'09:00:00': 1 // Adjust standby agent count to 1
'17:00:00': 0 // Adjust standby agent count to 0
}
{ // Schedule of standby agent count adjustments for Tuesday
'09:00:00': 1
'17:00:00': 0
}
{ // Schedule of standby agent count adjustments for Wednesday
'09:00:00': 1
'17:00:00': 0
}
{ // Schedule of standby agent count adjustments for Thursday
'09:00:00': 1
'17:00:00': 0
}
{ // Schedule of standby agent count adjustments for Friday
'09:00:00': 1
'17:00:00': 0
}
{} // Schedule of standby agent count adjustments for Saturday
]
Liczby agentów rezerwowych nie są automatycznie resetowane z powrotem do zera na koniec dnia lub na koniec tygodnia, a określenie pustego daysData elementu nie powoduje wyłączenia agentów rezerwowych dla tego dnia.
daysData Pusty element oznacza, że nie ma żadnych zmian w harmonogramie liczby agentów rezerwowych dla tego dnia. Aby ustawić agenta rezerwowego na zero rozpoczynający się od określonego okresu, należy jawnie podać "time" : count wpis z wartością count0.
Przykłady
Aby nie zmieniać liczby agentów rezerwowych określonych na koniec poprzedniego dnia (lub tygodnia, jeśli konfigurujesz pierwszy okres tygodnia), określaj element daysData z zerową liczbą wpisów.
{}
Aby zaplanować pojedynczego agenta rezerwowego do uruchomienia o 09:00:00 i zatrzymania o 17:00:00 (przy użyciu strefy czasowej określonej we właściwości resourcePredictions), określ następującą konfigurację:
{
'09:00:00': 1
'17:00:00': 0
}
Aby zaplanować jednego agenta rezerwowego od północy do 09:00:00, a następnie 10 agentów rezerwowych do 17:00:00, określ następującą konfigurację:
{
'00:00:00': 1
'09:00:00': 10
'17:00:00': 0
}
Aby zaplanować dostępność agenta rezerwowego, który rozpoczyna pracę od 09:00:00 w określonym dniu i kończy o 17:00:00 następnego dnia, użyj dwóch kolejnych elementów daysData.
{
'09:00:00': 1
}
{
'17:00:00': 0
}
Rozpoczynanie od zera
Jeśli zdecydujesz się rozpocząć od podstaw, możesz dodać listę okresów prowizjonowania jako swój schemat prowizjonowania. Każdy okres przypisania składa się z dnia rozpoczęcia, dnia zakończenia, strefy czasowej, godziny rozpoczęcia, godziny zakończenia i ilości. Okresy aprowizacji nie mogą się nakładać na siebie.
| Właściwości |
opis |
|
Wiele dni |
Po wybraniu tej opcji można skonfigurować zarówno dzień rozpoczęcia , jak i dzień zakończenia dla schematu aprowizacji. |
|
Do następnego okresu |
Po wybraniu tej opcji, przydział rozpoczyna się od wartości Godzina rozpoczęcia i trwa do początku następnego okresu przydziału. |
|
Dzień rozpoczęcia |
Dzień rozpoczęcia okresu aprowizacji. |
|
Dzień zakończenia |
Dzień zakończenia okresu udzielania dostępu. Wymagane, jeśli wybrano opcję Multi-Day . |
|
Godzina rozpoczęcia |
Czas rozpoczęcia okresu przygotowania. |
|
Godzina zakończenia |
Czas zakończenia okresu aprowizacji. Wymagane, chyba że zostanie wybrane do następnego okresu. |
|
Liczba |
Liczba agentów rezerwowych do aprowizacji. Ta liczba musi być większa niż zero i nie może być większa niż wartość Maksymalna liczba agentów w ustawieniach puli. |
Po utworzeniu okresu aprowizacji można usunąć lub edytować okres z listy Schemat wstępnej aprowizacji .
W poniższym przykładzie pokazano, jak skonfigurować ręczny schemat z jednym agentem zaaprogramowanym na poniedziałek rano od 00:00 do 5:00 czasu wschodniego standardowego (EST).
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"00:00:00": 1,
"04:00:00": 0
},
{},
{},
{},
{},
{}
]
}
}
}
}
]
}
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"00:00:00": 1,
"04:00:00": 0
},
{},
{},
{},
{},
{}
]
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{}
{
'00:00:00': 1
'04:00:00': 0
}
{}
{}
{}
{}
{}
]
}
}
}
}
Schemat dni powszedni
W przypadku wybrania szablonu dni roboczych można określić godzinę rozpoczęcia i godzinę zakończenia, między którymi określona liczba agentów rezerwowych jest w gotowości każdy dzień roboczy.
| Właściwości |
opis |
|
Godzina rozpoczęcia |
Czas rozpoczęcia okresu przygotowania. |
|
Godzina zakończenia |
Czas zakończenia okresu aprowizacji. |
|
Liczba provisioningu |
Liczba agentów rezerwowych do aprowizacji. Ta liczba musi być większa niż zero i nie może być większa niż wartość Maksymalna liczba agentów skonfigurowana w ustawieniach puli. |
W poniższym przykładzie skonfigurowano czterech agentów do użycia w godzinach pracy, a poza godzinami pracy i w weekendy nie skonfigurowano żadnych agentów, zgodnie z czasem wschodnim (UTC-5).
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{}
]
}
}
}
}
]
}
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{}
]
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{}
{
'09:00:00': 4
'17:00:00': 0
}
{
'09:00:00': 4
'17:00:00': 0
}
{
'09:00:00': 4
'17:00:00': 0
}
{
'09:00:00': 4
'17:00:00': 0
}
{
'09:00:00': 4
'17:00:00': 0
}
{}
]
}
}
}
}
Schemat całotygodniowy
Jeśli wybierzesz schemat całodniowy, możesz określić liczbę agentów, które mają być dostępne przez cały czas.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{
"00:00:00": 1
}
]
}
}
}
}
]
}
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{
"00:00:00": 1
}
]
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{
'00:00:00': 1
}
]
}
}
}
}
Automatyczne
Jeśli nie znasz wzorców użycia i chcesz polegać na automatycznym prognozowaniu na podstawie przeszłych danych, wybierz pozycję Automatycznie. Możesz równoważyć koszty i wydajność agenta za pomocą suwaka z następującymi pięcioma opcjami. Zarządzane pule DevOps uruchamiają zapytanie na podstawie danych historycznych z ostatnich trzech tygodni (jeśli są dostępne). Organizuje sesje w kolejce puli w pięciominutowe okresy i przypisuje określony percentyl (aby uniknąć skoków) do każdej godziny.
-
Najbardziej ekonomiczne (
MostCostEffective): dziesiąty percentyl.
-
Bardziej ekonomiczne (
MoreCostEffective): 25. percentyl.
- Zrównoważony (wartość domyślna) (
Balanced): 50. percentyl.
-
Większa wydajność (
MorePerformance): 75. percentyl.
-
Najlepsza wydajność (
BestPerformance): 90-ty percentyl.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"predictionPreference": "Balanced",
"kind": "Automatic"
}
}
}
}
]
}
{
"Stateless": {},
"resourcePredictionsProfile": {
"Automatic": {
"predictionPreference": "Balanced"
}
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Automatic'
predictionPreference: 'Balanced'
}
}
}
}
Cykl życia agentów i potencjalne opóźnienia alokacji
Po włączeniu agentów rezerwowych przy użyciu schematu bezstanowego należy zainstalować i skonfigurować agenta usługi Azure Pipelines przed przejściem ze stanu gotowego do stanu przydzielonego i uruchomienie potoku.
Gdy zarządzane pule DevOps aprowizują nowych agentów, próbuje pobrać najnowszego agenta usługi Azure Pipelines, aby został już pobrany na agentów oczekujących przed przejściem do stanu gotowości. Uruchamianie, połączenie i rozpoczynanie zadania może potrwać od 10 sekund do minut w zależności od szybkości jednostki SKU puli, użytego obrazu i obciążenia sieciowego. Ponadto po określeniu niektórych ustawień w zadaniu potoku może to spowodować ponowne pobranie i uruchomienie innego agenta. Wycofania i regresje agenta mogą również spowodować jego ponowne pobranie.
Gotowi agenci zawsze mają potencjalne opóźnienie, ponieważ Zarządzane pule DevOps używają tego agenta w sposób tymczasowy, co oznacza, że uruchamiamy agenta zadań jednokrotnie dla każdego zadania. Jeśli widzisz opóźnienia w gotowych agentach odbierających zadania z usługi Azure DevOps, rozważ następujące pytania:
- Czy masz gotowych agentów? Najczęstszym problemem jest nieporozumienie, kiedy agenci powinni być przygotowani z wyprzedzeniem. Kiedy spełnione są następujące warunki, maszyny muszą być uruchamiane od nowa.
- Liczba zadań w kolejce jest większa niż liczba agentów rezerwowych w puli.
- Zadania są kolejkowane poza harmonogramem wstępnego przygotowania.
- Liczba agentów rezerwowych ma być pusta.
- Czy prawidłowo konfigurujesz agentów zapasowych, które mają wiele obrazów? Jeśli nie określisz, który obraz użyć w potoku za pomocą żądania ImageOverride, zadania automatycznie korzystają z pierwszego obrazu. W zależności od ustawień skalowania może nie być dostępnych tak wielu agentów, jak oczekiwano, ponieważ niektóre z nich są przydzielane do innych obrazów.
- Czy używasz
ImageVersionOverride żądania w strumieniach danych? Jeśli używasz ImageVersionOverride żądania do określenia innej wersji obrazu niż skonfigurowana w ustawieniach puli, każdy agent uruchamia się na żądanie przy użyciu określonej wersji obrazu. Agenci rezerwowi są aprowizowani przy użyciu wersji obrazów określonych w konfiguracji puli. Jeśli używasz programu ImageVersionOverride, żaden agent rezerwowy nie będzie pasować do tej wersji i zostanie uruchomiony nowy agent.
- Czy ustawienia serwera proxy, sieci wirtualnej lub zapory spowalniają pulę? Potencjalne spowolnienie z dowolnego ustawienia sieci powoduje, że agenci będą dłużej uruchamiać agenta i łączyć go z usługą Azure DevOps.
- Czy zastępujesz wersję agenta? Domyślnie zarządzane pule DevOps są uruchamiane na najnowszej wersji agenta zadań Azure DevOps. Ustawienia w potoku YAML (takie jak
Agent.Version żądanie) i parametry organizacji usługi Azure DevOps mogą wymusić użycie starszych wersji agenta wykonawczego zadań, co wymaga ponownego pobrania po alokacji maszyny.
Treści powiązane