我是 Azure 构建管道的新手,在某种程度上我已经成功创建了构建和发布工件。
问题:当构建准备就绪并且我正在复制工件时,它会进入一些奇怪的路径,我在下载后可以看到它。
喜欢==>
My.Web\Content\D_C\a\1\s\My.Web\obj\Release\Package\PackageTmp
我只需要包含发布版本的 zip,可以直接复制到 IIS。
trigger:
- '*'
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/t:build /p:DeployOnBuild=true /p:OutputPath="$(Build.ArtifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(build.artifactStagingDirectory)\_PublishedWebsites\My.Web_Package\My.Web.zip'
publishLocation: 'pipeline'
artifact: 'drop'
name: 'WebArtifact-$(Build.BuildNumber)'
让我知道我做错了什么,另外在我的解决方案下有多个项目库,但我需要 ASP.NET MVC 5 Web 项目应用程序的单个发布版本,该版本位于我的解决方案中。
如果有更好的方法来编写这个管道,请公会。
还请告诉我我们是否可以添加相同的内部版本号/版本号。
非常感谢您的任何建议和意见。
神器将默认发布
VS 构建任务将构建您的应用程序,类似于使用 MSBuild 构建任务的 Visual Studio。
Visual Studio:-
Ms Build 用于构建应用程序:-
我构建了应用程序并将其发布到本地文件夹中,构建文件夹如下所示:-
Azure 构建管道:-
同样的事情发生在您的Azure DevOps管道中,当您使用Vs Build时,构建是通过Ms Build完成的,并且发布的工件存储在 -
$(Build.ArtifactStagingDirectory)
> 根据此MS文档: Build.ArtifactStagingDirectory
是用于运行管道的 Azure DevOps Agent 的预定义变量。当您使用 windows-latest 作为代理时,Build.ArtifactStagingDirectory 会路由到 c:\agent_work\1\a
。因此它被存储到上面的默认位置。
我已使用下面的 YAML pipeline 来 build
Asp.Net MVC 5
项目并将其发布为 zip
,并将已发布的工件名称设置为构建号。
VsBuild 参考这里。
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)\WebApp.zip'
ArtifactName: 'WebArtifact-$(Build.BuildNumber)'
publishLocation: 'Container'
输出:-
但是,不要使用
VSbuild task
,并且由于您需要管理多个包和库,我建议使用.NET Core CLI
任务来构建您的应用程序,然后将其发布到IIS,如下所示:-
trigger:
branches:
include:
- main
jobs:
- job: Build
displayName: 'Build and Publish'
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core SDK'
inputs:
version: '7.x'
- task: DotNetCoreCLI@2
displayName: 'Restore Dependencies'
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Build Project'
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration Release'
- task: DotNetCoreCLI@2
displayName: 'Publish Project'
inputs:
command: 'publish'
projects: '**/*.csproj'
publishWebProjects: true
arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: true
- task: PublishPipelineArtifact@1
displayName: 'Publish Artifact'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: 'WebArtifact-$(Build.BuildNumber)'
publishLocation: 'pipeline'
有
zipAfterPublish: true
参数,它将在构建完成后压缩构建工件。
输出:-