Udostępnij za pośrednictwem


Kompilowanie i testowanie aplikacji PHP

Azure DevOps Services

Użyj usługi Azure Pipelines do ciągłej integracji i ciągłego dostarczania (CI/CD), aby kompilować, wdrażać i testować projekty PHP.

Dowiedz się, jak utworzyć potok PHP, wdrożyć go z przykładowym projektem w usłudze Azure App Service oraz skonfigurować środowisko.

Aby dowiedzieć się więcej o usłudze Azure App Service, zobacz Tworzenie aplikacji internetowej w języku PHP w usłudze Azure App Service.

Wymagania wstępne

Produkt Wymagania
Azure DevOps Projekt usługi Azure DevOps.
— Możliwość uruchamiania potoków na agentach hostowanych przez Microsoft. Możesz kupić zadanie równoległe lub zażądać darmowego poziomu.
— Podstawowa wiedza na temat języka YAML i usługi Azure Pipelines. Aby uzyskać więcej informacji, zobacz Tworzenie pierwszego pipeline.
Uprawnienia: -
     - Aby utworzyć przepływ pracy: musisz należeć do grupy Osoby przyczyniające się, a grupa musi mieć uprawnienia Tworzenie przepływu pracy kompilacji ustawione na Zezwalaj. Członkowie grupy Administratorzy projektu mogą zarządzać potokami.
    - Aby utworzyć połączenia usług: musisz mieć rolę Administrator lub Twórca dla połączeń usług.
GitHub — Konto GitHub .
Połączenie usługi GitHub w celu autoryzowania usługi Azure Pipelines.
Błękit Subskrypcja platformy Azure.
Produkt Wymagania
Azure DevOps Projekt usługi Azure DevOps.
- Samodzielnie hostowany agent. Aby je utworzyć, zobacz Self-hosted agents (Agenci hostowani samodzielnie).
— Podstawowa wiedza na temat języka YAML i usługi Azure Pipelines. Aby uzyskać więcej informacji, zobacz Tworzenie pierwszego pipeline.
Uprawnienia: -
    - Aby utworzyć przepływ pracy: musisz należeć do grupy Osoby przyczyniające się, a grupa musi mieć uprawnienia Tworzenie przepływu pracy kompilacji ustawione na Zezwalaj. Członkowie grupy Administratorzy projektu mogą zarządzać potokami.
    - Aby utworzyć połączenia usług: musisz mieć rolę Administrator lub Twórca dla połączeń usług.
GitHub — Konto GitHub .
Połączenie usługi GitHub w celu autoryzowania usługi Azure Pipelines.
Błękit Subskrypcja platformy Azure.

Jeśli zamierzasz wdrożyć w usłudze Azure App Service, musisz utworzyć aplikację internetową.

Pobieranie kodu

Jeśli masz już aplikację w usłudze GitHub, którą chcesz wdrożyć, możesz utworzyć potok dla tego kodu. Jeśli jednak jesteś nowym użytkownikiem, możesz zacząć korzystać z naszego przykładowego kodu. W takim przypadku sforkuj następujące repozytorium na GitHubie.

https://github.com/Azure-Samples/basic-php-composer

Utwórz potok

  1. Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.

  2. Przejdź do potoków, a następnie wybierz Nowy potok.

  3. Wybierz lokalizację źródłową (GitHub, Azure Repos Git, Bitbucket Cloud lub inne repozytoria Git).

  4. Wybierz repozytorium, w którym znajduje się kod.

  5. Wybierz pozycję PHP na karcie Konfigurowanie .

  6. Upewnij się, że wersja PHP to 8.3.

  7. Zbadaj swój nowy rurociąg. Gdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom.

    Przycisk Zapisz i uruchom w nowym potoku YAML

  8. Należy wprowadzić nowy plik azure-pipelines.yml do repozytorium. Wybierz pozycję Zapisz i uruchom ponownie.

    Jeśli chcesz śledzić działanie potoku, wybierz zadanie kompilacji.

    W repozytorium masz teraz działający potok YAML (azure-pipelines.yml), który jest gotowy do dostosowania!

Jeśli chcesz wprowadzić zmiany w potoku, wybierz potok na stronie Potoki , a następnie edytuj plik azure-pipelines.yml .

Przeczytaj dalej, aby poznać niektóre z bardziej typowych sposobów dostosowywania pipeline'u.

Wdrażanie do usługi App Service

Użyj potoku, aby utworzyć aplikację PHP i wdrożyć w Azure App Service. Usługa Azure App Service to oparta na protokole HTTP usługa do hostowania aplikacji internetowych, interfejsów API REST i zapleczy mobilnych aplikacji.

Zadania można używać do archiwizowania plików, publikowania artefaktu kompilacji, a następnie można wdrożyć w usłudze Azure App Service za pomocą zadania aplikacji internetowej platformy Azure.

Ten pipeline ma dwa etapy: Budowanie i wdrażanie. Na etapie kompilacji środowisko PHP 8.3 jest instalowane z kompozytorem. Pliki aplikacji są archiwizowane i przekazywane do pakietu o nazwie drop. W fazie wdrażania pakiet drop jest wdrażany w usłudze Azure App Service jako aplikacja internetowa.


trigger:
- main

variables:
  # Azure Resource Manager connection created during pipeline creation
  azureSubscription: 'subscription-id'
  # Web app name
  webAppName: 'web-app-name'
  # Agent VM image name
  vmImageName: 'ubuntu-22.04'
  # Environment name
  environmentName: 'environment-name'
  # Root folder under which your composer.json file is available.
  rootFolder: $(System.DefaultWorkingDirectory)

stages:
- stage: Build
  displayName: Build stage
  variables:
    phpVersion: '8.3'
  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)'

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

    - 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

Konfigurowanie środowiska kompilacji

Użyj usługi Azure Pipelines do kompilowania projektów PHP bez konfigurowania infrastruktury.

Używanie określonej wersji języka PHP

PHP jest wstępnie instalowany na agentach hostowanych przez firmę Microsoft wraz z wieloma typowymi bibliotekami w zależności od wersji PHP. Do uruchamiania kompilacji można użyć agentów systemu Linux, macOS lub Windows. Aby uzyskać więcej informacji i dokładne wersje języka PHP, które są wstępnie zainstalowane, zobacz Agenci hostowani przez firmę Microsoft.

Na agencie z systemem Ubuntu hostowanym przez firmę Microsoft zainstalowano wiele wersji języka PHP. Symlink w /usr/bin/php wskazuje na aktualnie ustawioną wersję PHP, aby po uruchomieniu phpuruchamiana była ustawiona wersja.

Aby użyć wersji PHP innej niż domyślna, można wskazać ten link przy użyciu narzędzia update-alternatives. Ustaw odpowiednią wersję języka PHP, dodając następujący fragment kodu do azure-pipelines.yml pliku i zmieniając wartość zmiennej phpVersion .

pool:
  vmImage: 'ubuntu-22.04'

variables:
  phpVersion: 8.2

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)'

Instalowanie zależności

Aby użyć narzędzia Composer do zainstalowania zależności, dodaj następujący fragment kodu do pliku azure-pipelines.yml.

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

Testowanie za pomocą narzędzia phpunit

Aby uruchomić testy za pomocą narzędzia phpunit, dodaj następujący fragment kodu do pliku azure-pipelines.yml.

- script: ./phpunit
  displayName: 'Run tests with phpunit'

Zachowaj aplikację PHP razem z zapisem kompilacji

Aby zapisać artefakty tej kompilacji przy użyciu rekordu kompilacji, dodaj następujący fragment kodu do pliku azure-pipelines.yml. Opcjonalnie dostosuj wartość rootFolderOrFile , aby zmienić elementy zawarte w archiwum.

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(system.defaultWorkingDirectory)'
    includeRootFolder: false
- task: PublishBuildArtifacts@1

Używanie niestandardowej lokalizacji kompozytora

Jeśli composer.json znajduje się w podfolderze zamiast katalogu głównego, możesz użyć argumentu --working-dir, aby poinformować kompozytora, jakiego katalogu użyć. Jeśli na przykład composer.json znajduje się w folderze podrzędnym pkgs

composer install --no-interaction --working-dir=pkgs

Możesz również określić ścieżkę bezwzględną przy użyciu wbudowanych zmiennych systemowych:

composer install --no-interaction --working-dir='$(system.defaultWorkingDirectory)/pkgs'