Sdílet prostřednictvím


Sestavování, testování a nasazování aplikací PHP

Služby Azure DevOps

Tento článek ukazuje, jak vytvořit kanál ve službě Azure Pipelines, který sestaví webovou aplikaci v PHP a nasadí ji do služby Azure App Service. App Service je služba založená na protokolu HTTP pro hostování webových aplikací, rozhraní REST API a mobilních back-endů. Kanál využívá kontinuální integraci ze zdroje GitHubu a průběžného doručování do app Service k automatickému sestavování, testování a nasazování aplikací PHP.

Azure Pipelines sestavuje projekty PHP, aniž byste museli nastavovat žádnou infrastrukturu. PHP je předinstalovaný na agentech hostovaných Microsoftem spolu s mnoha běžnými knihovnami pro verze PHP. Ke spouštění sestavení můžete použít agenty pro Linux, macOS nebo Windows. Další informace o tom, které verze PHP jsou předinstalované, naleznete v tématu Software.

Požadavky

Potřebujete také následující požadavky:

Výrobek Požadavky
Azure DevOps Projekt Azure DevOps.
– Možnost spouštět potrubí na Microsoftem hostovaných agentech. Můžete buď koupit paralelní úlohu, nebo požádat o bezplatnou úroveň.
– Základní znalost YAML a Azure Pipelines. Další informace naleznete v tématu Vytvoření prvního pipeline.
- Oprávnění:
     – Chcete-li vytvořit pipeline: Musíte být ve skupině Přispěvatelé a skupina musí mít oprávnění k vytvoření build pipeline nastavena na hodnotu Povolit. Členové skupiny Správci projektů můžou spravovat kanály.
    - Chcete-li vytvořit připojení služeb: Musíte mít roli Správce nebo Tvůrce pro připojení služeb .
GitHub – Účet GitHubu .
Připojení ke službě GitHub pro autorizaci Azure Pipelines.
Azure Předplatné Azure.
Výrobek Požadavky
Azure DevOps Projekt Azure DevOps.
- Samostatně hostovaný agent. Chcete-li vytvořit jeden, podívejte se na samo-hostované agenty.
– Základní znalost YAML a Azure Pipelines. Další informace naleznete v tématu Vytvoření prvního pipeline.
- Oprávnění:
    – Chcete-li vytvořit pipeline: Musíte být ve skupině Přispěvatelé a skupina musí mít oprávnění k vytvoření build pipeline nastavena na hodnotu Povolit. Členové skupiny Správci projektů můžou spravovat kanály.
    - Chcete-li vytvořit připojení služeb: Musíte mít roli Správce nebo Tvůrce pro připojení služeb .
GitHub – Účet GitHubu .
Připojení ke službě GitHub pro autorizaci Azure Pipelines.
Azure Předplatné Azure.

Příklad kanálu

Následující příklad souboru azure-pipelines.yml, který je založený na šabloně kanálu PHP jako Linux Web App na Azure, obsahuje dvě fáze: Build a Deploy. Fáze Build nainstaluje PHP 8.2 a potom spustí úkoly pro archivaci souborů projektu a publikuje artefakt sestavení ZIP do balíčku s názvem drop.

Fáze Deploy se spustí, pokud Build fáze proběhne úspěšně. Balíček je nasazen drop do služby App Service pomocí úlohy Azure Web App. Když k vytvoření kanálu použijete šablonu PHP jako webovou aplikaci pro Linux v Azure, vygenerovaný kanál nastaví a použije proměnné a další hodnoty na základě vašich konfiguračních nastavení.

Poznámka:

Pokud vytvoříte kanál z PHP jako linuxové webové aplikace všabloně Azure a vaše aplikace PHP nepoužívá Composer, odeberte z vygenerovaného kanálu následující řádky, než ho uložíte a spustíte. Kanál šablony selže, pokud není v úložišti přítomen composer.json.

    - script: composer install --no-interaction --prefer-dist
     workingDirectory: $(rootFolder)
     displayName: 'Composer install'
trigger:
- main

variables:
  # Azure Resource Manager service connection
  azureSubscription: 'service-connection-based-on-subscription-id'
  # Web app name
  webAppName: 'my-php-web-app'
  # Agent VM image name
  vmImageName: 'ubuntu-22.04'
  # Environment name
  environmentName: 'my-php-web-app-environment'
  # Root folder where your composer.json file is available.
  rootFolder: $(System.DefaultWorkingDirectory)

stages:
- stage: Build
  displayName: Build stage
  variables:
    phpVersion: '8.2'
  jobs:
  - job: BuildJob
    pool:
      vmImage: $(vmImageName)
    steps:
    - script: |
        sudo update-alternatives --set php /usr/bin/php$(phpVersion)
        sudo update-alternatives --set phar /usr/bin/phar$(phpVersion)
        sudo update-alternatives --set phpdbg /usr/bin/phpdbg$(phpVersion)
        sudo update-alternatives --set php-cgi /usr/bin/php-cgi$(phpVersion)
        sudo update-alternatives --set phar.phar /usr/bin/phar.phar$(phpVersion)
        php -version
      workingDirectory: $(rootFolder)
      displayName: 'Use PHP version $(phpVersion)'

    - task: ArchiveFiles@2
      displayName: 'Archive files'
      inputs:
        rootFolderOrFile: '$(rootFolder)'
        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: AzureWebApp@1
            displayName: 'Deploy Azure Web App'
            inputs:
              azureSubscription: $(azureSubscription)
              appName: $(webAppName)
              package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip

Vytvoření kanálu YAML

Pokud chcete vytvořit a spustit ukázkový kanál, proveďte následující kroky:

  1. V projektu Azure DevOps vyberte kanály z levé navigační nabídky a pak vyberte Nový kanál nebo Vytvořit kanál , pokud je tento kanál první v projektu.

  2. Na stránce Kde je kódová stránka, vyberte GitHub.

  3. Na stránce Vybrat úložiště vyberte své forkované úložiště php-docs-hello-world .

  4. Azure Pipelines rozpozná kód jako aplikaci PHP a navrhne několik šablon kanálů na stránce Konfigurace kanálu . V tomto příkladu vyberte PHP jako linuxovou webovou aplikaci v Azure.

  5. Na další obrazovce vyberte své předplatné Azure a vyberte Pokračovat. Tato akce vytvoří připojení služby k vašim prostředkům Azure.

  6. Na další obrazovce vyberte webovou aplikaci Azure a vyberte Ověřit a nakonfigurovat. Azure Pipelines vytvoří soubor azure-pipelines.yml a zobrazí ho v editoru kanálů YAML.

  7. Na obrazovce Kontrola kanálu YAML zkontrolujte kód kanálu. Až budete připraveni, vyberte Uložit a spustit.

    Snímek obrazovky znázorňující tlačítko Uložit a spustit v novém kanálu YAML

  8. Na další obrazovce vyberte Uložit a spusťte znovu a potvrďte nový soubor azure-pipelines.yml do úložiště a spusťte sestavení CI/CD.

    Poznámka:

    Při prvním spuštění pipeline požádá o povolení pro přístup k prostředí, které vytvoří. Vyberte Povolit udělit oprávnění pro kanál pro přístup k prostředí.

  9. Pokud chcete sledovat aktivitu pipeline, vyberte úlohu na stránce Souhrn běhu. Po dokončení spuštění vyberte odkaz URL aplikace služby App Service v kroku Nasazení webové aplikace Azure a zobrazte nasazenou webovou aplikaci.

  10. Ověřte úspěšné nasazení tak, že přejdete na adresu URL. Měl by se zobrazit výstup ukázkové aplikace Hello World! .

Přizpůsobit tok dat

Můžete upravit potrubí výběrem ikony Další akce v pravém horním rohu na stránce Souhrn spuštění a následným výběrem možnosti Upravit potrubí nebo výběrem možnosti Upravit v pravém horním rohu na stránce potrubí. Každá úprava, kterou potvrdíte do úložiště, zahájí nový běh pipeline CI/CD.

Pipeline můžete přizpůsobit několika způsoby:

Použití konkrétní verze PHP

Agenti Ubuntu hostovaní Microsoftem mají nainstalované více verzí PHP. Symlink v /usr/bin/php odkazuje na aktuální verzi PHP, takže při spuštění phpse spustí nastavená verze.

Pokud chcete použít jinou verzi PHP než výchozí, najeďte pomocí příkazu symlink na požadovanou verzi update-alternatives . V kanálu YAML změňte hodnotu phpVersion proměnné na požadovanou verzi. Přidejte následující fragment kódu do sekcí variables a steps ve fázi sestavení.

variables:
  phpVersion: 8.3

steps:
- script: |
    sudo update-alternatives --set php /usr/bin/php$(phpVersion)
    sudo update-alternatives --set phar /usr/bin/phar$(phpVersion)
    sudo update-alternatives --set phpdbg /usr/bin/phpdbg$(phpVersion)
    sudo update-alternatives --set php-cgi /usr/bin/php-cgi$(phpVersion)
    sudo update-alternatives --set phar.phar /usr/bin/phar.phar$(phpVersion)
    php -version
  displayName: 'Use PHP version $(phpVersion)'

Nastavení časového pásma PHP

Agenti hostovaní Microsoftem mají výchozí hodnotu UTC, takže funkce PHP jako date() a strtotime() vracejí hodnoty UTC. Pokud chcete ve skriptech kanálu použít jiné časové pásmo, nastavte TZ proměnnou prostředí nebo použijte funkci date_default_timezone_set() v kódu PHP.

Následující příklad nastaví časové pásmo na východní čas pro krok skriptu. Přidejte tento fragment kódu do steps části úlohy sestavení:

- script: |
    export TZ='America/New_York'
    php -r "date_default_timezone_set('America/New_York'); echo date('Y-m-d H:i:s T');"
  displayName: 'Run PHP with Eastern time zone'

Seznam podporovaných identifikátorů časového pásma najdete v seznamu PHP podporovaných časových pásmů.

Nainstalujte závislosti

Pokud chcete k instalaci závislostí použít Composer, přidejte do části úlohy sestavení následující fragment kódu steps :

- script: composer install --no-interaction --prefer-dist
  displayName: 'composer install'

Pokud váš composer.json soubor není v kořenovém adresáři, zadejte pomocí argumentu --working-dir , který adresář chcete použít. Pokud je například composer.json v podsložce /pkgs, použijte composer install --no-interaction --working-dir=pkgs. Absolutní cestu můžete zadat také pomocí předdefinované systémové proměnné: --working-dir='$(System.DefaultWorkingDirectory)/pkgs'.

Testování pomocí PHPUnit

Pokud chcete spouštět testy s PHPUnit, nejprve ho nainstalujte jako vývojovou závislost s Composerem a pak ho spusťte. Do části úlohy sestavení přidejte následující fragment kódu steps :

- script: composer require --dev phpunit/phpunit
  displayName: 'Install PHPUnit'

- script: vendor/bin/phpunit --log-junit $(Build.StagingDirectory)/test-results.xml
  displayName: 'Run tests with PHPUnit'

Zachování artefaktů PHP pomocí záznamu buildu

Pokud chcete uložit artefakty sestavení se záznamem sestavení, zahrňte do pipeliny úlohu Archivovat soubory a volitelně upravte hodnotu rootFolderOrFile, aby změnila obsah archivu.

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false

Řešení potíží

Chyby připojení služby

Pokud váš kanál selže s chybou autorizace během nasazování, ověřte, že je správně nakonfigurované připojení služby Azure Resource Manager a že má požadovaná oprávnění k nasazení do služby App Service.

Selhání instalace nástroje Composer

Pokud composer install selže, ověřte, že je váš souborcomposer.json v pracovním adresáři. Pokud je soubor v podadresáři, použijte --working-dir argument. Pokud composer.json v repozitáři neexistuje, odeberte z pipeline krok Composeru.

Verze PHP není k dispozici

Pokud update-alternatives selže s chybou, například no alternatives for php8.x, požadovaná verze PHP není nainstalovaná na imagi agenta. Projděte si seznam softwaru agenta hostovaného Microsoftem pro dostupné verze PHP.

Oprávnění nasazení bylo odepřeno.

Pokud fáze nasazení selže s chybou oprávnění, ověřte, že:

  • Připojení ke službě má v prostředku App Service roli Přispěvatel.
  • Pipelina má povolení pro přístup k prostředí. Při prvním spuštění vyberte povolit po zobrazení výzvy.