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 weiterentwickelt wird, 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 stören. Die Verwaltung eines separaten Satzes von Manifestdateien für jede Umgebungs- und Versionskombination wird nicht skaliert.
Das Microsoft 365 Agents Toolkit erfüllt beide Anforderungen( Zielumgebung und Agentversion) mit demselben Mechanismus: Umgebungsdateien. Indem Sie eine .env.* Datei pro Bereitstellungsziel definieren und ${{VAR_NAME}} Platzhalter im gesamten Manifest, in der deklarativen Agent-Datei und m365agents.ymlverwenden, können Sie jede Umgebung oder Version mit einem einzelnen Befehl bereitstellen,atk provision --env <target> ohne eine einzelne Datei zu duplizieren.
Zwei Achsen, ein System
Die Umgebungsverwaltung für deklarative Agents hat zwei Dimensionen:
- Zielumgebungen: Derselbe Agent, der für verschiedene Mandanten oder App-Registrierungen bereitgestellt wird – Entwicklung, Staging, Produktion oder kundenspezifische Mandanten.
- Agent-Versionen: Mehrere Varianten desselben Agents werden parallel ausgeführt, z. B. "v1 stable", "v2 preview" oder ein experimenteller Branch.
Beide Dimensionen werden auf die gleiche Weise behandelt. Sie definieren eine Umgebungsdatei für jedes Bereitstellungsziel sowie die ${{VAR_NAME}} Platzhalter in Ihrem Manifest, die Deklarative Agent-Datei und m365agents.yml lösen sie zum Zeitpunkt der Bereitstellung auf.
Modellzielumgebungen
Die meisten Teams werden in mindestens zwei Umgebungen ( Entwicklung und Produktion) bereitgestellt, 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
Fügen Sie den Umgebungsnamen in den Anzeigenamen des Agents für Nicht-Produktionsmandanten ein. Beispielsweise macht "HR Onboarding Buddy (Staging)" 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 Agent 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 Umgebung hinzu prod-v2 :
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 gleichzeitig im selben Mandanten vorhanden sein 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
Verwenden Sie Variablen in Ihrem 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 installierbare Apps im selben Mandanten erzeugt. Benutzer, die die Vorschauinstallation erhalten haben, sehen v2; alle anderen Benutzer bleiben auf v1.
Hinweis
Die Teams-App-ID ist der Schlüssel zu diesem Muster. Die Plattform behandelt Apps mit unterschiedlichen IDs als separate Installationen, unabhängig davon, wie viel Code sie gemeinsam nutzen. Diese Trennung ermöglicht auch A/B-Tests von Agent-Personas ohne Auswirkungen auf Produktionsbenutzer.
Verzweigen der Agent-Definition selbst
Wenn Versionsunterschiede über Variablenwerte hinausgehen (z. B. unterschiedliche Anweisungen, eine neue Funktion oder eine andere Gruppe von Plug-Ins), haben Sie zwei Optionen zum Verzweigen der Agent-Definition selbst.
Option A: Behalten Sie einen einzelnen Wert declarativeAgent.json bei, und verwenden Sie Variablen für die werte, die sich unterscheiden. Dieser Ansatz funktioniert gut, wenn die Unterschiede geringfügig sind, z. B. ein anderer Anweisungsabsatz oder eine andere SharePoint-Website-URL.
Option B: Verwalten Sie eine separate deklarative Agent-Datei pro Version, und verweisen Sie darauf über eine Variable im Teams-App-Manifest:
{
"copilotAgents": {
"declarativeAgents": [
{
"id": "declarativeAgent",
"file": "declarativeAgent.${{AGENT_VARIANT}}.json"
}
]
}
}
m365agents.ymlKonfigurieren Sie in den Paketschritt so, dass er in den Ausgabeartefaktnamen einschließt${{TEAMSFX_ENV}}, damit 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
Bei AGENT_VARIANT=v1wird der Build in declarativeAgent.v1.jsonaufgelöst. Wenn AGENT_VARIANT=v2, wird es in declarativeAgent.v2.jsonaufgelöst. Beide Dateien werden im Repository gespeichert und wie jede andere Quelldatei in Pull Requests überprüft, ohne dass Featureflags erforderlich sind.
Da der ZIP-Ausgabepfad enthält ${{TEAMSFX_ENV}}, erzeugt jede Umgebung ein eindeutig benanntes Artefakt. Beispielsweise appPackage.prod.zip werden und appPackage.prod-v2.zip unabhängig voneinander ./appPackage/build/ geschrieben und überschreiben sich nie gegenseitig.
Automatisieren von Bereitstellungen mit CI/CD
Um dieses Muster in allen Umgebungen zu skalieren, verwenden Sie eine Matrix in GitHub Actions oder Azure DevOps, um jede Umgebung aus einem 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 GitHub-Geheimnisnamen nur Großbuchstaben, Ziffern und Unterstriche zulassen (z. B. kann ein Zielname wie prod-v2 nicht direkt als Geheimnisname verwendet werden). Mit dieser Konfiguration wird das Höherstufen einer Änderung vom Staging zur Produktion zu einem Workflowtrigger und nicht zu einem manuellen Schritt.
Warnung
Speichern Sie keine Produktionsgeheimnisse in .env.prod. Verwenden Sie .env.prod.user für die lokale Entwicklung und Ihren CI/CD-Geheimnisspeicher für Pipelineausführungen. Stellen Sie sicher, dass die .user Dateien von .gitignore ausgeschlossen und nie committet werden. Ihre CI/CD-Pipeline sollte Variablen zur Laufzeit 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 |
Geheimnisse für dieses Ziel, nie committet |
.env.local |
Konfiguration des Agents-Toolkits im Projektstamm (automatisch während der Bereitstellung generiert) |
Durch diese Konvention wird der env/ Ordner selbstdokumentiert. Jedes Teammitglied kann bestimmen, welche Umgebungen vorhanden sind und auf welche Ziele die einzelnen Umgebungen ausgerichtet sind.
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 im selben Produktionsmandanten für Realbenutzerpiloten bereit, ohne Ihre Codebasis zu forkingen.
-
Höherstufung mit nur einem Befehl: Das Übergeben
--env prodist der vollständige Heraufstufungsschritt. Es sind keine Dateibearbeitungen oder manuelle Zusammenführungsschritte erforderlich. - Konsistente CI/CD über Umgebungen hinweg: Ein einzelner Workflow verarbeitet jede Umgebung mit identischen Schritten, wodurch Konfigurationsabweichungen zwischen Entwicklung und Produktion vermieden werden.
-
Vereinfachtes Onboarding: Ein neues Teammitglied kann beginnen, indem es ausgefüllt
.env.dev.userwird. Es sind keine Manifeständerungen erforderlich. -
Überprüfbare Bereitstellungen: Jede Umgebung verfügt über eine einzelne Source-of-Truth-Datei. Der Vergleich der Änderungen zwischen
produndprod-v2ist eine diff von zwei Dateien.
Bei diesem Ansatz werden sowohl Zielumgebungen als auch Agent-Versionen als Bereitstellungsziele behandelt, wobei die gleichen Tools und Konventionen verwendet werden.