我有一个 DevOps 管道,曾经在
windows-latest
代理下运行。由于多种原因,我们最近将其移至 ubuntu-latest
。然而,自该更改以来,dotnet-ef
工具尚未将迁移 SQL 脚本输出到工件文件夹。
这是管道的(简化的)YML:
trigger:
- dev
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseDotNet@2
displayName: 'Use .NET8 SDK'
inputs:
useGlobalJson: false
packageType: sdk
version: 8.x
includePreviewVersions: false
- task: CmdLine@2
displayName: "Build EF Migrations"
inputs:
script: |
dotnet tool install --global dotnet-ef --version 8.0.7
dotnet ef migrations script -p FooBar.Domain -s FooBar.API -o "$(System.DefaultWorkingDirectory)/ef-migrations.sql" -i -v
# other build stages....
- task: PublishBuildArtifacts@1
displayName: "Publish Artifacts"
inputs:
artifactName: 'drop'
管道中的步骤运行良好,日志中没有错误。事实上,输出表明它已经创建了文件:
正在写入“/home/vsts/work/1/s/ef-migrations.sql”...
整理:构建 EF 迁移
问题是 Artifacts 文件夹不包含对该文件的引用:
谁能告诉我为什么会这样?
根据您的
PublishBuildArtifacts@1
任务,PathtoPublish
是默认值$(Build.ArtifactStagingDirectory)
,即/home/vsts/work/1/a
。
根据你的脚本
-o "$(System.DefaultWorkingDirectory)/ef-migrations.sql
,你的ef-migrations.sql
在$(System.DefaultWorkingDirectory)
,也就是/home/vsts/work/1/s
在发布构建工件之前,将
ef-migrations.sql
复制到 $(Build.ArtifactStagingDirectory)
。
- task: CmdLine@2
displayName: "Build EF Migrations"
inputs:
script: |
dotnet tool install --global dotnet-ef --version 8.0.7
dotnet ef migrations script -p FooBar.Domain -s FooBar.API -o "$(System.DefaultWorkingDirectory)/ef-migrations.sql" -i -v
cp ef-migrations.sql $(Build.ArtifactStagingDirectory)