Azure DevOps Services
이 문서에서는 PHP 웹앱을 빌드하고 Azure App Service에 배포하는 파이프라인을 Azure Pipelines에서 만드는 방법을 보여 줍니다. App Service는 웹 애플리케이션, REST API 및 모바일 백 엔드를 호스팅하기 위한 HTTP 기반 서비스입니다. 파이프라인은 GitHub 원본에서 연속 통합을 사용하고 App Service에 지속적인 업데이트를 사용하여 PHP 앱을 자동으로 빌드, 테스트 및 배포합니다.
Azure Pipelines는 인프라를 설정하지 않고도 PHP 프로젝트를 빌드합니다. PHP는 PHP 버전에 대한 많은 일반 라이브러리와 함께 Microsoft 호스팅 에이전트에 사전 설치됩니다. Linux, macOS 또는 Windows 에이전트를 사용하여 빌드를 실행할 수 있습니다. 사전 설치된 PHP 버전에 대한 자세한 내용은 Software를 참조 하세요.
필수 조건
https://github.com/Azure-Samples/php-docs-hello-world에서 GitHub의 PHP 샘플 프로젝트에 대한 사용자의 고유 포크입니다.
Azure App Service에서 프로젝트에 대해 만든 PHP 웹앱입니다. PHP 웹앱을 빠르게 만들려면 Azure App Service에서 PHP 웹앱 만들기를 참조하세요. 사용자 고유의 PHP GitHub 프로젝트 및 웹앱을 사용할 수도 있습니다.
다음 필수 구성 요소도 필요합니다.
| 제품 | 요구 사항 |
|---|---|
| Azure DevOps | - Azure DevOps 프로젝트입니다. - Microsoft 호스팅 에이전트에서 파이프라인을 실행하는 기능입니다. 병렬 작업을 구매하거나 무료 등급을 요청할 수 있습니다. - YAML 및 Azure Pipelines에 대한 기본 지식 자세한 내용은 첫 번째 파이프라인 만들기를 참조하세요. - 권한: - 파이프라인을 만들려면 참가자 그룹에 있어야 하며 그룹에 빌드 파이프라인 만들기 권한이 허용으로 설정되어 있어야 합니다. 프로젝트 관리자 그룹의 구성원은 파이프라인을 관리할 수 있습니다. 서비스 연결 |
| 깃허브 | - GitHub 계정입니다. - Azure Pipelines에 권한을 부여하는 GitHub 서비스 연결 입니다. |
| 하늘빛 | Azure 구독. |
| 제품 | 요구 사항 |
|---|---|
| Azure DevOps | - Azure DevOps 프로젝트입니다. 자체적으로 호스팅되는 에이전트입니다. 에이전트를 만들려면 자체 호스팅 에이전트를 참조하세요. - YAML 및 Azure Pipelines에 대한 기본 지식 자세한 내용은 첫 번째 파이프라인 만들기를 참조하세요. - 권한: - 파이프라인을 만들려면 참가자 그룹에 있어야 하며 그룹에 빌드 파이프라인 만들기 권한이 허용으로 설정되어 있어야 합니다. 프로젝트 관리자 그룹의 구성원은 파이프라인을 관리할 수 있습니다. 서비스 연결 |
| 깃허브 | - GitHub 계정입니다. - Azure Pipelines에 권한을 부여하는 GitHub 서비스 연결 입니다. |
| 하늘빛 | Azure 구독. |
비고
GitHub에는 인증, 권한 부여 또는 GitHub 조직 또는 특정 리포지토리에 로그인해야 할 수 있습니다. 지침에 따라 필요한 프로세스를 완료합니다. 자세한 내용은 GitHub 리포지토리에 대한 액세스를 참조 하세요.
예제 파이프라인
다음은 azure-pipelines.yml 파일의 예제로, Azure의 Linux 웹 앱으로서 PHP 파이프라인 템플릿을 기반으로 하며, 두 가지 단계 Build와 Deploy를 포함하고 있습니다. 단계에서는 PHP 8.2를 설치한 후, 작업을 실행하여 프로젝트 파일을 아카이브하고, ZIP 빌드 아티팩트를 Build라는 이름의 패키지에 게시합니다.
스테이지 Deploy가 성공하면 Build 스테이지가 실행되고 drop 패키지를 Azure Web App 작업을 사용하여 App Service에 배포합니다.
PhP를 Azure 템플릿에서 Linux 웹앱으로 사용하여 파이프라인을 만드는 경우 생성된 파이프라인은 구성 설정에 따라 변수 및 기타 값을 설정하고 사용합니다.
비고
Azure의 PHP as Linux Web App템플릿에서 파이프라인을 생성하고 PHP 앱이 Composer를 사용하지 않는다면, 저장하고 실행하기 전에 생성된 파이프라인에서 다음 줄을 제거하십시오. 템플릿 파이프라인은 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
YAML 파이프라인 만들기
예제 파이프라인을 만들고 실행하려면 다음 단계를 수행합니다.
Azure DevOps 프로젝트의 왼쪽 탐색 메뉴에서 파이프라인 을 선택한 다음, 프로젝트의 첫 번째 파이프라인인 경우 새 파이프라인 또는 만들기 파이프라인 을 선택합니다.
코드의 위치 페이지에서 GitHub를 선택합니다.
리포지토리 선택 페이지에서 포크된 php-docs-hello-world 리포지토리를 선택합니다.
Azure Pipelines는 코드를 PHP 앱으로 인식하고 파이프라인 구성 페이지에서 여러 파이프라인 템플릿을 제안합니다. 이 예제에서는 Azure에서 LINux 웹앱으로 PHP를 선택합니다.
다음 화면에서 Azure 구독을 선택하고 계속을 선택합니다. 이 작업은 Azure 리소스에 대한 서비스 연결을 만듭니다.
다음 화면에서 Azure 웹앱을 선택하고 유효성 검사 및 구성을 선택합니다. Azure Pipelines는 azure-pipelines.yml 파일을 만들고 YAML 파이프라인 편집기에서 표시합니다.
파이프라인 YAML 검토 화면에서 파이프라인에 대한 코드를 검토합니다. 준비가 되면 저장을 선택하고 실행합니다.
다음 화면에서 저장을 선택하고 다시 실행하여 새 azure-pipelines.yml 파일을 리포지토리에 커밋하고 CI/CD 빌드를 시작합니다.
비고
파이프라인이 처음 실행되면 파이프라인이 만드는 환경에 액세스할 수 있는 권한을 요청합니다. 파이프라인이 환경에 액세스할 수 있는 권한을 부여하려면 [허용 ]을 선택합니다.
파이프라인의 작동을 확인하려면 실행 요약 페이지에서 작업을 선택합니다. 실행이 완료되면 Azure Web App 배포 단계에서 App Service 애플리케이션 URL 링크를 선택하여 배포된 웹앱을 확인합니다.
파이프라인 사용자 지정
실행 요약 페이지에서 오른쪽 위에 있는 기타 작업 아이콘을 선택한 다음, 파이프라인 편집을 선택하거나 파이프라인 페이지의 오른쪽 위에서 편집을 선택하여 파이프라인을 편집할 수 있습니다. 리포지토리에 커밋하는 각 편집은 새 CI/CD 파이프라인 실행을 시작합니다.
다음과 같은 여러 가지 방법으로 파이프라인을 사용자 지정할 수 있습니다.
특정 PHP 버전 사용
여러 PHP 버전이 Microsoft 호스팅 Ubuntu 에이전트에 설치됩니다.
/usr/bin/php의 symlink는 현재 PHP 버전을 가리키므로 실행php하면 집합 버전이 실행됩니다.
기본값이 아닌 PHP 버전을 사용하려면 명령을 사용하여 update-alternatives symlink를 원하는 버전으로 가리킬 수 있습니다. YAML 파이프라인에서 변수 값을 phpVersion 원하는 버전으로 변경하고 다음 코드 조각을 사용합니다.
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)'
종속성 설치
Composer를 사용하여 종속성을 설치하려면 azure-pipelines.yml 파일에 다음 코드 조각을 포함합니다.
- script: composer install --no-interaction --prefer-dist
displayName: 'composer install'
composer.json 파일이 루트 디렉터리에 없는 경우 인수를 --working-dir 사용하여 사용할 디렉터리를 지정할 수 있습니다. 예를 들어 composer.json이 하위 폴더 /pkgs에 있는 경우 composer install --no-interaction --working-dir=pkgs를 사용하세요. 기본 제공 시스템 변수 --working-dir='$(System.DefaultWorkingDirectory)/pkgs'를 사용하여 절대 경로를 지정할 수도 있습니다.
PHPUnit을 사용하여 테스트
PHPUnit을 사용하여 테스트를 실행하려면 azure-pipelines.yml 파일에 다음 코드 조각을 추가합니다.
- script: ./phpunit
displayName: 'Run tests with phpunit'
빌드 레코드를 사용하여 PHP 아티팩트 유지
빌드 레코드를 사용하여 빌드의 아티팩트 저장하려면 파이프라인에 보관 파일 작업을 포함하고 필요에 따라 보관 파일에 포함된 내용을 변경하도록 값을 rootFolderOrFile 사용자 지정합니다.
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false