Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Ihr deklarativer Agent ausgereift ist, müssen Sie ihn in mehreren Umgebungen bereitstellen – Entwicklung, Staging und Produktion – und schließlich parallele Versionen ausführen, damit Sie neue Funktionen testen können, ohne vorhandene Benutzer zu unterbrechen. Die Verwaltung eines separaten Satzes von Manifestdateien für jede Umgebungs- und Versionskombination ist nicht skalierbar.
Das Microsoft 365 Agents Toolkit erfüllt beide Anforderungen, die Zielumgebung und die Agent-Version, mit demselben Mechanismus: Umgebungsdateien. Indem Sie eine .env.* Datei pro Ziel definieren und ${{VAR_NAME}} Platzhalter in Ihrem gesamten Manifest, Ihrer deklarativen Agentdatei und m365agents.ymlverwenden, können Sie jede Umgebung oder Version mit einem einzigen Befehlatk provision --env <target> bereitstellen, ohne eine einzelne Datei zu duplizieren.
Tipp
Die Work IQ Dev Tools (Vorschau) und das Microsoft 365 Agents Toolkit bieten verwandte Pro-Code-Workflows. Informationen zur Auswahl basierend auf Ihren Fähigkeiten, der Paketroute und der Zielerfahrung finden Sie unter Auswählen von Entwicklungswerkzeugen für Ihr Plug-in.
Zwei Achsen, ein System
Das Umgebungsmanagement für deklarative Agenten hat zwei Dimensionen:
- Zielumgebungen: Derselbe Agent wird für verschiedene Mandanten oder App-Registrierungen bereitgestellt – Entwicklungs-, Staging-, Produktions- oder kundenspezifische Mandanten.
- Agent-Versionen: Mehrere Varianten desselben Agents, die parallel ausgeführt werden, z. B. v1 stable, v2 preview oder ein experimenteller Zweig.
Beide Dimensionen werden auf die gleiche Weise behandelt. Sie definieren eine Umgebungsdatei für jedes Ziel und die ${{VAR_NAME}} Platzhalter in Ihrem Manifest, der deklarativen Agent-Datei und m365agents.yml lösen sie zum Bereitstellungszeitpunkt auf.
Zielumgebungen modellieren
Die meisten Teams stellen mindestens zwei Umgebungen bereit – Entwicklung und Produktion – und viele fügen eine Stagingumgebung dazwischen hinzu. Erstellen Sie eine Datei pro Umgebung im env/ Ordner:
env/
├── .env.dev
├── .env.dev.user
├── .env.staging
├── .env.staging.user
├── .env.prod
└── .env.prod.user
Jede Datei definiert dieselben Variablennamen mit umgebungsspezifischen Werten:
# env/.env.staging
TEAMS_APP_ID=33333333-3333-3333-3333-333333333333
AAD_CLIENT_ID=44444444-4444-4444-4444-444444444444
API_BASE_URL=https://api-staging.contoso.com
SHAREPOINT_SITE_URL=https://contoso.sharepoint.com/sites/hr-staging
AGENT_DISPLAY_NAME=HR Onboarding Buddy (Staging)
TEAMSFX_ENV=staging
Tipp
Schließen Sie den Umgebungsnamen in den Anzeigenamen des Agents für Nicht-Produktionsmandanten ein. Beispielsweise macht "HR Onboarding Buddy (Staging)" den Testern sofort klar, welche Version sie verwenden, was hilft, Verwirrung bei der Meldung von Problemen zu vermeiden.
Um eine andere Umgebung als Ziel zu verwenden, übergeben Sie das --env Flag an jeden Agents Toolkit-Befehl:
atk provision --env staging
atk deploy --env staging
atk publish --env staging
Modellieren mehrerer Versionen
Agent-Versionen folgen demselben Muster wie Zielumgebungen. Jede Version ist ein Bereitstellungsziel mit einer eigenen Umgebungsdatei. Um einen Agent der Version 2 (v2) zusammen mit einem Agent der Version 1 (v1) im selben Produktionsmandanten bereitzustellen, fügen Sie eine prod-v2 Umgebung hinzu:
env/
├── .env.dev
├── .env.staging
├── .env.prod # v1, the stable one
├── .env.prod-v2 # v2, running side by side
└── ...corresponding .user files
Geben Sie .env.prod-v2 eine eindeutige Teams-App-ID an, damit beide Agents im selben Mandanten koexistieren können:
# env/.env.prod-v2
TEAMS_APP_ID=55555555-5555-5555-5555-555555555555
AAD_CLIENT_ID=22222222-2222-2222-2222-222222222222
API_BASE_URL=https://api.contoso.com
SHAREPOINT_SITE_URL=https://contoso.sharepoint.com/sites/hr
AGENT_DISPLAY_NAME=HR Onboarding Buddy (Preview)
AGENT_VERSION=2.0.0
TEAMSFX_ENV=prod-v2
Verwende Variablen in deinem Manifest für jeden Wert, der sich zwischen den Versionen unterscheidet:
{
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.24/MicrosoftTeams.schema.json",
"manifestVersion": "1.24",
"id": "${{TEAMS_APP_ID}}",
"version": "${{AGENT_VERSION}}",
"name": {
"short": "${{AGENT_DISPLAY_NAME}}",
"full": "${{AGENT_DISPLAY_NAME}} - Contoso"
},
"developer": {
"name": "Contoso",
"websiteUrl": "${{API_BASE_URL}}"
},
"copilotAgents": {
"declarativeAgents": [
{
"id": "declarativeAgent",
"file": "declarativeAgent.json"
}
]
}
}
Das Ergebnis ist eine Manifestdatei, die zwei verschiedene Apps im selben Mandanten erzeugt. Benutzer, denen Zugriff auf die Vorschauversion gewährt wird, verwenden v2; Alle anderen Benutzer verwenden weiterhin v1.
Hinweis
Die Teams-App-ID ist der Schlüssel zu diesem Muster. Die Plattform behandelt Apps mit unterschiedlichen IDs als separate Apps, unabhängig davon, wie viel Code sie gemeinsam nutzen. Diese Trennung ermöglicht auch A/B-Tests von Agent-Personas ohne Auswirkungen auf die Produktionsbenutzer.
Verzweigung der Agentdefinition selbst
Wenn Versionsunterschiede über Variablenwerte hinausgehen (z. B. unterschiedliche Anweisungen, eine neue Funktion oder ein anderer Satz von Plug-Ins), haben Sie zwei Möglichkeiten, die Agentendefinition selbst zu verzweigen.
Option A: Behalten Sie eine einzelne declarativeAgent.json Spalte bei und verwenden Sie Variablen für die Werte, die sich unterscheiden. Dieser Ansatz funktioniert gut, wenn die Unterschiede geringfügig sind, z. B. bei einem anderen Anweisungsabsatz oder einer anderen SharePoint Website-URL.
Option B: Verwalten Sie eine separate deklarative Agent-Datei pro Version und verweisen Sie über eine Variable im Teams-App-Manifest darauf:
{
"copilotAgents": {
"declarativeAgents": [
{
"id": "declarativeAgent",
"file": "declarativeAgent.${{AGENT_VARIANT}}.json"
}
]
}
}
Konfigurieren m365agents.ymlSie den Paketschritt so, dass er im Namen des Ausgabeartefakts enthalten ist ${{TEAMSFX_ENV}} , sodass jede Umgebung eine eigene ZIP-Datei erzeugt:
provision:
- uses: teamsApp/zipAppPackage
with:
manifestPath: ./appPackage/manifest.json
outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip
outputFolder: ./appPackage/build
Wenn AGENT_VARIANT=v1, wird der Build in declarativeAgent.v1.jsonaufgelöst. Wenn AGENT_VARIANT=v2, wird es aufgelöst in declarativeAgent.v2.json. Beide Dateien werden im Repository gespeichert und wie jede andere Quelldatei in Pull Requests überprüft, ohne dass Featureflags erforderlich sind.
Da der Ausgabe-ZIP-Pfad ${{TEAMSFX_ENV}}enthält, erzeugt jede Umgebung ein Artefakt mit eindeutig benanntem Namen. Beispielsweise werden appPackage.prod.zip unabhängig voneinander geschrieben ./appPackage/build/ und appPackage.prod-v2.zip überschreiben sich niemals.
Automatisieren von Bereitstellungen mit CI/CD
Um dieses Muster über alle Umgebungen hinweg zu skalieren, verwenden Sie eine Matrix in GitHub Actions oder Azure DevOps, um jede Umgebung über einen einzelnen Workflow bereitzustellen:
strategy:
matrix:
include:
- target: dev
secret_name: AAD_SECRET_DEV
- target: staging
secret_name: AAD_SECRET_STAGING
- target: prod
secret_name: AAD_SECRET_PROD
- target: prod-v2
secret_name: AAD_SECRET_PROD_V2
steps:
- uses: actions/checkout@v4
- run: npm install -g @microsoft/m365agentstoolkit-cli
- run: atk provision --env ${{ matrix.target }}
env:
SECRET_AAD_CLIENT_SECRET: ${{ secrets[matrix.secret_name] }}
- run: atk deploy --env ${{ matrix.target }}
Jeder Matrixauftrag lädt die richtige .env.* Datei und ruft sein Geheimnis aus dem explizit zugeordneten GitHub-Geheimnis ab. Die explizite Zuordnung ist erforderlich, da geheime GitHub-Namen nur Großbuchstaben, Ziffern und Unterstriche zulassen (z. B. kann ein Zielname nicht prod-v2 direkt als Geheimnisname verwendet werden). Mit dieser Konfiguration wird die Bereitstellung einer Änderung in der Produktion nach dem Staging zu einem Workflow-Trigger und nicht zu einem manuellen Schritt.
Warnung
Speichern Sie keine Produktionsgeheimnisse in .env.prod. Verwenden Sie .env.prod.user diese Funktion für die lokale Entwicklung und Ihren CI/CD-Geheimnisspeicher für Pipelineausführungen. Stellen Sie sicher, dass die .user Dateien ausgeschlossen werden .gitignore und nie übertragen werden. Ihre CI/CD-Pipeline sollte zur Laufzeit Variablen einfügen SECRET_* .
Namenskonvention
Verwenden Sie die folgende Namenskonvention für Ihre Umgebungsdateien.
| Muster | Beschreibung |
|---|---|
.env.<target> |
Mandant oder Phase: Entwicklung, Staging, Produktion |
.env.<target>-<variant> |
Version oder Branch innerhalb eines Ziels: prod-v2, prod-experimental |
.env.<target>.user |
Geheime Schlüssel für dieses Ziel, nie festgelegt |
.env.local |
Agents Toolkit-Konfiguration im Projektstamm (wird während der Bereitstellung automatisch generiert) |
Durch diese Konvention wird der env/ Ordner selbstdokumentierend. Jedes Teammitglied kann bestimmen, welche Umgebungen vorhanden sind und worauf sie jeweils abzielen.
Vorteile dieses Ansatzes
Der Wechsel von einem Manifest pro Umgebung zu einem Repository mit vielen Umgebungsdateien ändert die Arbeitsweise Ihres Teams:
- Parallele Versionen ohne Codeduplizierung: Stellen Sie v1 und v2 für denselben Produktionsmandanten für Pilotprojekte mit realen Benutzern bereit, ohne Ihre Codebasis zu forken.
-
Höherstufung mit einem Befehl: Das Bestehen
--env prodist der vollständige Beförderungsschritt. Es sind keine Dateibearbeitungen oder manuellen Schritte zum Zusammenführen erforderlich. - Konsistentes CI/CD in allen Umgebungen: Ein einziger Workflow bewältigt jede Umgebung mit identischen Schritten, wodurch Konfigurationsabweichungen zwischen Entwicklung und Produktion vermieden werden.
-
Vereinfachtes Onboarding: Ein neues Teammitglied kann beginnen, indem
.env.dev.useres . Es sind keine Manifeständerungen erforderlich. -
Überwachbare Umgebungen: Jede Umgebung verfügt über eine einzige Source-of-Truth-Datei. Compare, was sich zwischen
produndprod-v2geändert hat, ist ein Diff zweier Dateien.
Dieser Ansatz behandelt sowohl Zielumgebungen als auch Agentversionen als Bereitstellungsziele, wobei durchgehend dieselben Tools und Konventionen verwendet werden.