Stateful pools : het delen van agents tussen meerdere taken toestaan.
De standaardinstelling voor een beheerde DevOps-pool is staatloos (elke keer nieuwe agent), maar in sommige gevallen willen teams mogelijk agents opnieuw gebruiken om de pakketten of bestanden die zijn gemaakt tijdens de vorige pijplijnuitvoering opnieuw te gebruiken. Buildworkload is een veelvoorkomend scenario waarin teams de status willen behouden en agents opnieuw willen gebruiken. U kunt stateful pools bereiken via beheerde DevOps-pools terwijl u deze balanceert met aanbevolen beveiligingsprocedures. Standaard kan een agent maximaal 7 dagen opnieuw worden gebruikt, maar u kunt deze zo configureren dat deze eerder wordt gerecycled.
Notitie
Stateless pools of het gebruik van de agentstatusinstelling Fresh agent elke keer worden aanbevolen door beveiligingsexperts als verdediging tegen supply chain-aanvallen.
Staatloze pools
Wanneer een staatloze agent is geconfigureerd, wordt voor elke taak een nieuwe agent aangeschaft en wordt deze verwijderd nadat de taak is voltooid.
Agents worden geconfigureerd met behulp van de agentProfile eigenschap in de resource Beheerde DevOps-pools. In het volgende voorbeeld wordt een stateless agent opgegeven.
In het volgende voorbeeld wordt een stateless agent opgegeven zonder stand-byagents.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
In het volgende voorbeeld ziet u de inhoud van het bestand agent-profile.json .
{
"Stateless": {}
}
Wanneer de status van de agent elke keer op Fresh-agent is ingesteld, wordt voor elke taak een nieuwe agent aangeschaft en wordt deze verwijderd nadat de taak is voltooid.
Wanneer dezelfde agent kan worden gebruikt door meerdere builds ("kind": "stateful" in resourcesjablonen of { "stateful": {...} } in Azure CLI), worden agents in de pool beschouwd als stateful. Stateful pools worden geconfigureerd met behulp van de volgende instellingen.
De maximale time-to-live voor stand-byagents (maxAgentLifetime) configureert de maximale duur die een agent in een stateful pool kan uitvoeren voordat deze wordt afgesloten en verwijderd. De notatie voor maximale time to live voor stand-byagents is dd.hh:mm:ss. De standaardwaarde van Maximale time to live voor stand-byagents is ingesteld op de maximaal toegestane duur van zeven dagen (7.00:00:00).
Respijtperiode (gracePeriodTimeSpan) configureert de hoeveelheid tijd die een agent in een stateful pool wacht op nieuwe taken voordat ze worden afgesloten nadat alle huidige en in de wachtrij geplaatste taken zijn voltooid. De notatie voor respijtperiode is dd.hh:mm:ss en de standaardwaarde is geen respijtperiode.
Terwijl agents in staatloze pools na elke taak worden afgesloten en verwijderd, blijven agents in stateful pools actief als aan een van de volgende voorwaarden wordt voldaan.
Als er een andere taak in de wachtrij staat wanneer de eerste taak is voltooid, stuurt Beheerde DevOps-pools die taak naar de agent die de eerste taak heeft uitgevoerd in plaats van deze af te sluiten.
Als er een respijtperiode is geconfigureerd voor de pool, wachten agents op nieuwe taken voor de duur die is opgegeven door de respijtperiode voordat ze worden afgesloten.
Als stand-byagents zijn ingeschakeld en de agentinstallatiekopieën voldoen aan de criteria van de actieve inrichtingsperiode, blijft de agent actief en wordt gewacht op taken.
Actieve agents in stateful pools worden afgesloten en verwijderd als ze continu worden uitgevoerd voor de duur die is opgegeven door Max time to live voor stand-byagenten, zelfs als aan de vorige voorwaarden wordt voldaan. Als de maximale duur voor live voor stand-byagenten bijvoorbeeld drie dagen is geconfigureerd en de stand-byagentmodus is ingesteld op Handmatig, De hele weekschema (machines beschikbaar 24/7), worden de agents opnieuw opgestart na drie doorlopende dagen van uptime.
Belangrijk
Agents in stateful pools kunnen nog steeds worden afgesloten en verwijderd nadat een taak is voltooid als er geen respijtperiode is, geen actieve inrichtingsperiode voor stand-byagents en geen taken in de wachtrij die overeenkomen met de agent. Zodra een agent is verwijderd, gaat elke status verloren.
Respijtperiode maakt het de meest rendabele manier om stateful pools uit te voeren voor pijplijnen met consistente belasting en vereist geen gebruik van de stand-byagentmodus om agents online te houden en klaar te zijn voor het accepteren van taken.
Stand-byagentmodus
Wanneer u een pool maakt, is de stand-byagentmodus standaard uitgeschakeld en er zijn geen stand-byagents die onmiddellijk aan uw pijplijnen moeten worden toegewezen. Dit kan enkele ogenblikken, tot 15 minuten, duren voordat een agent op aanvraag wordt ingericht. Voor betere prestaties schakelt u de stand-byagentmodus in en configureert u een stand-byagentschema dat capaciteit biedt voor uw workload.
Wanneer een stand-byagentschema is geconfigureerd, vergelijkt Managed DevOps Pools periodiek het aantal ingerichte agenten met het aantal stand-byagenten dat is gespecificeerd volgens het huidige inrichtingsschema, en worden er nieuwe agenten gestart indien nodig om het aantal stand-byagenten te behouden. U kunt de huidige status en het aantal agents in uw pool bekijken met behulp van het deelvenster Agents.
Belangrijk
Het aantal inrichtingen in een schema kan niet groter zijn dan de maximumagenten die zijn geconfigureerd in groepsinstellingen.
De stand-byagentmodus wordt geconfigureerd met behulp van de volgende instellingen:
Uit : de stand-byagentmodus is uitgeschakeld en agents worden op aanvraag ingericht wanneer taken in de wachtrij worden geplaatst.
Handmatig : een handmatig stand-byschema configureren.
Automatisch : gebruik een automatisch stand-byschema op basis van de gebruiksgeschiedenis van de agent en configureerbaar voor kosten en prestaties.
Stand-byagents worden geconfigureerd met behulp van de resourcePredictionsProfile sectie van de agentProfile eigenschap. Stel "kind": "Manual" in dat u een geheel nieuwe start, een weekdagschema of een hele weekschema wilt configureren en de details van het schema in de resourcePredictions sectie wilt opgeven. Ingesteld "kind": "Automatic" om automatische stand-byagents te configureren. Laat de ResourcePredictionsProfile sectie weg om stand-byagenten uit te schakelen. Zie de volgende secties voor meer informatie over het configureren van elk schaaltype.
Stand-byagents worden geconfigureerd met behulp van de resourcePredictionsProfile sectie van de agent-profile parameter. Stel "Manual": {} in dat u een geheel nieuwe start, een weekdagschema of een hele weekschema wilt configureren en de details van het schema in de resourcePredictions sectie wilt opgeven. Ingesteld "Automatic": {} om automatische stand-byagents te configureren. Zie de volgende secties voor meer informatie over het configureren van elk schaaltype.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
In het volgende voorbeeld ziet u de inhoud van het bestand agent-profile.json .
Handmatige modus is het meest geschikt voor teams die kennis hebben van hun ci/CD-pijplijnengebruikspatronen. Als u de handmatige optie selecteert, moet u uw pre-inrichtingsschema definiëren op basis van uw inzicht in wanneer agents in de pool waarschijnlijk worden gebruikt en hoeveel agents waarschijnlijk worden gebruikt, en een inrichtingsaantal agents opgeven dat voldoet aan de verwachte vraag.
U kunt uw eigen inrichtingsschema maken of kiezen uit een van de vooraf gedefinieerde planningen en u kunt de tijdzone configureren die moet worden gebruikt voor het opgeven van de planningen. De standaardwaarde voor Pre-provisioning TimeZone is (UTC) Coordinated Universal Time.
Handmatige stand-byagentconfiguratie kan op een van de volgende drie manieren worden geconfigureerd.
Helemaal opnieuw beginnen - Een set inrichtingsperioden voor stand-byagenten configureren
Elk van de quickstarts voor vooraf inrichten bevat de volgende algemene instellingen naast de specifieke instellingen voor die quickstart.
Met de tijdzone vooraf inrichten kunt u de tijdzone configureren voor de tijden in uw pre-inrichtingsschema. De standaardwaarde voor Pre-provisioning TimeZone is (UTC) Coordinated Universal Time.
Het percentage stand-byagent configureert het gewenste percentage stand-byagents voor elke installatiekopieën. U kunt invoeren * om ervoor te zorgen dat alle installatiekopieën gelijk worden ingericht of u kunt een geheel getal opgeven van 0 tot 100 om een percentage weer te geven. Als u een percentage opgeeft, moet het totaal voor alle afbeeldingen gelijk zijn aan 100. Als u één afbeelding hebt, geeft * u of 100 op.
Het percentage stand-byagent wordt geconfigureerd in de images sectie wanneer u ARM-sjablonen gebruikt. Zie Installatiekopieën configureren voor meer informatie.
Handmatige stand-by-agentinrichting wordt opgegeven in de resourcePredictionsProfile sectie van agentProfile, en de details worden geconfigureerd in de resourcePredictions sectie.
Geef de gewenste tijdzone voor uw schema op met behulp van de timeZone eigenschap. De standaardwaarde is UTC. Zie de methode TimeZoneInfo.GetSystemTimeZones om een lijst met tijdzonenamen voor deze eigenschap op te halen.
Het schema voor de stand-byagenten wordt gedefinieerd door de daysData lijst. De daysData lijst kan één item of zeven items bevatten.
Een daysData lijst met zeven items wordt toegewezen aan de dagen van de week, beginnend met zondag. Elk van deze zeven items kan nul of meer "time": count items hebben, waarbij een tijd wordt opgegeven in de notatie van 24 uur en het aantal stand-byagents. Het opgegeven aantal stand-byagents wordt gehandhaafd tot de volgende "time": count vermelding, die zich op dezelfde dag of op een volgende dag kan bevinden.
Een daysData lijst met één item definieert een all week-schema, waarbij de enkele "time": count vermelding overeenkomt met het aantal stand-byagenten voor de hele week.
Het volgende voorbeeld is een handmatig stand-byagentschema, waarbij Eastern Standard Timeéén agent maandag tot en met vrijdag is ingericht, van 9:00 uur (aantal stand-byagenten 1) tot 17:00 uur (aantal stand-byagenten 0).
Eén daysData item bevat een woordenlijst met tijden en het aantal stand-byagenten. Elke "time" : count vermelding geeft het aantal stand-byagents op dat moet worden gepland vanaf de opgegeven tijd, in de notatie van 24 uur. Opeenvolgende "time" : count vermeldingen geven een reeks geplande agentaantallen voor die dag op.
"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
]
Het aantal stand-byagenten wordt niet automatisch teruggezet naar nul aan het einde van een dag of aan het einde van de week en het opgeven van een leeg daysData item schakelt de stand-byagenten voor die dag niet uit. Een leeg daysData item betekent dat er geen wijzigingen zijn in het schema voor het tellen van de stand-byagent voor die dag. Als u de stand-byagent wilt instellen op nul vanaf een bepaalde periode, moet u expliciet een "time" : count vermelding met een count van 0opgeven.
Voorbeelden
Als u het aantal stand-byagenten dat is opgegeven aan het einde van de vorige dag (of week als u de eerste periode van de week configureert), niet wilt aanpassen, geeft u een daysData item met nul vermeldingen op.
{
}
Als u wilt plannen dat één stand-byagent begint bij 09:00:00 en stopt 17:00:00 (met behulp van de tijdzone die is opgegeven door de resourcePredictions eigenschap), geeft u de volgende configuratie op.
{
"09:00:00": 1,
"17:00:00": 0
}
Als u één stand-byagent wilt plannen vanaf middernacht, 09:00:00gevolgd door 10 stand-byagents tot 17:00:00en met 10, geeft u de volgende configuratie op.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Als u wilt plannen dat een stand-byagent beschikbaar is vanaf 09:00:00 de opgegeven dag en op 17:00:00 de volgende dag stopt, gebruikt u twee opeenvolgende daysData items.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
In het volgende voorbeeld ziet u de inhoud van het bestand agent-profile.json .
Handmatige stand-by-agentinrichting wordt opgegeven in de resourcePredictionsProfile sectie van de agent-profile parameter en de details worden geconfigureerd in de resourcePredictions sectie.
Geef de gewenste tijdzone voor uw schema op met behulp van de timeZone eigenschap. De standaardwaarde is UTC. Zie de methode TimeZoneInfo.GetSystemTimeZones om een lijst met tijdzonenamen voor deze eigenschap op te halen.
Het schema voor de stand-byagenten wordt gedefinieerd door de daysData lijst. De daysData lijst kan één item of zeven items bevatten.
Een daysData lijst met zeven items wordt toegewezen aan de dagen van de week, beginnend met zondag. Elk van deze zeven items kan nul of meer "time": count items hebben, waarbij een tijd wordt opgegeven in de notatie van 24 uur en het aantal stand-byagents. Het opgegeven aantal stand-byagents wordt gehandhaafd tot de volgende "time": count vermelding, die zich op dezelfde dag of op een volgende dag kan bevinden.
Een daysData lijst met één item definieert een all week-schema, waarbij de enkele "time": count vermelding overeenkomt met het aantal stand-byagenten voor de hele week.
Het volgende voorbeeld is een handmatig stand-byagentschema, waarbij Eastern Standard Timeéén agent maandag tot en met vrijdag is ingericht, van 9:00 uur (aantal stand-byagenten 1) tot 17:00 uur (aantal stand-byagenten 0).
Eén daysData item bevat een woordenlijst met tijden en het aantal stand-byagenten. Elke "time" : count vermelding geeft het aantal stand-byagents op dat moet worden gepland vanaf de opgegeven tijd, in de notatie van 24 uur. Opeenvolgende "time" : count vermeldingen geven een reeks geplande agentaantallen voor die dag op.
"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
]
Het aantal stand-byagenten wordt niet automatisch teruggezet naar nul aan het einde van een dag of aan het einde van de week en het opgeven van een leeg daysData item schakelt de stand-byagenten voor die dag niet uit. Een leeg daysData item betekent dat er geen wijzigingen zijn in het schema voor het tellen van de stand-byagent voor die dag. Als u de stand-byagent wilt instellen op nul vanaf een bepaalde periode, moet u expliciet een "time" : count vermelding met een count van 0opgeven.
Voorbeelden
Als u het aantal stand-byagenten dat is opgegeven aan het einde van de vorige dag (of week als u de eerste periode van de week configureert), niet wilt aanpassen, geeft u een daysData item met nul vermeldingen op.
{
}
Als u wilt plannen dat één stand-byagent begint bij 09:00:00 en stopt 17:00:00 (met behulp van de tijdzone die is opgegeven door de resourcePredictions eigenschap), geeft u de volgende configuratie op.
{
"09:00:00": 1,
"17:00:00": 0
}
Als u één stand-byagent wilt plannen vanaf middernacht, 09:00:00gevolgd door 10 stand-byagents tot 17:00:00en met 10, geeft u de volgende configuratie op.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Als u wilt plannen dat een stand-byagent beschikbaar is vanaf 09:00:00 de opgegeven dag en op 17:00:00 de volgende dag stopt, gebruikt u twee opeenvolgende daysData items.
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Begin helemaal opnieuw
Als u ervoor kiest om helemaal opnieuw te beginnen, kunt u een lijst met inrichtingsperioden toevoegen om te fungeren als uw inrichtingsschema. Elke inrichtingsperiode bestaat uit een begindag, einddag, tijdzone, begintijd, eindtijd en een telling. Inrichtingsperioden kunnen elkaar niet overlappen.
Eigenschappen
Beschrijving
Meerdere dagen
Wanneer dit is ingeschakeld, kunt u zowel een begindag als een einddatum configureren voor uw inrichtingsschema.
Tot volgende periode
Wanneer dit is ingeschakeld, wordt de inrichtingsperiode uitgevoerd vanaf de begintijd tot het begin van de volgende inrichtingsperiode.
Begindag
De dag waarop de inrichtingsperiode begint.
Einddag
De dag waarop de inrichtingsperiode afloopt. Vereist als meerdere dagen is ingeschakeld.
Begintijd
De tijd waarop de inrichtingsperiode begint.
Eindtijd
De tijd waarop de inrichtingsperiode afloopt. Vereist tenzij de volgende periode is ingeschakeld.
Tellen
Het aantal stand-byagents dat moet worden ingericht. Dit getal moet groter zijn dan nul en mag niet groter zijn dan de waarde maximumagenten die zijn geconfigureerd in de poolinstellingen.
Nadat u een inrichtingsperiode hebt gemaakt, kunt u de periode verwijderen of bewerken uit de lijst met schema's vóór inrichting .
In het volgende voorbeeld wordt een handmatig schema geconfigureerd met 1 agent ingericht op maandagochtend van 12:00 tot 05:00 uur EST.
Als u het weekdagschema kiest, kunt u een begin- en eindtijd opgeven waarin het opgegeven aantal stand-byagents elke weekdag stand-by is.
Eigenschappen
Beschrijving
Begintijd
De tijd waarop de inrichtingsperiode begint.
Eindtijd
De tijd waarop de inrichtingsperiode afloopt.
Aantal inrichtingen
Het aantal stand-byagents dat moet worden ingericht. Dit getal moet groter zijn dan nul en mag niet groter zijn dan de waarde maximumagenten die zijn geconfigureerd in de poolinstellingen.
In het volgende voorbeeld worden vier agents geconfigureerd die moeten worden gebruikt tijdens werkuren met 0 agents tijdens niet-werkuren en weekenden, met behulp van Eastern Standard Time.
Als u uw gebruikspatronen niet kent en wilt vertrouwen op automatische prognose op basis van eerdere gegevens, kiest u Automatisch. U kunt met behulp van een schuifregelaar een balans maken tussen kosten en agentprestaties met de volgende vijf opties. Beheerde DevOps-pools voeren een query uit in de afgelopen drie weken historische gegevens (indien beschikbaar), het organiseren van sessies in de wachtrij van de pool in perioden van vijf minuten en wijst het opgegeven percentiel (om pieken te voorkomen) toe aan elk uur.
Meest rendabel (MostCostEffective) - 10e percentiel