หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ลูกค้าที่พัฒนาการปรับแต่ง X++ สําหรับแอปการเงินและการดําเนินงานต้องมีไปป์ไลน์การสร้างอัตโนมัติที่รวบรวมรหัสของพวกเขา สร้างแพคเกจที่ปรับใช้ได้ และทําให้พร้อมใช้งานสําหรับการเผยแพร่ เมื่อใช้สภาพแวดล้อมแบบรวมในศูนย์การจัดการ Power Platform เอาต์พุตของรุ่นเป็นแพคเกจแบบรวมของ Power Platform ที่สามารถเลือกใส่โซลูชัน Dataverse ควบคู่ไปกับเอาต์พุตที่คอมไพล์ X++ ทั้งหมดสามารถปรับใช้ได้ผ่านคําสั่งเดียวpac package deploy
ในบทช่วยสอนนี้ เรียนรู้วิธีการ:
- ตั้งค่าตัวดึงข้อมูลแพคเกจ NuGet ด้วยแพคเกจอ้างอิงรุ่นที่จําเป็น
- สร้าง
packages.configและnuget.configไฟล์สําหรับการจัดการเวอร์ชัน - สร้างไปป์ไลน์ Azure DevOps YAML ที่คอมไพล์ X++ และสร้างแพคเกจแบบรวมตามกําหนดเวลากลางคืน
- หรืออาจรวมโซลูชัน Dataverse อย่างน้อยหนึ่งตัวในแพคเกจแบบรวม
ในฐานะตัวอย่างของสถานการณ์นี้ ลูกค้ามีการกําหนดค่า X++ สําหรับการเงิน Dynamics 365 ที่ทํางานบนสภาพแวดล้อมแบบรวม พวกเขาต้องการการสร้างในตอนกลางคืนที่รวบรวมโค้ด จัดแพคเกจควบคู่ไปกับโซลูชัน Dataverse และเผยแพร่อาร์ติแฟกต์สําหรับไปป์ไลน์เผยแพร่เพื่อปรับใช้
ก่อนที่คุณจะเริ่มต้น
- คุณต้องมีองค์กรและโครงการ Azure DevOps ที่มีที่เก็บ Git ที่มีรหัสแหล่งที่มา X++ และโซลูชัน Visual Studio
- ติดตั้งส่วนขยายเครื่องมือ การเงินและการดําเนินงาน Dynamics 365 ในองค์กร Azure DevOps ของคุณ
- ติดตั้งส่วนขยาย เครื่องมือสร้างแพลตฟอร์ม Power ในองค์กร Azure DevOps ของคุณ
- ที่เก็บแหล่งข้อมูลของคุณต้องมีโครงการ X++ (.rnrproj) สําหรับแต่ละแพคเกจที่คุณจําเป็นต้องสร้าง และคุณต้องตรวจสอบในไฟล์ตัวอธิบายแบบจําลองภายใต้โฟลเดอร์เมตาดาต้า สําหรับข้อมูลเพิ่มเติม ดูสร้างระบบอัตโนมัติที่ใช้ตัวแทนที่โฮสต์ Microsoft และ Azure Pipelines
ขั้นตอนที่ 1: รับแพคเกจอ้างอิงรุ่น NuGet
กระบวนการสร้าง X++ จําเป็นต้องใช้แพคเกจ NuGet ที่ประกอบด้วยเครื่องมือคอมไพเลอร์และแอสเซมบลีอ้างอิงสําหรับแพลตฟอร์มและโมดูลแอปพลิเคชัน รุ่นเต็มจําเป็นต้องใช้ห้าแพคเกจ
Note
เนื่องจากมีขนาดใหญ่สําหรับ Azure DevOps โมดูลแอปพลิเคชันถูกแบ่งออกเป็นสองแพคเกจแยกต่างหาก
| แพคเกจ NuGet | จุดประสงค์ | ชื่อไลบรารีแอสเซทที่แชร์ของ LCS |
|---|---|---|
Microsoft.Dynamics.AX.Platform.CompilerPackage |
คอมไพเลอร์ X++ (xppc.exe) และเครื่องมือการสร้างที่เกี่ยวข้อง | PUXX/10.X.XX - เครื่องมือคอมไพเลอร์ |
Microsoft.Dynamics.AX.Platform.DevALM.BuildXpp |
การอ้างอิงโมดูลแพลตฟอร์มที่มีการคอมไพล์ซึ่งปรับให้เหมาะสมสําหรับการสร้าง | PUXX/10.X.XX - การอ้างอิงการสร้างแพลตฟอร์ม |
Microsoft.Dynamics.AX.Application1.DevALM.BuildXpp |
การอ้างอิงโมดูลแอปพลิเคชันที่คอมไพล์แล้ว (ตอนที่ 1) | PUXX/10.X.XX - การอ้างอิงรุ่นของแอปพลิเคชัน 1 |
Microsoft.Dynamics.AX.Application2.DevALM.BuildXpp |
การอ้างอิงโมดูลแอปพลิเคชันที่คอมไพล์แล้ว (ตอนที่ 2) | PUXX/10.X.XX - การอ้างอิงการสร้างแอปพลิเคชัน 2 |
Microsoft.Dynamics.AX.ApplicationSuite.DevALM.BuildXpp |
การอ้างอิงโมดูลชุดแอปพลิเคชันที่ถูกคอมไพล์แล้ว | PUXX/10.X.XX - การอ้างอิงรุ่นของชุดแอปพลิเคชัน |
สำคัญ
ขณะนี้คุณสามารถดาวน์โหลดแพคเกจ NuGet เหล่านี้จาก ไลบรารีสินทรัพย์ที่ใช้ร่วมกัน ใน Microsoft Dynamics Lifecycle Services (LCS) ได้ ลูกค้าทุกคนที่ดําเนินการในสภาพแวดล้อมแบบรวมในศูนย์การจัดการ Power Platform สามารถเข้าถึงไลบรารีสินทรัพย์ที่ใช้ร่วมกันใน LCS เพื่อดาวน์โหลดแอสเซทเหล่านี้ได้ กลไกการแจกแจงแบบแทนที่ที่ไม่จําเป็นต้องใช้ LCS กําลังจะมาเร็ว ๆ นี้ เราวางแผนที่จะอัปเดตบทช่วยสอนนี้เมื่อความสามารถดังกล่าวพร้อมใช้งาน
Note
แพคเกจ NuGet มีรายละเอียดเวอร์ชันที่ต้องเท่ากับหรือต่ํากว่าเวอร์ชันของสภาพแวดล้อมการเงินและการดําเนินงานเป้าหมายของคุณ เมื่อคุณใช้การอัปเดตคุณภาพกับสภาพแวดล้อมของคุณ ให้ดาวน์โหลดเวอร์ชันแพคเกจ NuGet ที่สอดคล้องกันเพื่อทําให้รุ่นของคุณสอดคล้องกัน หากคุณกําลังขยายแพลตฟอร์มเท่านั้น (ไม่มีการปรับแต่ง Application Suite) คุณอาจจําเป็นต้องใช้ CompilerPackage แพคเกจ และ Platform.DevALM.BuildXpp เท่านั้น อย่างไรก็ตาม ลูกค้าส่วนใหญ่ที่ขยายฟังก์ชันการทํางานของแอปพลิเคชันจําเป็นต้องมีห้าทั้งหมด
เผยแพร่แพคเกจไปยังตัวดึงข้อมูล Azure Artifacts
ในโครงการ Azure DevOps ของคุณ ให้ไปที่วัตถุ>สร้างฟีด ตั้งชื่อตัวดึงข้อมูล (ตัวอย่างเช่น
FinOpsNuGet) และเลือกสร้างดาวน์โหลดแพคเกจ NuGet จากไลบรารีแอสเซทที่แชร์ LCS ที่ตรงกับเวอร์ชันสภาพแวดล้อมเป้าหมายของคุณ
ดาวน์โหลด nuget.exe และเผยแพร่แต่ละแพคเกจลงในตัวดึงข้อมูลของคุณ คุณอาจต้องการใช้ปุ่ม เชื่อมต่อกับตัวดึงข้อมูล ใน Azure DevOps เพื่อรับ URL แบบเต็มที่จะใช้ในตัวอย่างด้านล่าง เนื่องจากโครงการที่เก่ากว่าอาจมีโครงสร้าง URL ที่แตกต่างกัน
nuget.exe push -Source "https://pkgs.dev.azure.com/<org>/<project>/_packaging/<feed>/nuget/v3/index.json" -ApiKey AZ Microsoft.Dynamics.AX.Platform.CompilerPackage.nupkg nuget.exe push -Source "https://pkgs.dev.azure.com/<org>/<project>/_packaging/<feed>/nuget/v3/index.json" -ApiKey AZ Microsoft.Dynamics.AX.Platform.DevALM.BuildXpp.nupkg nuget.exe push -Source "https://pkgs.dev.azure.com/<org>/<project>/_packaging/<feed>/nuget/v3/index.json" -ApiKey AZ Microsoft.Dynamics.AX.Application1.DevALM.BuildXpp.nupkg nuget.exe push -Source "https://pkgs.dev.azure.com/<org>/<project>/_packaging/<feed>/nuget/v3/index.json" -ApiKey AZ Microsoft.Dynamics.AX.Application2.DevALM.BuildXpp.nupkg nuget.exe push -Source "https://pkgs.dev.azure.com/<org>/<project>/_packaging/<feed>/nuget/v3/index.json" -ApiKey AZ Microsoft.Dynamics.AX.ApplicationSuite.DevALM.BuildXpp.nupkgตรวจสอบว่ามีห้าแพคเกจที่ปรากฏในฟีด Azure DevOps Artifacts ของคุณ
ขั้นตอนที่ 2: เพิ่มไฟล์การกําหนดค่าไปยังที่เก็บของคุณ
ไฟล์การกําหนดค่าสองตัวควบคุมว่าจะคืนค่าแพคเกจ NuGet และมาจากไหน เพิ่มทั้งสองไฟล์ไปยังโฟลเดอร์ในที่เก็บของคุณ เช่นBuildPipeline/
nuget.config
ไฟล์นี้จะชี้ NuGet ไปยังฟีด Azure Artifacts ของคุณ แทนที่ค่าตัวแทนข้อความด้วยชื่อองค์กร โครงการ และตัวดึงข้อมูลของคุณ
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="FinOpsNuGet" value="https://pkgs.dev.azure.com/<org>/<project>/_packaging/<feed>/nuget/v3/index.json" />
</packageSources>
</configuration>
packages.config
ไฟล์นี้ระบุเวอร์ชันที่แน่นอนของแต่ละแพคเกจ NuGet อัปเดตหมายเลขเวอร์ชันเพื่อให้ตรงกับแพคเกจที่คุณเผยแพร่ไปยังตัวดึงข้อมูลของคุณ
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Dynamics.AX.Platform.CompilerPackage" version="7.0.7367.146" targetFramework="net40" />
<package id="Microsoft.Dynamics.AX.Platform.DevALM.BuildXpp" version="7.0.7367.146" targetFramework="net40" />
<package id="Microsoft.Dynamics.AX.Application1.DevALM.BuildXpp" version="10.0.1935.21" targetFramework="net40" />
<package id="Microsoft.Dynamics.AX.Application2.DevALM.BuildXpp" version="10.0.1935.21" targetFramework="net40" />
<package id="Microsoft.Dynamics.AX.ApplicationSuite.DevALM.BuildXpp" version="10.0.1935.21" targetFramework="net40" />
</packages>
เคล็ดลับ
แพคเกจแพลตฟอร์ม (CompilerPackage และ ) ใช้Platform.DevALM.BuildXppแบบแผนเวอร์ชัน ในขณะที่แพคเกจแอปพลิเคชัน (7.0.XXXX.XX, Application1และ Application2) ใช้ApplicationSuite10.0.XXXX.XXแบบแผนเวอร์ชัน เวอร์ชันเหล่านี้เป็นอิสระและได้รับการอัปเดตด้วยการอัปเดตคุณภาพแต่ละครั้ง
ขั้นตอนที่ 3: สร้างไปป์ไลน์สร้าง
สร้างไฟล์ที่ชื่อว่า nightly-build.yml ในที่เก็บของคุณโดยใช้เทมเพลต YAML ด้านล่าง ไปป์ไลน์นี้จะคอมไพล์โค้ด X++ สร้างแพคเกจแบบรวมของ Power Platform และเผยแพร่อาร์ติแฟกต
- จาก Azure DevOps คลิกที่ ไปป์ไลน์ ในการนําทางด้านซ้าย จากนั้นคลิกปุ่ม สร้างไปป์ไลน์ใหม่ ตรงกลางของหน้า
- ในส่วน "รหัสของคุณอยู่ที่ไหน" ให้เลือก Azure Repos Git
- เลือกชื่อที่เก็บข้อมูลโค้ดของคุณ
- ภายใต้กําหนดค่าไปป์ไลน์ของคุณ เลือกไฟล์ YAML ของ Azure Pipelines ที่มีอยู่
- สุดท้ายให้เลือก 'nightly-build.yml' ที่สร้างขึ้นก่อนหน้านี้โดยใช้เทมเพลต YAML ด้านล่าง
ตัวแปรไปป์ไลน์
ไปป์ไลน์ใช้ตัวแปรเพื่อหลีกเลี่ยงการกําหนดหมายเลขเวอร์ชันและเส้นทางฮาร์ดโค้ด เมื่อคุณอัปเดตแพคเกจ NuGet สําหรับการอัปเดตคุณภาพใหม่ ให้เปลี่ยนเฉพาะตัวแปรเวอร์ชันเท่านั้น
ไปป์ไลน์ YAML แบบเต็ม
trigger: none
schedules:
- cron: '0 4 * * *' # Runs at 4:00 AM UTC every day
displayName: 'Nightly Build'
branches:
include:
- master
always: true
pool:
vmImage: 'windows-latest'
variables:
# -- NuGet package versions --
# Update these only when required if you have new Nuget package versions that you must use.
PlatformVersion: '7.0.7367.146'
ApplicationVersion: '10.0.1935.21'
# -- Paths --
NuGetConfigPath: '$(Build.SourcesDirectory)/BuildPipeline'
NuGetInstallDir: '$(Build.SourcesDirectory)/NuGets'
MetadataPath: '$(Build.SourcesDirectory)/XppMetadata'
SolutionPath: '$(Build.SourcesDirectory)/VS_Solutions/DataverseIntegration/DataverseIntegration.sln'
# -- NuGet package folder names (using -ExcludeVersion for stable paths) --
CompilerPackage: '$(NuGetInstallDir)/Microsoft.Dynamics.AX.Platform.CompilerPackage'
PlatformBuildRef: '$(NuGetInstallDir)/Microsoft.Dynamics.AX.Platform.DevALM.BuildXpp'
App1BuildRef: '$(NuGetInstallDir)/Microsoft.Dynamics.AX.Application1.DevALM.BuildXpp'
App2BuildRef: '$(NuGetInstallDir)/Microsoft.Dynamics.AX.Application2.DevALM.BuildXpp'
AppSuiteBuildRef: '$(NuGetInstallDir)/Microsoft.Dynamics.AX.ApplicationSuite.DevALM.BuildXpp'
# -- Unified package output --
UnifiedPackageOutput: '$(Build.ArtifactStagingDirectory)/UnifiedPackage'
stages:
- stage: Build
displayName: 'Compile X++ and Create Unified Package'
jobs:
- job: BuildXpp
displayName: 'Build X++ and package'
timeoutInMinutes: 120
steps:
# -------------------------------------------------------
# Step 1: Install NuGet packages
# -------------------------------------------------------
- task: NuGetCommand@2
displayName: 'Restore NuGet build packages'
inputs:
command: 'custom'
arguments: >
install "$(NuGetConfigPath)/packages.config"
-ConfigFile "$(NuGetConfigPath)/nuget.config"
-OutputDirectory "$(NuGetInstallDir)"
-ExcludeVersion
-Verbosity Detailed
-Noninteractive
# -------------------------------------------------------
# Step 2: Build the X++ solution
# -------------------------------------------------------
- task: VSBuild@1
displayName: 'Build X++ solution'
inputs:
solution: '$(SolutionPath)'
vsVersion: '17.0'
msbuildArgs: >
/p:BuildTasksDirectory="$(CompilerPackage)/DevAlm"
/p:MetadataDirectory="$(MetadataPath)"
/p:FrameworkDirectory="$(CompilerPackage)"
/p:ReferenceFolder="$(PlatformBuildRef)/ref/net40;$(App1BuildRef)/ref/net40;$(App2BuildRef)/ref/net40;$(AppSuiteBuildRef)/ref/net40;$(MetadataPath);$(Build.BinariesDirectory)"
/p:ReferencePath="$(CompilerPackage)"
/p:OutputDirectory="$(Build.BinariesDirectory)"
/p:CompilerMetadata="$(Build.BinariesDirectory)"
# -------------------------------------------------------
# Step 3: Install NuGet 3.3.0 (required for packaging)
# -------------------------------------------------------
- task: NuGetToolInstaller@1
displayName: 'Install NuGet 3.3.0 for packaging'
inputs:
versionSpec: '3.3.0'
# -------------------------------------------------------
# Step 4: Create the Power Platform unified package
# -------------------------------------------------------
- task: XppCreatePackage@3
displayName: 'Create Power Platform unified package'
inputs:
XppToolsPath: '$(CompilerPackage)'
CreateCloudPackage: true
CloudPackagePlatVersion: '$(PlatformVersion)'
CloudPackageAppVersion: '$(ApplicationVersion)'
CloudPackageOutputLocation: '$(UnifiedPackageOutput)'
DeployablePackagePath: '$(Build.ArtifactStagingDirectory)/AXDeployableRuntime.zip'
# -------------------------------------------------------
# Step 5 (Optional): Add Dataverse solutions to the package
# -------------------------------------------------------
# If you have Dataverse solutions (managed .zip files) that
# should be deployed alongside your X++ code, add them to
# the unified package. Each solution becomes part of the
# same package that pac package deploy will process.
- task: PowerPlatformToolInstaller@2
displayName: 'Install Power Platform Build Tools'
condition: and(succeeded(), ne(variables['DataverseSolutionsPath'], ''))
- task: PowerShell@2
displayName: 'Add Dataverse solutions to unified package'
condition: and(succeeded(), ne(variables['DataverseSolutionsPath'], ''))
inputs:
targetType: 'inline'
script: |
$solutionsPath = "$(DataverseSolutionsPath)"
$packageFolder = "$(UnifiedPackageOutput)"
if (-not (Test-Path $solutionsPath)) {
Write-Host "No Dataverse solutions path specified or found. Skipping."
exit 0
}
Write-Host "Looking for Dataverse solution .zip files in: $solutionsPath"
$solutions = Get-ChildItem -Path $solutionsPath -Filter "*.zip" -File
if ($solutions.Count -eq 0) {
Write-Host "No solution .zip files found. Skipping."
exit 0
}
# The unified package uses a specific folder structure.
# Dataverse solutions go under the PackageDeployer/solutions subfolder.
$targetDir = Join-Path $packageFolder "PkgFolder"
if (-not (Test-Path $targetDir)) {
New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
}
foreach ($sol in $solutions) {
Write-Host "Adding solution: $($sol.Name)"
Copy-Item -Path $sol.FullName -Destination $targetDir
}
Write-Host "Added $($solutions.Count) Dataverse solution(s) to the unified package."
# -------------------------------------------------------
# Step 6: Zip the unified package
# -------------------------------------------------------
# PowerPlatformPackageDeploy expects a .zip file, not
# an unzipped folder. Archive the unified package output
# before publishing.
- task: ArchiveFiles@2
displayName: 'Zip unified package'
inputs:
rootFolderOrFile: '$(UnifiedPackageOutput)'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/UnifiedPackage.zip'
# -------------------------------------------------------
# Step 7: Publish build artifacts
# -------------------------------------------------------
- task: PublishBuildArtifacts@1
displayName: 'Publish unified package artifact'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/UnifiedPackage.zip'
ArtifactName: 'UnifiedPackage'
- task: PublishBuildArtifacts@1
displayName: 'Publish deployable runtime package artifact'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/AXDeployableRuntime.zip'
ArtifactName: 'LCSPackage'
ทําความเข้าใจไปป์ไลน์
ไปป์ไลน์มีเจ็ดขั้นตอนหลัก:
| ขั้นตอน | งาน | จุดประสงค์ |
|---|---|---|
| 1 | NuGetCommand@2 |
คืนค่าคอมไพเลอร์และแพคเกจอ้างอิงจากตัวดึงข้อมูล Azure Artifacts ของคุณ ค่า -ExcludeVersion สถานะจะลบหมายเลขเวอร์ชันออกจากชื่อโฟลเดอร์ ดังนั้นเส้นทาง MSBuild จะยังคงอยู่ในความเสถียรในการอัปเดตเวอร์ชัน |
| 2 | VSBuild@1 |
คอมไพล์โซลูชัน X++ โดยใช้ MSBuild ด้วยอาร์กิวเมนต์ที่ชี้ไปยังตําแหน่งแพคเกจ NuGet สําหรับคอมไพเลอร์ การอ้างอิงแพลตฟอร์ม และการอ้างอิงแอปพลิเคชัน |
| 3 | NuGetToolInstaller@1 |
ติดตั้ง NuGet 3.3.0 ซึ่งจําเป็นต้องใช้ในงานบรรจุภัณฑ์ เวอร์ชัน 3.4 และใหม่กว่าใช้การกําหนดเวอร์ชันเชิงความหมายที่ไม่เข้ากันกับรูปแบบแพคเกจที่ปรับใช้ได้ |
| 4 | XppCreatePackage@3 |
สร้างทั้งแพคเกจที่สามารถปรับใช้ได้แบบดั้งเดิม (.zip) และแพคเกจรวมของ Power Platform แพคเกจแบบรวมเป็นรูปแบบที่จําเป็นสําหรับการปรับใช้กับสภาพแวดล้อมแบบรวมผ่านpac package deploy |
| 5 | PowerShell@2 |
(ไม่บังคับ) เพิ่มโซลูชัน Dataverse .zip ไฟล์ไปยังแพคเกจแบบรวมเพื่อให้การกําหนดค่า X++ และโซลูชัน Dataverse ถูกปรับใช้ร่วมกันเป็นหน่วยเดียว |
| 6 | ArchiveFiles@2 |
Zip โฟลเดอร์แพคเกจแบบรวมเป็น .zip ไฟล์ งาน PowerPlatformPackageDeploy จําเป็นต้องมีไฟล์เป็น .zip ข้อมูลป้อนเข้า ไม่ใช่โฟลเดอร์ที่คลายซิป |
| 7 | PublishBuildArtifacts@1 |
เผยแพร่รูปแบบแพคเกจทั้งสองเป็นวัตถุไปป์ไลน์สําหรับไปป์ไลน์การเผยแพร่ปลายทาง |
ขั้นตอนที่ 4: รวมถึงโซลูชัน Dataverse (ไม่บังคับ)
ประโยชน์หลักของสภาพแวดล้อมแบบรวมคือการกําหนดค่า X++ และโซลูชัน Dataverse ของการเงินและการดําเนินงานสามารถรวมเข้ากับแพคเกจที่ปรับใช้ได้แพคเกจเดียว ซึ่งหมายความว่าไปป์ไลน์เผยแพร่ของคุณใช้คําสั่งเดียว pac package deploy เพื่อปรับใช้ทุกอย่าง
เมื่อต้องการรวมโซลูชัน Dataverse ในการสร้างคืนของคุณ:
เพิ่มโซลูชันที่มีการจัดการ Dataverse .zip ไฟล์ไปยังโฟลเดอร์ในที่เก็บของคุณ (ตัวอย่างเช่น
DataverseSolutions/)DataverseSolutionsPathตั้งค่าตัวแปรในไปป์ไลน์ของคุณ:variables: DataverseSolutionsPath: '$(Build.SourcesDirectory)/DataverseSolutions'ขั้นตอนที่ 5 เป็นทางเลือกของไปป์ไลน์จะเลือกไฟล์ .zip ใด ๆ จากเส้นทางนั้นโดยอัตโนมัติและเพิ่มลงในแพคเกจแบบรวม
เมื่อไปป์ไลน์เผยแพร่เรียกใช้ pac package deployในภายหลัง จะประมวลผลแพคเกจแบบรวมทั้งหมด การปรับใช้ทั้งแพคเกจรันไทม์ X++ กับรันไทม์การเงินและการดําเนินการ และโซลูชัน Dataverse ไปยังสภาพแวดล้อม Dataverse
Note
ถ้าคุณไม่มีโซลูชัน Dataverse ให้ปล่อย DataverseSolutionsPath ตัวแปรว่างไว้หรือลบออก การตรวจสอบเงื่อนไขของขั้นตอนที่ 5 จะข้ามขั้นตอน Dataverse โดยอัตโนมัติ
ขั้นตอนที่ 5: อัปเดตเวอร์ชันแพคเกจสําหรับการอัปเดตคุณภาพ
เมื่อคุณใช้การอัปเดตคุณภาพใหม่ (PQU) กับสภาพแวดล้อมของคุณ ให้อัปเดตไปป์ไลน์การสร้างให้ตรงกัน:
- ดาวน์โหลดแพคเกจ NuGet ใหม่จากไลบรารีแอสเซทที่แชร์ของ LCS
- เผยแพร่เวอร์ชันใหม่ไปยังตัวดึงข้อมูล Azure Artifacts ของคุณ
- อัปเดต
packages.configด้วยหมายเลขเวอร์ชันใหม่ - อัปเดตตัวแปร
PlatformVersionไปป์ไลน์และApplicationVersionเพื่อให้ตรงกัน
เคล็ดลับ
ทําให้หมายเลขเวอร์ชันของคุณ packages.config ซิงค์กับ PlatformVersion ตัวแปรและ ApplicationVersion ไปป์ไลน์อยู่เสมอ ไฟล์ packages.config ควบคุมที่แพคเกจ NuGet จะถูกคืนค่า ในขณะที่ตัวแปรไปป์ไลน์บอก XppCreatePackage งานว่าแพลตฟอร์มใดและเมตาดาต้าเวอร์ชันแอปพลิเคชันที่จะประทับลงในแพคเกจแบบรวม
แก้ไข ปัญหา
| ปัญหา | การแก้ไขปัญหา |
|---|---|
| การสร้างล้มเหลวโดยมีการอ้างอิงที่ขาดหายไป | ตรวจสอบให้แน่ใจว่าคุณเผยแพร่แพคเกจ NuGet ทั้งห้ารายการไปยังตัวดึงข้อมูลอาร์ติแฟกต์ของคุณ และเวอร์ชันที่ตรงกันpackages.config หากคุณเป็นเพียงการขยายแพลตฟอร์ม คุณยังคงต้องการ Application1Application2และ ApplicationSuite สําหรับการแก้ปัญหาการอ้างอิง |
XppCreatePackage ล้มเหลวเมื่อเวอร์ชันไม่ตรงกัน |
ค่า CloudPackagePlatVersion และ CloudPackageAppVersion ต้องตรงกับเวอร์ชันแพคเกจ NuGet ที่คุณคืนค่า |
| การคืนค่า NuGet ล้มเหลวด้วย 401 | บัญชีบริการสร้างของไปป์ไลน์ของคุณต้องการการเข้าถึงตัว อ่าน ไปยังตัวดึงข้อมูล Azure Artifacts ไปที่สิทธิ์>ตัวดึงข้อมูล>วัตถุ และเพิ่มบริการรุ่น |
| การทําแพคเกจล้มเหลวโดยมีข้อผิดพลาดการกําหนดรุ่นเชิงความหมาย | ตรวจสอบให้แน่ใจว่าขั้นตอนที่ 3 ติดตั้ง NuGet 3.3.0 เวอร์ชัน 3.4 และรุ่นที่ใหม่กว่าแนะนําการกําหนดเวอร์ชันความหมายที่เข้ากันไม่ได้กับการสร้างแพคเกจที่ปรับใช้ได้ |
fnomoduledefinition.json file not found |
เส้นทาง CloudPackageOutputLocation อาจไม่ถูกต้อง หรือ XppToolsPath อาจไม่ชี้ไปยังแพคเกจคอมไพเลอร์ที่ถูกต้อง ตรวจสอบเส้นทางตัวแปรของคุณ |