다음을 통해 공유


PHP 앱 빌드 및 테스트

Azure DevOps Services

Azure Pipelines CI/CD(지속적인 통합 및 지속적인 업데이트)를 사용하여 PHP 프로젝트를 빌드, 배포 및 테스트합니다.

PHP 파이프라인을 만들고, 샘플 프로젝트가 있는 파이프라인을 Azure 앱 Service에 배포하는 방법 및 환경을 구성하는 방법을 알아봅니다.

Azure 앱 Service에 대한 자세한 내용은 Azure 앱 Service에서 PHP 웹앱 만들기를 참조하세요.

필수 조건

다음 항목들이 있는지 확인합니다.

  • 리포지토리를 만들 수 있는 GitHub 계정. 체험 계정 만들기

  • Azure DevOps 조직. 체험 계정 만들기 팀에 이미 있는 경우 사용하려는 Azure DevOps 프로젝트의 관리자인지 확인합니다.

  • Microsoft 호스팅 에이전트에서 파이프라인을 실행하는 기능. Microsoft 호스팅 에이전트를 사용하려면 Azure DevOps 조직이 Microsoft 호스팅 병렬 작업에 액세스할 수 있어야 합니다. 병렬 작업을 구입하거나 무료 부여를 요청할 수 있습니다.

  • Azure 계정. GitHub 계정이 없는 경우 무료로 만들 수 있습니다.

    이 기능을 새로 사용하는 경우 시작하는 가장 쉬운 방법은 Azure Pipelines 조직 및 Azure 구독의 소유자와 동일한 전자 메일 주소를 사용하는 것입니다.

  • Azure 앱 Service에 배포하려는 경우 웹앱을 만들어야 합니다.

코드 가져오기

배포하려는 앱이 GitHub에 이미 있는 경우 해당 코드에 대한 파이프라인을 만들 수 있습니다. 그러나 새 사용자인 경우 샘플 코드를 사용하여 더 나은 시작을 얻을 수 있습니다. 이 경우 GitHub에서 다음 리포지토리를 포크합니다.

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

파이프라인을 만듭니다.

  1. Azure DevOps 조직에 로그인하고, 프로젝트로 이동합니다.

  2. 파이프라인으로 이동한 다음 새 파이프라인을 선택합니다.

  3. 원본 위치(GitHub, Azure Repos Git, Bitbucket Cloud 또는 기타 Git 리포지토리)를 선택합니다.

  4. 코드가 있는 리포지토리를 선택합니다.

  5. 구성 탭에서 PHP선택합니다.

  6. PHP 버전이 8.3인지 확인합니다.

  7. 새 파이프라인을 검사합니다. 준비가 되면 저장 및 실행을 선택합니다.

    새 YAML 파이프라인의 저장 및 실행 단추

  8. 리포지토리에 새 azure-pipelines.yml 파일을 커밋하라는 메시지가 표시됩니다. 저장을 선택하고 다시 실행 합니다.

    파이프라인의 작동을 확인하려면 빌드 작업을 선택합니다.

    이제 리포지토리에 사용자 지정할 준비가 된 YAML 파이프라인(azure-pipelines.yml)이 있습니다.

파이프라인을 변경하려면 파이프라인 페이지에서 파이프라인을 선택한 다음 azure-pipelines.yml 파일을 편집합니다.

파이프라인을 사용자 지정하는 보다 일반적인 방법 중 일부를 자세히 알아보려면 자세히 알아보세요.

App Service에 배포

파이프라인을 사용하여 PHP 웹앱을 빌드하고 Azure 앱 Service에 배포합니다. Azure App Service는 웹 애플리케이션, REST API 및 모바일 백 엔드를 호스트하는 HTTP 기반 서비스입니다.

작업을 사용하여 파일을 보관하고, 빌드 아티팩트를 게시한 다음, Azure Web App 작업을 사용하여 Azure 앱 Service에 배포할 수 있습니다.

이 파이프라인에는 빌드 및 배포의 두 단계가 있습니다. 빌드 단계에서 PHP 8.3은 작성기를 사용하여 설치됩니다. 앱 파일은 보관되어 이름이 지정된 drop패키지에 업로드됩니다. 배포 단계에서 패키지는 drop 웹앱으로 Azure 앱 Service에 배포됩니다.


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-latest'
  # 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

빌드 환경 구성

Azure Pipelines를 사용하여 인프라를 설정하지 않고 PHP 프로젝트를 빌드합니다.

특정 PHP 버전 사용

PHP는 PHP 버전당 많은 공통 라이브러리와 함께 Microsoft 호스팅 에이전트사전 설치됩니다. Linux, macOS 또는 Windows 에이전트를 사용하여 빌드를 실행할 수 있습니다. 사전 설치되는 PHP의 정확한 버전에 대한 자세한 내용은 Microsoft 호스팅 에이전트를 참조 하세요.

Microsoft 호스팅 Ubuntu 에이전트에는 여러 버전의 PHP가 설치됩니다. 현재 설정된 PHP 버전을 가리키는 symlink /usr/bin/php 로, 실행할 php때 집합 버전이 실행됩니다.

기본값이 아닌 PHP 버전을 사용하려면 도구를 사용하여 update-alternatives 해당 버전을 symlink를 가리낼 수 있습니다. 파일에 다음 코드 azure-pipelines.yml 조각을 추가하여 원하는 PHP 버전을 설정하고 phpVersion 변수의 값을 변경합니다.

pool:
  vmImage: 'ubuntu-latest'

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

종속성 설치

Composer를 사용하여 종속성을 설치하려면 파일에 다음 코드 조각을 추가합니다 azure-pipelines.yml .

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

phpunit을 사용하여 테스트

phpunit을 사용하여 테스트를 실행하려면 파일에 다음 코드 조각을 추가합니다 azure-pipelines.yml .

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

빌드 레코드를 사용하여 PHP 앱 유지

빌드 레코드와 함께 이 빌드의 아티팩트 저장하려면 파일에 다음 코드 조각을 추가합니다 azure-pipelines.yml . 필요에 따라 rootFolderOrFile 값을 사용자 지정하여 보관에 포함된 내용을 변경합니다.

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

사용자 지정 작성기 위치 사용

composer.json 루트 디렉터리가 아닌 하위 폴더에 있는 경우 인수를 --working-dir 사용하여 작성기에서 사용할 디렉터리를 알려줄 수 있습니다. 예를 들어 composer.json 하위 폴더 내에 있는 경우 pkgs

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

기본 제공 시스템 변수를 사용하여 절대 경로를 지정할 수도 있습니다.

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