Azure Pipelines를 사용하여 UWP 프로젝트에 대한 자동화된 빌드를 만들 수 있습니다. 이 문서에서는 이 작업을 수행하는 다양한 방법을 살펴보겠습니다. 다른 빌드 시스템과 통합할 수 있도록 명령줄을 사용하여 이러한 작업을 수행하는 방법도 설명합니다.
새 Azure Pipeline 만들기
아직
다음으로 소스 코드를 빌드하는 데 사용할 수 있는 파이프라인을 만듭니다. GitHub 리포지토리를 빌드하기 위한 파이프라인 빌드에 대한 자습서는 첫 번째 파이프라인 만들기를 참조하세요. Azure Pipelines는 이 문서에 나열된 리포지토리 유형
자동화된 빌드 설정
Azure Dev Ops에서 사용할 수 있는 기본 UWP 빌드 정의부터 시작한 다음, 파이프라인을 구성하는 방법을 보여 줍니다.
빌드 정의 템플릿 목록에서 유니버설 Windows 플랫폼 템플릿을 선택합니다.
이 템플릿에는 UWP 프로젝트를 빌드하기 위한 기본 구성이 포함되어 있습니다.
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'x86|x64|ARM'
buildConfiguration: 'Release'
appxPackageDir: '$(build.artifactStagingDirectory)\AppxPackages\\'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
platform: 'x86'
solution: '$(solution)'
configuration: '$(buildConfiguration)'
msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)" /p:AppxPackageDir="$(appxPackageDir)" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload'
기본 템플릿은 .csproj 파일에 지정된 인증서를 사용하여 패키지에 서명하려고 합니다. 빌드 중에 패키지에 서명하려면 프라이빗 키에 대한 액세스 권한이 있어야 합니다. 그렇지 않으면 YAML 파일의 섹션에 매개 변수 /p:AppxPackageSigningEnabled=falsemsbuildArgs 를 추가하여 서명을 사용하지 않도록 설정할 수 있습니다.
보안 파일 라이브러리에 프로젝트 인증서 추가
가능한 경우 리포지토리에 인증서를 제출하지 않아야 하며 git은 기본적으로 이를 무시합니다. 인증서와 같은 중요한 파일의 안전한 처리를 관리하기 위해 Azure DevOps는 보안 파일 기능을 지원합니다.
자동화된 빌드에 대한 인증서를 업로드하려면 다음을 수행합니다.
Azure Pipelines의 탐색 창에서 파이프라인 확장하고 라이브러리클릭합니다.
파일 보안 탭을 클릭한 다음 + 보안 파일을 클릭합니다.
인증서 파일을 찾아 확인을 클릭합니다.
인증서를 업로드한 후 인증서를 선택하여 해당 속성을 봅니다. 파이프라인 권한에서, 모든 파이프라인에서 사용을 승인할 수 있도록 토글을 활성화합니다.
인증서의 프라이빗 키에 암호가 있는 경우 Azure Key Vault 에 암호를 저장한 다음 암호를 변수 그룹에 연결하는 것이 좋습니다. 변수를 사용하여 파이프라인에서 암호에 액세스할 수 있습니다. 암호는 프라이빗 키에 대해서만 지원됩니다. 암호로 보호되는 인증서 파일 사용은 현재 지원되지 않습니다.
비고
Visual Studio 2019부터는 UWP 프로젝트에서 임시 인증서가 더 이상 생성되지 않습니다. 인증서를 만들거나 내보내려면 이 문서에 설명된 PowerShell cmdlet을 사용합니다.
빌드 솔루션 빌드 작업 구성하기
이 작업은 작업 폴더에 있는 솔루션을 이진 파일로 컴파일하고 출력 앱 패키지 파일을 생성합니다. 이 작업은 MSBuild 인수를 사용합니다. 이러한 인수의 값을 지정해야 합니다. 다음 표를 가이드로 따르세요.
| MSBuild 인수 | 값 | 설명 |
|---|---|---|
| AppxPackageDir (애플리케이션 패키지 디렉토리) | $(Build.ArtifactStagingDirectory)\AppxPackages | 생성된 아티팩트를 저장할 폴더를 정의합니다. |
| AppxBundlePlatforms | $(Build.BuildPlatform) | 번들에 포함할 플랫폼을 정의할 수 있습니다. |
| Appx 번들 | 늘 | 지정된 플랫폼용 .msix/.appx 파일을 사용하여 .msixbundle/.appxbundle을 만듭니다. |
| UapAppxPackageBuildMode | 스토어업로드 | 테스트용 로드를 위해 .msixupload/.appxupload 파일 및 _Test 폴더를 생성합니다. |
| UapAppxPackageBuildMode | 기업 아이덴티티 (CI) | .msixupload/.appxupload 파일만 생성합니다. |
| UapAppxPackageBuildMode | SideloadOnly | 사이드로드 전용 _Test 폴더를 생성합니다. |
| Appx패키지서명활성화 | 맞다 | 패키지 서명을 사용하도록 설정합니다. |
| 패키지인증서지문 | 인증서 지문 | 이 값은 서명 인증서의 지문과 일치하거나 빈 문자열이어야 합니다 . |
| 패키지인증서키파일 | 경로 | 사용할 인증서의 경로입니다. 보안 파일 메타데이터에서 검색됩니다. |
| 패키지인증서비밀번호 | 암호 | 인증서의 프라이빗 키용 암호입니다. Azure Key Vault에 암호를 저장하고 암호를 변수 그룹에 연결하는 것이 좋습니다. 변수를 이 인수에 전달할 수 있습니다. |
빌드를 구성하십시오
명령줄을 사용하거나 다른 빌드 시스템을 사용하여 솔루션을 빌드하려면 이러한 인수를 사용하여 MSBuild를 실행합니다.
/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\\"
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxBundlePlatforms="$(Build.BuildPlatform)"
/p:AppxBundle=Always
패키지 서명 구성
MSIX(또는 .appx) 패키지에 서명하려면 파이프라인이 서명 인증서를 검색해야 합니다. 이렇게 하려면 VSBuild 작업 전에 DownloadSecureFile 작업을 추가합니다.
그러면 signingCert를 통해 서명 인증서에 액세스할 수 있습니다.
- task: DownloadSecureFile@1
name: signingCert
displayName: 'Download CA certificate'
inputs:
secureFile: '[Your_Pfx].pfx'
다음으로 서명 인증서를 참조하도록 VSBuild 작업을 업데이트합니다.
- task: VSBuild@1
inputs:
platform: 'x86'
solution: '$(solution)'
configuration: '$(buildConfiguration)'
msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)"
/p:AppxPackageDir="$(appxPackageDir)"
/p:AppxBundle=Always
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxPackageSigningEnabled=true
/p:PackageCertificateThumbprint=""
/p:PackageCertificateKeyFile="$(signingCert.secureFilePath)"'
비고
PackageCertificateThumbprint 인수는 예방 조치를 위해 의도적으로 빈 문자열로 설정됩니다. 지문이 프로젝트에 설정되었지만 서명 인증서와 일치하지 않으면 Certificate does not match supplied signing thumbprint 오류로 인해 빌드가 실패합니다.
매개 변수 검토
$() 구문으로 정의된 매개 변수는 빌드 정의에 정의된 변수이며, 다른 빌드 시스템에서 변경됩니다.
미리 정의된 모든 변수를 보려면 미리 정의된 빌드 변수를 참조하세요.
빌드 아티팩트 게시 작업 구성
기본 UWP 파이프라인은 생성된 아티팩트가 저장되지 않습니다. 게시 기능을 YAML 정의에 추가하려면 다음 작업을 추가합니다.
- task: CopyFiles@2
displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**\bin\$(BuildConfiguration)\**'
TargetFolder: '$(build.artifactstagingdirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
빌드 결과 페이지의 아티팩트 옵션에서 생성된 아티팩트가 표시됩니다.
인수UapAppxPackageBuildMode를 StoreUpload 설정했으므로 아티팩트 폴더에는 Store에 제출하기 위한 패키지(.msixupload/.appxupload)가 포함됩니다. 일반 앱 패키지(.msix/.appx) 또는 앱 번들(.msixbundle/.appxbundle/)을 스토어에 제출할 수도 있습니다. 이 문서의 목적을 위해 .appxupload 파일을 사용합니다.
번들 오류 해결
솔루션에 둘 이상의 UWP 프로젝트를 추가한 다음 번들을 만들려고 하면 다음과 같은 오류가 발생할 수 있습니다.
MakeAppx(0,0): Error : Error info: error 80080204: The package with file name "AppOne.UnitTests_0.1.2595.0_x86.appx" and package full name "8ef641d1-4557-4e33-957f-6895b122f1e6_0.1.2595.0_x86__scrj5wvaadcy6" is not valid in the bundle because it has a different package family name than other packages in the bundle
이 오류는 솔루션 수준에서 번들에 표시되어야 하는 앱이 명확하지 않기 때문에 나타납니다. 이 문제를 해결하려면 각 프로젝트 파일을 열고 첫 번째 <PropertyGroup> 요소의 끝에 다음 속성을 추가합니다.
| 프로젝트 | 속성 |
|---|---|
| 애플리케이션 | <AppxBundle>Always</AppxBundle> |
| UnitTests | <AppxBundle>Never</AppxBundle> |
그런 다음 빌드 단계에서 MSBuild 인수를 제거 AppxBundle 합니다.
관련 항목
- Windows용 .NET 앱 빌드
- UWP 앱 패키징
- Windows LOB 앱
테스트용 로드 - 패키지 서명 대한 인증서 만들기