Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure DevOps Services
In deze zelfstudie leert u hoe u Azure Pipelines gebruikt voor continue integratie en continue levering (CI/CD) om een Python-web-app te bouwen en implementeren in Azure App Service op Linux. Uw pijplijn bouwt en implementeert uw Python-web-app automatisch in App Service wanneer er een doorvoering is in uw app-codeopslagplaats.
In deze handleiding leert u:
- Maak een Python-web-app en upload deze naar Azure App Service.
 - Verbind uw Azure DevOps-project met Azure.
 - Maak een Python-specifieke build- en implementatiepijplijn voor Azure Pipelines voor uw app.
 - Voer de pijplijn uit om uw Azure App Service-web-app te bouwen, testen en implementeren.
 - Stel een trigger in om de pijplijn uit te voeren wanneer u zich doorvoert naar uw opslagplaats.
 
Bekijk de volgende video voor meer informatie over concepten van Azure Pipelines:
Vereisten
| Product | vereisten | 
|---|---|
| Azure DevOps | - Een Azure DevOps-project. - De mogelijkheid om pijplijnen uit te voeren op agents gehost door Microsoft. U kunt een parallelle taak aanschaffen of u kunt een gratis laag aanvragen. - Basiskennis van YAML en Azure Pipelines. Zie Uw eerste pijplijn makenvoor meer informatie. - Toestemmingen: - Als u een pijplijn wilt maken: u moet zich in de groep Inzenders bevinden en de groep moet de machtiging Maak een build-pijplijn hebben ingesteld op Toestaan. Leden van de groep Projectbeheerders kunnen pijplijnen beheren. - Als u serviceverbindingen wilt maken: u moet de Administrator- of Creator- rol hebben voor serviceverbindingen.  | 
| GitHub | - Een GitHub-account.  - Een GitHub-serviceverbinding om Azure Pipelines te autoriseren.  | 
| Azuur | Een Azure-abonnement. | 
| Product | vereisten | 
|---|---|
| Azure DevOps | - Een Azure DevOps-project. - Een zelf-hostende agent. Om er een te maken, zie Zelfgehoste agents. - Basiskennis van YAML en Azure Pipelines. Zie Uw eerste pijplijn makenvoor meer informatie. - Toestemmingen: - Als u een pijplijn wilt maken: u moet zich in de groep Inzenders bevinden en de groep moet de machtiging Maak een build-pijplijn hebben ingesteld op Toestaan. Leden van de groep Projectbeheerders kunnen pijplijnen beheren. - Als u serviceverbindingen wilt maken: u moet de Administrator- of Creator- rol hebben voor serviceverbindingen.  | 
| GitHub | - Een GitHub-account.  - Een GitHub-serviceverbinding om Azure Pipelines te autoriseren.  | 
| Azuur | Een Azure-abonnement. | 
Een zelf-hostende agent configureren
Het downloaden van Python-versies wordt niet ondersteund op zelf-hostende buildagents. Als u uw eigen zelf-hostende agent wilt gebruiken, moet u de agent configureren om Python uit te voeren.
Om compatibiliteitsproblemen te voorkomen, moet u in dit geval overeenkomen met de Python-versie met de runtimeversie in uw Azure App Services-web-app 3.11 . U moet de Python-versie vooraf installeren. Gebruik het volledige installatieprogramma om een pip-compatibele versie van Python op te halen.
De gewenste Python-versie moet worden toegevoegd aan de cache van het hulpprogramma op de zelf-hostende agent, zodat de pijplijntaak deze kan gebruiken. Normaal gesproken bevindt de cache van het hulpprogramma zich onder de map _work/_tool van de agent. U kunt ook het pad overschrijven met de omgevingsvariabele AGENT_TOOLSDIRECTORY. Maak onder de map hulpprogramma's de volgende mapstructuur op basis van uw Python-versie:
$AGENT_TOOLSDIRECTORY/
    Python/
        {version number}/
            {platform}/
                {tool files}
            {platform}.complete
Het versienummer moet de notatie 1.2.3 volgen. Het platform moet x86 of x64 zijn. De hulpprogrammabestanden moeten de uitgepakte Python-versiebestanden zijn. Het {platform}.complete moet een 0-byte-bestand zijn dat eruitziet als x86.complete of x64.complete en duidt erop dat het hulpprogramma correct is geïnstalleerd in de cache.
Als u bijvoorbeeld Python 3.11 wilt gebruiken op een 64-bits Windows-computer, maakt u de volgende mapstructuur:
$AGENT_TOOLSDIRECTORY/
    Python/
        3.11.4/
            x64/
                {python files}
            x64.complete
Als de computer die als host fungeert voor uw agent al de Python-versie heeft die u wilt gebruiken, kunt u de bestanden kopiëren naar de cache van het hulpprogramma. Als u niet over de Python-versie beschikt, kunt u deze downloaden vanaf de Python-website.
De voorbeeld-app voorbereiden
Fork de voorbeeldopslagplaats in https://github.com/Microsoft/python-sample-vscode-flask-tutorial uw GitHub-account.
Kloon uw fork naar uw lokale computer met behulp van
git clone <your-forked-repository-url>.git.Ga naar uw lokale kloon met behulp van
cd python-sample-vscode-flask-tutorialen bouw en voer de app lokaal uit om te controleren of deze werkt.python -m venv .env source .env/Scripts/activate pip install --upgrade pip pip install -r ./requirements.txt export FLASK_APP=hello_app.webapp flask runAls u de app wilt testen, gaat u naar http://localhost:5000 een browservenster en controleert u of u de titel Visual Studio Flask-zelfstudie ziet.
Sluit het browservenster en stop de Flask-server met Ctrl+C.
De App Service-web-app maken en implementeren
Maak uw Azure App Service-web-app met behulp van Cloud Shell in Azure Portal. Als u Cloud Shell wilt gebruiken, meldt u zich aan bij Azure Portal en selecteert u de knop Cloud Shell op de werkbalk.
              
              
              
              
            
De Cloud Shell wordt onder aan de browser weergegeven. Zorg ervoor dat Bash is geselecteerd als de omgeving in de vervolgkeuzelijst. U kunt het Cloud Shell-venster maximaliseren om uzelf meer ruimte te geven.
              
              
              
              
            
Aanbeveling
Als u in Cloud Shell wilt plakken, gebruikt u Ctrl+Shift+V of klikt u met de rechtermuisknop en selecteert u Plakken in het contextmenu.
De web-app maken en implementeren
Kloon in Cloud Shell uw geforkte opslagplaats naar Azure door de volgende opdracht te vervangen door
<your-forked-repository-url>de URL van uw geforkte opslagplaats.git clone <your-forked-repository-url>Wijzig de map in de gekloonde opslagplaatsmap.
cd python-sample-vscode-flask-tutorialVoer de opdracht az webapp up uit om de App Service-web-app in te richten en voer de eerste implementatie uit. Gebruik de
--name <your-web-app-name>parameter om een naam toe te wijzen die uniek is in Azure, zoals een persoonlijke of bedrijfsnaam, samen met een app-id, zoals--name <your-name>-flaskpipelines. Als u geen parameters uitvoertaz webapp up, wordt een willekeurig gegenereerde web-app-naam toegewezen die uniek is in Azure.az webapp up --name <your-web-app-name>
De az webapp up opdracht herkent de app als een Python-app en voert de volgende acties uit:
- Hiermee maakt u een standaardresourcegroep.
 - Hiermee maakt u een standaard App Service-plan.
 - 
              Hiermee maakt u een web-app met de toegewezen naam. De app 
URLis<your-web-app-name>.azurewebsites.net. - Hiermee worden alle bestanden uit de huidige werkmap geïmplementeerd in een ZIP-archief, waarbij buildautomatisering is ingeschakeld.
 - Slaat de parameters lokaal op in het .azure/config-bestand , zodat u ze niet opnieuw hoeft op te geven bij het implementeren vanuit de projectmap met 
az webapp upof andereaz webappopdrachten. De opdrachten gebruiken standaard automatisch de waarden in de cache. 
U kunt de standaardacties overschrijven met uw eigen waarden met behulp van de opdrachtparameters. Zie az webapp up voor meer informatie.
De az webapp up opdracht produceert de volgende JSON-uitvoer voor de voorbeeldweb-app:
{
  "URL": <your-web-app-url>,
  "appserviceplan": <your-app-service-plan-name>,
  "location": <your-azure-region>,
  "name": <your-web-app-name>,
  "os": "Linux",
  "resourcegroup": <your-resource-group>,
  "runtime_version": "python|3.11",
  "runtime_version_detected": "-",
  "sku": <sku>,
  "src_path": <repository-source-path>
}
Noteer de URLwaarden resourcegroupen runtime_version waarden die verderop in deze zelfstudie moeten worden gebruikt.
De opstartopdracht instellen
De python-sample-vscode-flask-tutorial-app heeft een startup.txt-bestand dat de specifieke opstartopdracht voor de web-app bevat. Stel de configuratie-eigenschap startup-file van de web-app startup.txt in op door de volgende opdracht in te voeren met behulp van de namen van uw resourcegroep en web-app.
az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
Wanneer de opdracht is voltooid, worden in de JSON-uitvoer alle configuratie-instellingen voor uw web-app weergegeven.
Als u de actieve app wilt zien, opent u een browser en gaat u naar de URL weergegeven in de az webapp up opdrachtuitvoer. Als u een algemene pagina ziet, wacht u enkele seconden totdat de App Service is gestart en vernieuwt u de pagina. Controleer of u de titel Visual Studio Flask-zelfstudie ziet.
Uw Azure DevOps-project verbinden met uw Azure-abonnement
Als u Azure Pipelines wilt gebruiken om te implementeren in uw Azure App Service-web-app, moet u uw Azure DevOps-project verbinden met uw Azure-resources.
Een service-principal maken
Een service-principal is een identiteit die is gemaakt voor toepassingen, gehoste services en geautomatiseerde hulpprogramma's voor toegang tot Azure-resources. Deze toegang is beperkt tot de rollen die zijn toegewezen aan de service-principal, zodat u bepaalt welke resources op welk niveau kunnen worden geopend.
Voer de volgende opdracht uit in Bash Cloud Shell om een service-principal te maken. Vervang <service-principal-name> door een naam voor uw service-principal, <your-subscription-id> door uw Azure-abonnements-id en <your-resource-group> door de resourcegroep voor de web-app.
az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>
De opdracht retourneert het volgende JSON-object:
{
  "appId": "<client GUID>",
  "displayName": "<service-principal-name">,
  "password": "<password-string>",
  "tenant": "<tenant GUID>"
  ...
}
Noteer de appId, passworden tenantId waarden die u wilt gebruiken voor het maken van een serviceverbinding in de volgende sectie.
Een serviceverbinding maken
Een serviceverbinding biedt geverifieerde toegang vanuit Azure Pipelines naar externe en externe services. Als u wilt implementeren in uw Azure App Service-web-app, maakt u een serviceverbinding met de resourcegroep voor uw web-app.
Selecteer Project-instellingen op uw Azure DevOps-projectpagina.
Selecteer in Projectinstellingenpijplijnserviceverbindingen>.
Selecteer op de pagina Serviceverbindingen de optie Nieuwe serviceverbinding of Serviceverbinding maken als deze serviceverbinding de eerste is in het project.
              
              
            
Selecteer Azure Resource Manager in het scherm Nieuwe serviceverbinding en selecteer vervolgens Volgende.
              
              
            
Selecteer uw identiteitstype in het scherm Nieuwe Azure-serviceverbinding. In dit voorbeeld wordt app-registratie (automatisch) gebruikt. Dit wordt aanbevolen. Zie Verbinding maken met Azure met behulp van een Azure Resource Manager-serviceverbinding voor meer informatie over verificatiemethoden.
Selecteer voor Referentiede federatie van workloadidentiteit (automatisch).
Vul de volgende velden in:
- Bereikniveau: Selecteer Abonnement.
 - Abonnement: selecteer uw Azure-abonnement.
 - Resourcegroep: Selecteer de resourcegroep die uw web-app bevat.
 - Serviceverbindingsnaam: voer een beschrijvende naam in voor de verbinding.
 - Toegangsmachtigingen verlenen aan alle pijplijnen: schakel dit selectievakje in om toegang te verlenen tot alle pijplijnen in het project.
 
Selecteer Opslaan.
              
              
            
Selecteer Project-instellingen op uw Azure DevOps-projectpagina.
Selecteer in Projectinstellingenpijplijnserviceverbindingen>.
Selecteer op de pagina Serviceverbindingen de optie Nieuwe serviceverbinding of Serviceverbinding maken als deze serviceverbinding de eerste is in het project.
              
              
            
Selecteer Azure Resource Manager in het scherm Nieuwe serviceverbinding en selecteer vervolgens Volgende.
              
              
            
Selecteer Service-principal (handmatig) en selecteer vervolgens Volgende.
              
              
            
Vul in het scherm Verbinding met de nieuwe Azure-service de volgende velden in:
- Omgeving: Selecteer Azure Cloud.
 - Bereikniveau: Selecteer Abonnement.
 - Abonnements-id: voer uw Azure-abonnements-id in.
 - Abonnementsnaam: voer de naam van uw Azure-abonnement in.
 
Vul in de sectie Verificatie de volgende velden in:
- 
              Service-principal-id: voer de 
appIdwaarde in die wordt geretourneerd door deaz ad sp create-for-rbacopdracht. - Referentie: selecteer service-principalsleutel.
 - 
              Sleutel van de service-principal: voer de 
passwordwaarde in die wordt geretourneerd door deaz ad sp create-for-rbacopdracht. - 
              Tenant-id: voer de 
tenantwaarde in die wordt geretourneerd door deaz ad sp create-for-rbacopdracht. - Selecteer Verifiëren om de verbinding te verifiëren.
 
- 
              Service-principal-id: voer de 
 Voer in de sectie Details , onder Naam van serviceverbinding, een naam in voor de serviceverbinding.
Schakel het selectievakje in voor Het verlenen van toegangsmachtigingen voor alle pijplijnen.
Selecteer Verifiëren en opslaan.
              
              
            
De nieuwe verbinding wordt weergegeven in de lijst met serviceverbindingen en is klaar voor gebruik in uw pijplijn.
Een pipeline maken
Maak een pijplijn om uw Python-web-app te bouwen en te implementeren in Azure-app Service.
Selecteer Pijplijnen in het linkernavigatiemenu voor uw project.
Selecteer op de pagina Pijplijnende optie Nieuwe pijplijn of Pijplijn maken als deze pijplijn de eerste is in het project.
              
              
            
Selecteer GitHub in het scherm Waar is uw code. Mogelijk wordt u gevraagd u aan te melden bij GitHub.
              
              
            
Op het scherm Select a repository, selecteert u uw geforkte voorbeeldrepository. GitHub vraagt u mogelijk om uw GitHub-wachtwoord opnieuw in te voeren of om de GitHub-app Azure Pipelines te installeren. Volg de instructies op het scherm om de app te installeren. Zie GitHub-app-verificatie voor meer informatie.
              
              
            
Selecteer Op de pagina Uw pijplijn configurerenPython naar Linux-web-app in Azure.
Selecteer in het volgende scherm uw Azure-abonnement en selecteer Doorgaan.
Selecteer in het volgende scherm uw Azure-web-app en selecteer Valideren en configureren.
Azure Pipelines maakt een azure-pipelines.yml bestand en geeft dit weer in de YAML-pijplijneditor.
Selecteer Pijplijnen in het linkernavigatiemenu voor uw project.
Selecteer op de pagina Pijplijnende optie Nieuwe pijplijn of Pijplijn maken als deze pijplijn de eerste is in het project.
              
              
            
Selecteer GitHub Enterprise Server op de pagina Waar is de code. Mogelijk wordt u gevraagd u aan te melden bij GitHub.
              
              
            
Selecteer op het tabblad Een opslagplaats selecteren uw geforkte voorbeeldopslagplaats. GitHub vraagt u mogelijk om uw GitHub-wachtwoord opnieuw in te voeren of de GitHub-extensie of app van Azure Pipelines te installeren. Volg de instructies op het scherm om de app te installeren. Zie Toegang tot GitHub-opslagplaatsen voor meer informatie.
              
              
            
Selecteer Starter-pijplijn op de pagina Uw pijplijn configureren.
Vervang op de pagina Uw pijplijn YAML controleren de inhoud van het startersbestand azure-pipelines.yml door het volgende YAML-pijplijnbestand. In het YAML-bestand:
Vervang de
<your-service-connection-name>tijdelijke aanduidingen door<your-web-app-name>uw eigen waarden.Vervang
<your-pool-name>door de naam van de agentgroep die u wilt gebruiken en vervang door<your-python-version>de versie van Python die wordt uitgevoerd op uw agent. Deze versie moet overeenkomen met deruntime_versionJSON-uitvoer van deaz webapp upopdracht.
YAML-pijplijnbestand
Bekijk op de pagina Uw pijplijn YAML controleren de pijplijn om te zien wat deze doet. Zorg ervoor dat alle standaardinvoer geschikt is voor uw code. Zie de YAML-schemareferentie voor het YAML-schema voor meer informatie over het YAML-bestandsschema.
In het volgende volledige voorbeeld van een YAML-pijplijnbestand wordt uw CI/CD-pijplijn gedefinieerd als een reeks fasen, taken en stappen, waarbij elke stap de details voor verschillende taken en scripts bevat. De gegenereerde YAML-code vult automatisch de tijdelijke aanduidingen in met waarden voor uw app en verbinding.
trigger:
- main
variables:
  # Azure Resource Manager connection created during pipeline creation
  azureServiceConnectionId: '<GUID>'
  # Web app name
  webAppName: '<your-webapp-name>'
  # Agent VM image name
  vmImageName: 'ubuntu-latest'
  # Environment name
  environmentName: '<your-webapp-name>'
  # Project root folder. Point to the folder containing manage.py file.
  projectRoot: $(System.DefaultWorkingDirectory)
  pythonVersion: '3.11'
stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: BuildJob
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: UsePythonVersion@0
      inputs:
        versionSpec: '$(pythonVersion)'
      displayName: 'Use Python $(pythonVersion)'
    - script: |
        python -m venv antenv
        source antenv/bin/activate
        python -m pip install --upgrade pip
        pip install setuptools
        pip install -r requirements.txt
      workingDirectory: $(projectRoot)
      displayName: "Install requirements"
    - task: ArchiveFiles@2
      displayName: 'Archive files'
      inputs:
        rootFolderOrFile: '$(projectRoot)'
        includeRootFolder: false
        archiveType: zip
        archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
        replaceExistingArchive: true
    - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
      displayName: 'Upload package'
      artifact: drop
- stage: Deploy
  displayName: 'Deploy Web App'
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: DeploymentJob
    pool:
      vmImage: $(vmImageName)
    environment: $(environmentName)
    strategy:
      runOnce:
        deploy:
          steps:
          - task: UsePythonVersion@0
            inputs:
              versionSpec: '$(pythonVersion)'
            displayName: 'Use Python version'
          - task: AzureWebApp@1
            displayName: 'Deploy Azure Web App : $(webAppName)'
            inputs:
              azureSubscription: $(azureServiceConnectionId)
              appName: $(webAppName)
              package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
trigger:
- main
variables:
  # Azure Resource Manager connection created during pipeline creation
  azureServiceConnectionId: '<your-service-connection-name>'
  # Web app name
  webAppName: '<your-web-app-name>'
  # Environment name
  environmentName: '<your-web-app-name>'
  # Project root folder. 
  projectRoot: $(System.DefaultWorkingDirectory)
  # Python version: 
  pythonVersion: '<your-python-version>'
stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: BuildJob
pool:
      name: '<your-pool-name>'
      demands: python
    steps:
    - task: UsePythonVersion@0
      inputs:
        versionSpec: '$(pythonVersion)'
      displayName: 'Use Python $(pythonVersion)'
    - script: |
        python -m venv antenv
        source antenv/bin/activate
        python -m pip install --upgrade pip
        pip install -r requirements.txt
      workingDirectory: $(projectRoot)
      displayName: "Install requirements"
    - task: ArchiveFiles@2
      displayName: 'Archive files'
      inputs:
        rootFolderOrFile: '$(projectRoot)'
        includeRootFolder: false
        archiveType: zip
        archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
        replaceExistingArchive: true
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
- stage: Deploy
  displayName: 'Deploy Web App'
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: DeploymentJob
    pool:
      name: '<your-pool-name'
    environment: $(environmentName)
    strategy:
      runOnce:
        deploy:
          steps:
          - task: UsePythonVersion@0
            inputs:
              versionSpec: '$(pythonVersion)'
            displayName: 'Use Python version'
          - task: AzureWebApp@1
            displayName: 'Deploy Azure Web App : <your-web-app-name>'
            inputs:
              azureSubscription: $(azureServiceConnectionId)
              appName: $(webAppName)
              package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
              startUpCommand: 'startup.txt'
Variabelen
De variables sectie aan het begin van het YAML-bestand definieert de volgende variabelen:
| Veranderlijk | Beschrijving | 
|---|---|
azureServiceConnectionId | 
De id van de Azure Resource Manager-serviceverbinding. | 
webAppName | 
De naam van de App Service-web-app. | 
vmImageName | 
De naam van het besturingssysteem dat moet worden gebruikt voor de buildagent. | 
environmentName | 
De naam van de omgeving waarnaar moet worden geïmplementeerd, die automatisch wordt gemaakt wanneer de implementatietaak wordt uitgevoerd. | 
projectRoot | 
De hoofdmap met de app-code. | 
pythonVersion | 
De versie van Python die moet worden gebruikt voor de build- en implementatieagents. | 
| Veranderlijk | Beschrijving | 
|---|---|
azureServiceConnectionId | 
De id van de Azure Resource Manager-serviceverbinding. | 
webAppName | 
De naam van de App Service-web-app. | 
environmentName | 
De naam van de omgeving waarnaar moet worden geïmplementeerd, die automatisch wordt gemaakt wanneer de implementatietaak wordt uitgevoerd. | 
projectRoot | 
De map met de app-code. De waarde is een automatische systeemvariabele. | 
pythonVersion | 
De versie van Python die moet worden gebruikt voor de build- en implementatieagents. | 
Fasen voor bouwen en implementeren
De pijplijn bestaat uit build- en implementatiefasen.
Buildfase
De buildfase bevat één taak die wordt uitgevoerd op het besturingssysteem dat in de vmImageName variabele is gedefinieerd, in dit geval ubuntu-latest.
  - job: BuildJob
    pool:
      vmImage: $(vmImageName)
De buildfase bevat één taak die wordt uitgevoerd op een agent in de pool parameter die wordt geïdentificeerd.name
U kunt de agentmogelijkheden opgeven met het demands trefwoord. Hiermee geeft u bijvoorbeeld demands: python op dat de agent Python moet hebben geïnstalleerd. Als u een zelf-hostende agent op naam wilt opgeven, kunt u gebruiken demands: Agent.Name -equals <agent-name>.
  - job: BuildJob
    pool:
      name: <your-pool-name>
      demands: python
De taak bevat meerdere stappen:
Eerst selecteert de usePythonVersion-taak de versie van Python die moet worden gebruikt, zoals gedefinieerd in de
pythonVersionvariabele.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'In de volgende stap wordt een script gebruikt waarmee een virtuele Python-omgeving wordt gemaakt en de afhankelijkheden van de app worden geïnstalleerd.
requirements.txtDeworkingDirectoryparameter geeft de locatie van de app-code op.- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setuptools pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"Met de taak ArchiveFiles maakt u een ZIP-archief dat de ingebouwde web-app bevat.
- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: trueDe parameters worden als volgt ingesteld:
Parameter Beschrijving rootFolderOrFileDe locatie van de app-code. includeRootFolderOf de hoofdmap moet worden opgenomen in het .zip-bestand . Ingesteld op false. Als deze optie is ingesteldtrue, wordt de inhoud van het .zip-bestand in een map met de namen geplaatst en kan de taak de app-code niet vinden.archiveTypeHet type archief dat moet worden gemaakt. Ingesteld op zip.archiveFileDe locatie van het .zip-bestand dat u wilt maken. replaceExistingArchiveGeeft aan of een bestaand archief moet worden vervangen als het bestand al bestaat. Ingesteld op true.Het
.zipbestand uploadt vervolgens naar de pijplijn als een artefact met de naamdrop. In de implementatiefase wordt het .zip-bestand gebruikt om de app te implementeren.- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop- Met 
uploadde parameter wordt de locatie en naam van het .zip-bestand ingesteld dat moet worden geüpload. - Met 
artifactde parameter wordt de naam van het gemaakte artefact ingesteld opdrop. 
- Met 
 
Implementatiefase
De implementatiefase wordt uitgevoerd als de buildfase is voltooid. De dependsOn en condition trefwoorden definiëren dit gedrag.
  dependsOn: Build
  condition: succeeded()
De implementatiefase bevat één implementatietaak die als volgt is geconfigureerd.
  - deployment: DeploymentJob
    pool:
      vmImage: $(vmImageName)
    environment: $(environmentName)
Het
deploymenttrefwoord geeft aan dat de taak een implementatietaak is die gericht is op een omgeving waarnaar moet worden geïmplementeerd. Deenvironmenttaak wordt automatisch gemaakt in uw project wanneer de taak wordt uitgevoerd.De
poolparameter geeft de implementatieagentgroep op en gebruikt de standaardagentgroep als ernamegeen is opgegeven. De agent wordt uitgevoerd op het besturingssysteem dat is gedefinieerd in devmImageNamevariabele, in dit gevalubuntu-latest.
  - deployment: DeploymentJob
    pool:
      name: <your-pool-name>
    environment: $(environmentName)
Het
deploymenttrefwoord geeft aan dat de taak een implementatietaak is die gericht is op een omgeving waarnaar moet worden geïmplementeerd. Deenvironmenttaak wordt automatisch gemaakt in uw project wanneer de taak wordt uitgevoerd.De
poolparameter geeft de implementatieagentgroep op en moet een agent bevatten met de mogelijkheid om de Python-versie uit te voeren die is opgegeven in de pijplijn.
Het strategy trefwoord definieert de implementatiestrategie.
  strategy:
    runOnce:
      deploy:
        steps:
- Het 
runOncetrefwoord geeft aan dat de implementatietaak eenmaal wordt uitgevoerd. - Het 
deploytrefwoord geeft destepsuitvoering in de implementatietaak op. 
Voer steps in deze fase de volgende taken uit:
- UsePythonVersion@0 selecteert de versie van Python die u wilt gebruiken, hetzelfde als in de buildfase.
 - 
              AzureWebApp@1 implementeert de web-app en het 
dropZIP-artefact. 
- task: AzureWebApp@1
    displayName: 'Deploy Azure Web App : <your-web-app-name>'
  inputs:
    azureSubscription: $(azureServiceConnectionId)
    appName: $(webAppName)
    package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
- De 
azureSubscriptionparameter bevat deazureServiceConnectionIdopgegeven in de pijplijnvariabelen. - De 
appNamewaarde van dewebAppNamevariabele bevat. - Hiermee 
packagegeeft u de naam en locatie op van het .zip-bestand dat moet worden geïmplementeerd. 
Omdat de opslagplaats python-vscode-flask-tutorial de opdracht voor het opstarten van de app bevat in een bestand met de naam startup.txt, kunt u de opdracht voor het opstarten van de app opgeven door de parameter toe te voegen: startUpCommand: 'startup.txt'.
De pijplijn uitvoeren
U bent nu klaar om de pijplijn uit te proberen.
Selecteer Opslaan en uitvoeren in de pijplijneditor.
Voeg desgewenst in het scherm Opslaan en uitvoeren een doorvoerbericht toe en selecteer Opslaan en uitvoeren.
U kunt de pijplijnuitvoering bekijken door de fasen of taken te selecteren op de pagina Overzicht van de pijplijn. Elke taak en fase geeft een groen vinkje weer zodra deze is voltooid. Als er fouten optreden, worden deze weergegeven in de samenvatting of in de taakstappen.
              
              
            
U kunt snel terugkeren naar de YAML-editor door de verticale puntjes in de rechterbovenhoek op de pagina Samenvatting te selecteren en pijplijn bewerken te selecteren.
              
              
            
Selecteer in de implementatiewerk de taak Deploy Azure Web App om de uitvoer ervan weer te geven.
              
              
            
Selecteer in de uitvoer de URL na de URL van de App Service-toepassing. De app moet er als volgt uitzien:
              
              
            
Notitie
Als een app-implementatie mislukt vanwege een ontbrekende afhankelijkheid, is het requirements.txt bestand niet verwerkt tijdens de implementatie. Dit probleem kan optreden als u de web-app rechtstreeks in de portal maakt in plaats van de az webapp up opdracht te gebruiken.
Met az webapp up de opdracht wordt de build-actie SCM_DO_BUILD_DURING_DEPLOYMENT specifiek ingesteld op true. Als u een app-service inricht via de portal, wordt deze actie niet automatisch ingesteld.
Ga als volgt te werk om deze actie in te stellen:
- Selecteer Configuratie in het linkernavigatiemenu op de portalpagina voor uw web-app.
 - Selecteer Op het tabblad Toepassingsinstellingende optie Nieuwe toepassingsinstelling.
 - In het pop-upvenster dat verschijnt, stel Name in op 
SCM_DO_BUILD_DURING_DEPLOYMENT, stel Value in optrue, en selecteer OK. - Selecteer Opslaan boven aan de pagina Configuratie .
 - Voer de pijplijn opnieuw uit. De afhankelijkheden moeten nu worden geïnstalleerd tijdens de implementatie.
 
Een pijplijnuitvoering activeren
Deze pijplijn wordt zo ingesteld dat deze wordt uitgevoerd wanneer een wijziging incheckt in de codeopslagplaats. Breng een wijziging aan in de opslagplaats om een pijplijnuitvoering te activeren. U kunt bijvoorbeeld een nieuwe functie toevoegen aan de app of de afhankelijkheden van de app bijwerken.
- Ga naar de GitHub-opslagplaats voor uw app.
 - Breng een wijziging aan in de code, zoals het wijzigen van de titel van de app.
 - Voer de wijziging door.
 - Ga naar uw pijplijn en controleer of er een nieuwe uitvoering is gemaakt en wordt uitgevoerd.
 - Wanneer de uitvoering is voltooid, controleert u of de wijziging is geïmplementeerd in uw web-app.
 - Ga in Azure Portal naar uw web-app en selecteer Implementatiecentrum in het linkernavigatiemenu.
 - Selecteer het tabblad Logboeken en controleer of de nieuwe implementatie wordt weergegeven.
 
Django-apps implementeren in App Service
U kunt Azure Pipelines gebruiken om Django-apps te implementeren in App Service op Linux als u een afzonderlijke database gebruikt. U kunt geen SQLite-database gebruiken, omdat App Service het bestand db.sqlite3 vergrendelt, waardoor zowel lees- als schrijfbewerkingen worden voorkomen. Dit gedrag heeft geen invloed op externe databases.
Zoals uitgelegd in het opstartproces van de container, zoekt App Service automatisch naar een wsgi.py bestand in uw app-code, dat meestal het app-object bevat. Als u de opstartopdracht wilt aanpassen, gebruikt u de startUpCommand parameter in de AzureWebApp@1 stap van het YAML-pijplijnbestand.
Wanneer u Django gebruikt, wilt u doorgaans de gegevensmodellen migreren met behulp van manage.py migrate de app-code. U kunt hiervoor een script na de implementatie toevoegen startUpCommand . Hier ziet u bijvoorbeeld de startUpCommand eigenschap in de AzureWebApp@1 taak.
  - task: AzureWebApp@1
      displayName: 'Deploy Azure Web App : $(webAppName)'
      inputs:
        azureSubscription: $(azureServiceConnectionId)
        appName: $(webAppName)
        package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
        startUpCommand: 'python manage.py migrate'
Tests uitvoeren op de buildagent
Als onderdeel van het buildproces wilt u mogelijk tests uitvoeren op uw app-code. Tests worden uitgevoerd op de buildagent, dus u moet uw afhankelijkheden installeren in een virtuele omgeving op de buildagent. Nadat de tests zijn uitgevoerd, verwijdert u de virtuele testomgeving voordat u het .zip-bestand voor implementatie maakt.
De volgende scriptelementen illustreren dit proces. Plaats deze vóór de ArchiveFiles@2 taak in het azure-pipelines.yml-bestand . Zie Platformoverschrijdende scripts uitvoeren voor meer informatie.
# The | symbol is a continuation character, indicating a multi-line script.
# A single-line script can immediately follow "- script:".
- script: |
    python -m venv .env
    source .env/bin/activate
    pip install setuptools
    pip install -r requirements.txt
  # The displayName shows in the pipeline UI when a build runs
  displayName: 'Install dependencies on build agent'
- script: |
    # Put commands to run tests here
    displayName: 'Run tests'
- script: |
    echo Deleting .env
    deactivate
    rm -rf .env
  displayName: 'Remove .env before zip'
U kunt ook een taak zoals PublishTestResults@2 gebruiken om de testresultaten naar uw pijplijn te publiceren. Zie Tests uitvoeren voor meer informatie.
Middelen opruimen
Als u klaar bent met de Azure-resources die u in deze zelfstudie hebt gemaakt, verwijdert u deze om verdere kosten te voorkomen.
- Verwijder het Azure DevOps-project dat u hebt gemaakt. Als u het project verwijdert, wordt de pijplijn- en serviceverbinding verwijderd.
 - Verwijder de Azure-resourcegroep die de App Service en het App Service-plan bevat. Ga in Azure Portal naar de resourcegroep, selecteer Resourcegroep verwijderen en volg de aanwijzingen.
 - Verwijder het Azure-opslagaccount dat het Cloud Shell-bestandssysteem onderhoudt. Sluit Cloud Shell en zoek vervolgens de resourcegroep die begint met cloud-shell-storage. Selecteer Resourcegroep verwijderen en volg de aanwijzingen.