Konfigurieren Sie Skalierungseinstellungen, um die Leistung und Kosten Ihres verwalteten DevOps-Pools zu verwalten. Informationen zu Preisen und Leistung finden Sie unter "Kosten und Leistung verwalten".
Agentstatus
Verwaltete DevOps-Pools können als zustandslos oder zustandslos konfiguriert werden.
Zustandslose Pools – Stellen Sie für jeden Auftrag einen neuen Agent bereit.
Die Standardeinstellung für einen verwalteten DevOps-Pool ist zustandslos (fresh agent jedes Mal), aber in einigen Fällen möchten Teams Möglicherweise Agents wiederverwenden, um die Pakete oder Dateien wiederzuverwenden, die während der vorherigen Pipelineausführung erstellt wurden. Buildworkload ist ein gängiges Szenario, in dem Teams Status beibehalten und Agents wiederverwenden möchten. Sie können zustandsbehaftete Pools über verwaltete DevOps-Pools erreichen, während Sie sie mit bewährten Sicherheitspraktiken ausgleichen. Standardmäßig kann ein Agent für maximal 7 Tage wiederverwendet werden, Sie können ihn jedoch so konfigurieren, dass er früher wiederverwendet wird.
Hinweis
Zustandslose Pools oder die Verwendung der Agent-Zustandseinstellung Fresh Agent werden jedes Mal von Sicherheitsexperten als Verteidigung gegen Supply Chain-Angriffe empfohlen.
Zustandslose Pools
Wenn ein zustandsloser Agent konfiguriert ist, wird für jeden Auftrag ein neuer Agent beschafft und nach Abschluss des Auftrags verworfen.
Agents werden mithilfe der agentProfile Eigenschaft in der Ressource "Managed DevOps Pools" konfiguriert. Im folgenden Beispiel wird ein Stateless-Agent angegeben.
Agents werden mithilfe des agent-profile Parameters beim Erstellen oder Aktualisieren eines Pools konfiguriert.
Im folgenden Beispiel wird ein Stateless-Agent ohne Standby-Agents angegeben.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Das folgende Beispiel zeigt den Inhalt der agent-profile.json Datei.
{
"Stateless": {}
}
Wenn der Agentstatus jedes Mal auf Fresh Agent festgelegt ist, wird für jeden Auftrag ein neuer Agent beschafft und nach Abschluss des Auftrags verworfen.
Wenn derselbe Agent von mehreren Builds ("kind": "stateful" in Ressourcenvorlagen oder { "stateful": {...} } in Azure CLI) verwendet werden kann, werden Agents im Pool als statusbehaftet betrachtet. Zustandsbehaftete Pools werden mit den folgenden Einstellungen konfiguriert.
Die maximale Zeit für Standby-Agents (maxAgentLifetime) konfiguriert die maximale Dauer, die ein Agent in einem zustandsbehafteten Pool ausführen kann, bevor er heruntergefahren und verworfen wird. Das Format für max. Zeit für Standby-Agents ist dd.hh:mm:ss. Der Standardwert von "Max time to live" für Standby-Agents wird auf die maximal zulässige Dauer von sieben Tagen (7.00:00:00) festgelegt.
Der Karenzzeitraum (gracePeriodTimeSpan) konfiguriert die Zeitspanne, die ein Agent in einem zustandsbehafteten Pool auf neue Aufträge wartet, bevor er heruntergefahren wird, nachdem alle aktuellen und in die Warteschlange eingereihten Aufträge abgeschlossen sind. Das Format für die Karenzzeit ist dd.hh:mm:ss und die Standardeinstellung keine Karenzzeit ist.
Während Agents in zustandslosen Pools nach jedem Auftrag heruntergefahren und verworfen werden, werden Agents in zustandsbehafteten Pools weiterhin ausgeführt, wenn eine der folgenden Bedingungen erfüllt ist.
Wenn beim Abschluss des ersten Auftrags ein anderer Auftrag in die Warteschlange gestellt wird, sendet Managed DevOps Pools diesen Auftrag an den Agent, der den ersten Auftrag ausgeführt hat, anstatt ihn herunterzufahren.
Wenn eine Nachfrist für den Pool konfiguriert ist, warten Agents auf neue Aufträge für die durch die Nachfrist angegebene Dauer, bevor sie heruntergefahren wird.
Wenn Standby-Agents aktiviert sind und das Agentimage die Kriterien des aktiven Bereitstellungszeitraums erfüllt, wird der Agent weiterhin ausgeführt und wartet auf Aufträge.
Ausgeführte Agents in zustandsbehafteten Pools werden heruntergefahren und verworfen, wenn sie kontinuierlich für die von Max. Zeit für Standby-Agents angegebene Dauer ausgeführt werden, auch wenn die vorherigen Bedingungen zutreffen. Wenn z . B. max. Zeit für Standby-Agents für drei Tage konfiguriert ist und der Standby-Agent-Modus auf "Manuell", "Alle Wochenschemas" (Computer verfügbar 24/7) festgelegt ist, werden die Agents nach drei fortlaufenden Tagen der Betriebszeit neu gestartet.
Wichtig
Agents in zustandsbehafteten Pools können weiterhin heruntergefahren und verworfen werden, nachdem ein Auftrag abgeschlossen wurde, wenn keine Nachfrist vorhanden ist, kein aktiver Bereitstellungszeitraum für Standby-Agents und keine Aufträge in der Warteschlange, die dem Agent entsprechen. Sobald ein Agent verworfen wurde, geht jeder Zustand verloren.
Die Karenzzeit ermöglicht die kostengünstigste Methode der Ausführung zustandsbehafteter Pools für Pipelines mit konsistenter Last und erfordert nicht die Verwendung des Standby-Agent-Modus, um Agents online zu halten und bereit für die Annahme von Aufträgen zu sein.
Standby-Agent-Modus
Wenn Sie einen Pool erstellen, ist der Standby-Agent-Modus standardmäßig deaktiviert, und es gibt keine Standby-Agents, die Ihren Pipelines sofort zugewiesen werden müssen, was möglicherweise einige Minuten bis zu 15 Minuten warten muss, damit ein Agent bei Bedarf bereitgestellt wird. Um eine bessere Leistung zu erzielen, aktivieren Sie den Standby-Agent-Modus , und konfigurieren Sie einen Standby-Agent-Zeitplan, der Kapazität für Ihre Workload bereitstellt.
Deaktiviert – Der Standby-Agent-Modus ist deaktiviert, und Agents werden on-demand bereitgestellt, wenn Aufträge in die Warteschlange gestellt werden.
Manuell – Konfigurieren eines manuellen Standbyzeitplans.
Automatisch – Verwenden Sie einen automatischen Standbyzeitplan basierend auf dem Nutzungsverlauf des Agents und kann für Kosten und Leistung konfiguriert werden.
Standby-Agents werden mithilfe des resourcePredictionsProfile Abschnitts der agentProfile Eigenschaft konfiguriert. Legen Sie fest "kind": "Manual" , dass ein Start von Grund auf neu, ein Wochentagsschema oder ein gesamtes Wochenschema konfiguriert wird, und geben Sie die Details des Schemas im resourcePredictions Abschnitt an. Legen Sie diese Einstellung "kind": "Automatic" fest, um automatische Standby-Agents zu konfigurieren. Lassen Sie den ResourcePredictionsProfile Abschnitt aus, um Standby-Agents zu deaktivieren. Ausführliche Informationen zum Konfigurieren der einzelnen Skalierungstypen finden Sie in den folgenden Abschnitten.
Agents werden mithilfe des agent-profile Parameters beim Erstellen oder Aktualisieren eines Pools konfiguriert.
Standby-Agents werden mithilfe des resourcePredictionsProfile Abschnitts des agent-profile Parameters konfiguriert. Legen Sie fest "kind": "Manual" , dass ein Start von Grund auf neu, ein Wochentagsschema oder ein gesamtes Wochenschema konfiguriert wird, und geben Sie die Details des Schemas im resourcePredictions Abschnitt an. Legen Sie diese Einstellung "kind": "Automatic" fest, um automatische Standby-Agents zu konfigurieren. Ausführliche Informationen zum Konfigurieren der einzelnen Skalierungstypen finden Sie in den folgenden Abschnitten.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Das folgende Beispiel zeigt den Inhalt der agent-profile.json Datei.
Der manuelle Modus eignet sich am besten für Teams, die über Kenntnisse ihrer CI/CD-Pipelines verfügen. Wenn Sie die manuelle Option auswählen, müssen Sie Ihr Vorbereitstellungsschema basierend auf Ihrem Verständnis definieren, wann Agents im Pool am ehesten verwendet werden und wie viele Agents wahrscheinlich verwendet werden, und eine Bereitstellungsanzahl von Agents angeben, die die projizierte Nachfrage erfüllen.
Sie können Einen eigenen Bereitstellungszeitplan erstellen oder aus einem der vordefinierten Zeitpläne auswählen und die Zeitzone so konfigurieren, dass sie für die Angabe der Zeitpläne verwendet wird. Der Standardwert für "TimeZone vor der Bereitstellung" ist (UTC) Koordinierte Weltzeit.
Tipp
Die Anzahl der Bereitstellungen in einem Schema darf nicht größer sein als die maximal in den Pooleinstellungen konfigurierten Agents.
Alle paar Minuten überprüft verwaltete DevOps-Pools die Anzahl der aktiven Agents, die Aufträge ausführen, und Standby-Agents, die auf Aufträge warten, um sicherzustellen, dass die Vom aktuellen Bereitstellungsschema angegebene Anzahl von Agents verfügbar ist. Wenn die aktuelle Bereitstellungsanzahl 10 ist und fünf Agents Aufträge ausführen und zwei Agents im Standbymodus ausgeführt werden, starten verwaltete DevOps-Pools drei zusätzliche Standby-Agents, um die Gesamtzahl der Agents bis zu 10 zu bringen.
Die Konfiguration des manuellen Standby-Agents kann auf eine der folgenden drei Arten konfiguriert werden.
Von Grund auf neu beginnen – Konfigurieren einer Reihe von Bereitstellungszeiträumen für Standby-Agents
Jeder der Schnellstarts vor der Bereitstellung verfügt über die folgenden allgemeinen Einstellungen zusätzlich zu den spezifischen Einstellungen für diesen Schnellstart.
Mit der Vorabbereitstellung von TimeZone können Sie die Zeitzone für die Zeiten in Ihrem Vorbereitstellungsschema konfigurieren. Der Standardwert für "TimeZone vor der Bereitstellung" ist (UTC) Koordinierte Weltzeit.
Der Prozentsatz des Standby-Agents konfiguriert den Prozentsatz der Standby-Agents für jedes Image. Sie können eingeben * , um sicherzustellen, dass alle Bilder gleich bereitgestellt werden, oder Sie können eine ganze Zahl zwischen 0 und 100 angeben, um einen Prozentsatz darzustellen. Wenn Sie einen Prozentsatz angeben, muss die Summe für alle Bilder gleich 100 sein. Wenn Sie über ein einzelnes Bild verfügen, geben Sie * ein oder 100 an. Der Prozentsatz des images Standby-Agents wird im Abschnitt bei Verwendung von ARM-Vorlagen konfiguriert. Weitere Informationen finden Sie unter "Konfigurieren von Bildern".
Die manuelle Standby-Agent-Bereitstellung wird im resourcePredictionsProfile Abschnitt agentProfileangegeben, und die Details werden im resourcePredictions Abschnitt konfiguriert.
Geben Sie die gewünschte Zeitzone für Ihr Schema mithilfe der timeZone Eigenschaft an. Der Standardwert ist UTC. Informationen zum Abrufen einer Liste von Zeitzonennamen für diese Eigenschaft finden Sie unter TimeZoneInfo.GetSystemTimeZones-Methode.
Der Zeitplan für die Standby-Agents wird durch die daysData Liste definiert. Die daysData Liste kann entweder ein Element oder sieben Elemente enthalten.
Eine daysData Liste mit sieben Elementen entspricht den Wochentagen ab Sonntag. Jedes dieser sieben Elemente kann null oder mehr "time": count Einträge aufweisen, eine Zeit im 24-Stunden-Format und eine Anzahl von Standby-Agents angeben. Die angegebene Anzahl von Standby-Agents wird bis zum nächsten "time": count Eintrag beibehalten, der am selben Tag oder an einem folgenden Tag sein kann.
Eine daysData Liste mit einem einzelnen Element definiert ein Schema "Alle Woche", bei dem der einzelne "time": count Eintrag der Anzahl des Standby-Agents für die gesamte Woche entspricht.
Das folgende Beispiel ist ein manuelles Standby-Agent-Schema, das Eastern Standard Timeverwendet wird, wobei ein einzelner Agent montags bis freitags von 9:00 Uhr (Anzahl standby-Agent 1) bis 17:00 Uhr (Anzahl der Standby-Agenten 0) bereitgestellt wird.
Ein einzelnes daysData Element enthält ein Wörterbuch mit Zeiten und Anzahl von Standby-Agenten. Jeder "time" : count Eintrag gibt die Anzahl der Standby-Agents an, die zum angegebenen Zeitpunkt im 24-Stunden-Format geplant werden sollen. Aufeinander folgende "time" : count Einträge geben eine Abfolge der Anzahl geplanter Agenten für diesen Tag an.
"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
]
Die Anzahl der Standby-Agents wird am Ende eines Tages oder am Ende der Woche nicht automatisch auf Null zurückgesetzt, und die Angabe eines leeren daysData Elements deaktiviert keine Standby-Agents für diesen Tag. Ein leeres daysData Element bedeutet, dass für diesen Tag keine Änderungen an der Anzahl des Standby-Agents vorgenommen werden. Um den Standby-Agent ab einem bestimmten Zeitraum auf Null festzulegen, müssen Sie explizit einen "time" : count Eintrag mit einer count von 0.
Beispiele
Wenn Sie keine Anpassung an der Anzahl des Standby-Agents vornehmen möchten, die am Ende des vorherigen Tags (oder der Woche, wenn Sie den ersten Zeitraum der Woche konfigurieren), geben Sie ein daysData Element mit null Einträgen an.
{
}
Geben Sie die folgende Konfiguration an, um einen einzelnen Standby-Agent zu planen, um zu 09:00:00 beginnen und zu beenden 17:00:00 (mithilfe der durch die resourcePredictions Eigenschaft angegebenen Zeitzone).
{
"09:00:00": 1,
"17:00:00": 0
}
Wenn Sie einen einzelnen Standby-Agent von Mitternacht bis 09:00:00Mitternacht planen möchten, gefolgt von 10 Standby-Agents, bis 17:00:00, geben Sie die folgende Konfiguration an.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Verwenden Sie zwei aufeinander folgende daysData Elemente, um einen Standby-Agent zu planen, der am 09:00:00 angegebenen Tag beginnt und am folgenden Tag beendet 17:00:00 wird.
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Agents werden mithilfe des agent-profile Parameters beim Erstellen oder Aktualisieren eines Pools konfiguriert.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Das folgende Beispiel zeigt den Inhalt der agent-profile.json Datei.
Die manuelle Standby-Agent-Bereitstellung wird im resourcePredictionsProfile Abschnitt des agent-profile Parameters angegeben, und die Details werden im resourcePredictions Abschnitt konfiguriert.
Geben Sie die gewünschte Zeitzone für Ihr Schema mithilfe der timeZone Eigenschaft an. Der Standardwert ist UTC. Informationen zum Abrufen einer Liste von Zeitzonennamen für diese Eigenschaft finden Sie unter TimeZoneInfo.GetSystemTimeZones-Methode.
Der Zeitplan für die Standby-Agents wird durch die daysData Liste definiert. Die daysData Liste kann entweder ein Element oder sieben Elemente enthalten.
Eine daysData Liste mit sieben Elementen entspricht den Wochentagen ab Sonntag. Jedes dieser sieben Elemente kann null oder mehr "time": count Einträge aufweisen, eine Zeit im 24-Stunden-Format und eine Anzahl von Standby-Agents angeben. Die angegebene Anzahl von Standby-Agents wird bis zum nächsten "time": count Eintrag beibehalten, der am selben Tag oder an einem folgenden Tag sein kann.
Eine daysData Liste mit einem einzelnen Element definiert ein Schema "Alle Woche", bei dem der einzelne "time": count Eintrag der Anzahl des Standby-Agents für die gesamte Woche entspricht.
Das folgende Beispiel ist ein manuelles Standby-Agent-Schema, das Eastern Standard Timeverwendet wird, wobei ein einzelner Agent montags bis freitags von 9:00 Uhr (Anzahl standby-Agent 1) bis 17:00 Uhr (Anzahl der Standby-Agenten 0) bereitgestellt wird.
Ein einzelnes daysData Element enthält ein Wörterbuch mit Zeiten und Anzahl von Standby-Agenten. Jeder "time" : count Eintrag gibt die Anzahl der Standby-Agents an, die zum angegebenen Zeitpunkt im 24-Stunden-Format geplant werden sollen. Aufeinander folgende "time" : count Einträge geben eine Abfolge der Anzahl geplanter Agenten für diesen Tag an.
"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
]
Die Anzahl der Standby-Agents wird am Ende eines Tages oder am Ende der Woche nicht automatisch auf Null zurückgesetzt, und die Angabe eines leeren daysData Elements deaktiviert keine Standby-Agents für diesen Tag. Ein leeres daysData Element bedeutet, dass für diesen Tag keine Änderungen an der Anzahl des Standby-Agents vorgenommen werden. Um den Standby-Agent ab einem bestimmten Zeitraum auf Null festzulegen, müssen Sie explizit einen "time" : count Eintrag mit einer count von 0.
Beispiele
Wenn Sie keine Anpassung an der Anzahl des Standby-Agents vornehmen möchten, die am Ende des vorherigen Tags (oder der Woche, wenn Sie den ersten Zeitraum der Woche konfigurieren), geben Sie ein daysData Element mit null Einträgen an.
{
}
Geben Sie die folgende Konfiguration an, um einen einzelnen Standby-Agent zu planen, um zu 09:00:00 beginnen und zu beenden 17:00:00 (mithilfe der durch die resourcePredictions Eigenschaft angegebenen Zeitzone).
{
"09:00:00": 1,
"17:00:00": 0
}
Wenn Sie einen einzelnen Standby-Agent von Mitternacht bis 09:00:00Mitternacht planen möchten, gefolgt von 10 Standby-Agents, bis 17:00:00, geben Sie die folgende Konfiguration an.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Verwenden Sie zwei aufeinander folgende daysData Elemente, um einen Standby-Agent zu planen, der am 09:00:00 angegebenen Tag beginnt und am folgenden Tag beendet 17:00:00 wird.
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Von Grund auf neu beginnen
Wenn Sie von Grund auf neu beginnen möchten, können Sie eine Liste der Bereitstellungszeiträume hinzufügen, die als Bereitstellungsschema dienen sollen. Jeder Bereitstellungszeitraum besteht aus einem Starttag, einem Endtag, einer Zeitzone, einer Startzeit, einer Startzeit, einer Endzeit und einer Anzahl. Bereitstellungszeiträume können sich nicht gegenseitig überlappen.
Eigenschaft
Beschreibung
Mehrtägig
Wenn diese Option aktiviert ist, können Sie sowohl einen Starttag als auch einen Endtag für Ihr Bereitstellungsschema konfigurieren.
Bis zum nächsten Zeitraum
Wenn diese Option aktiviert ist, wird der Bereitstellungszeitraum von der Startzeit bis zum Beginn des nächsten Bereitstellungszeitraums ausgeführt.
Starttag
Der Tag, an dem der Bereitstellungszeitraum beginnt.
Endtag
Der Tag, an dem der Bereitstellungszeitraum endet. Erforderlich, wenn mehrere Tage überprüft werden.
Startzeit
Der Zeitpunkt, zu dem der Bereitstellungszeitraum beginnt.
Endzeit
Der Zeitraum, zu dem der Bereitstellungszeitraum endet. Erforderlich, es sei denn , der nächste Zeitraum wird überprüft.
Anzahl
Die Anzahl der bereitzustellenden Standby-Agents. Diese Zahl muss größer als Null sein und darf nicht größer als der Wert der maximalen Agents sein, der in den Pooleinstellungen konfiguriert ist.
Nach dem Erstellen eines Bereitstellungszeitraums können Sie den Zeitraum aus der Liste der Vorbereitstellungsschemas löschen oder bearbeiten.
Im folgenden Beispiel wird ein manuelles Schema mit 1 Agent konfiguriert, der montagmorgens von 12:00 uhr bis 5:00 Uhr EST bereitgestellt wird.
Wenn Sie das Wochentagsschema auswählen, können Sie eine Start- und Endzeit angeben, in der die angegebene Anzahl von Standby-Agents jeden Wochentag im Standbymodus ist.
Eigenschaft
Beschreibung
Startzeit
Der Zeitpunkt, zu dem der Bereitstellungszeitraum beginnt.
Endzeit
Der Zeitraum, zu dem der Bereitstellungszeitraum endet.
Anzahl der Bereitstellungen
Die Anzahl der bereitzustellenden Standby-Agents. Diese Zahl muss größer als Null sein und darf nicht größer als der Wert der maximalen Agents sein, der in den Pooleinstellungen konfiguriert ist.
Im folgenden Beispiel werden vier Agents so konfiguriert, dass sie während der Arbeitszeit mit 0 Agents während der Arbeitsstunden und wochenenden unter Verwendung der Eastern Standard Time verwendet werden.
Wenn Sie Ihre Verwendungsmuster nicht kennen und sich auf die automatische Prognose basierend auf früheren Daten verlassen möchten, wählen Sie "Automatisch" aus. Sie können die Kosten- und Agentleistung mithilfe eines Schiebereglers mit den folgenden fünf Optionen ausgleichen. Verwaltete DevOps-Pools führen eine Abfrage in den letzten drei Wochen mit Verlaufsdaten (sofern verfügbar) aus, organisieren In die Warteschlange eingereihte Sitzungen des Pools in fünf Minuten und weisen jedes Stunde das angegebene Quantil (um Spitzen zu vermeiden) zu.
Effektivstes (MostCostEffective) - 10. Quantil
Mehr Kosteneffektiv (MoreCostEffective) - 25. Quantil