如何配置VSTS流水线:仅部署Web项目并执行Selenium测试?
如何配置构建流水线:生成两类产物但仅部署Web项目
我来给你拆解下具体怎么操作,刚好我之前在配置类似流水线的时候踩过坑,核心思路就是让构建阶段同时生成Web和测试项目的二进制文件,但是只把Web项目的输出打包成发布工件,这样发布流水线就只需要处理Web工件,完全碰不到测试项目的产物。
1. 构建流水线的核心配置步骤
第一步:完整构建解决方案(包含Web和测试项目)
用VS Build任务(或者对应语言的构建任务),确保构建范围包含整个解决方案,比如指定解决方案路径为**/*.sln。这一步必须同时构建Web和测试项目,因为只有生成了测试项目的二进制文件,后续才能运行Selenium测试。
如果用YAML配置,示例代码如下:
- task: VSBuild@1 inputs: solution: '**/*.sln' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' # 这些参数确保Web项目生成可部署的输出,但不自动发布 msbuildArgs: '/p:DeployOnBuild=false /p:WebPublishMethod=Package /p:PackageAsSingleFile=true'
第二步:运行Selenium测试
添加VSTest任务(或对应测试运行任务),指定测试项目的dll路径,比如**/*Test*.dll(根据你的测试项目命名规则调整),这样就能运行类库中的集成测试了。注意:这一步只需要执行测试,不需要把测试产物打包。
YAML示例:
- task: VSTest@2 inputs: testSelector: 'testAssemblies' testAssemblyVer2: | **/*Test*.dll !**/obj/** # 排除obj文件夹里的临时文件 searchFolder: '$(System.DefaultWorkingDirectory)'
第三步:仅打包Web项目的输出为发布工件
这是最关键的一步,我们要把Web项目的构建输出单独拎出来,打包成工件,而测试项目的产物留在构建代理的工作目录里(不会被发布)。
可以分两步操作:
- 用「Archive Files」任务把Web项目的发布文件夹打包成zip文件,源文件夹设为Web项目的输出路径(比如
$(System.DefaultWorkingDirectory)/YourWebApp/bin/$(buildConfiguration)/net6.0/publish,根据你的.NET版本和项目结构调整)。 - 用「Publish Build Artifacts」任务把这个zip文件发布为工件,命名比如
WebApp。
YAML示例:
- task: ArchiveFiles@2 inputs: rootFolderOrFile: '$(System.DefaultWorkingDirectory)/YourWebApp/bin/$(buildConfiguration)/net6.0/publish' includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/WebApp.zip' replaceExistingArchive: true - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'WebApp' publishLocation: 'Container'
2. 发布流水线的配置
发布流水线只需要做一件事:拉取构建流水线生成的WebApp工件,然后用对应的部署任务(比如Azure Web App任务)把这个zip包部署到托管环境即可。因为测试项目的产物根本没被包含在工件里,所以完全不会被部署到托管环境。
额外注意点
- 如果你的Web项目是用其他技术栈(比如Node.js),只需要把构建和打包步骤换成对应技术栈的任务就行,核心逻辑不变:完整构建所有项目→运行测试→仅打包Web项目输出为工件。
- 测试项目的构建产物会留在构建代理的工作目录,但构建代理会自动清理这些临时文件,不需要手动处理。
内容的提问来源于stack exchange,提问作者Matt W
相关产品推荐
相关产品推荐

