如何通过AppVeyor将x86和x64产物部署至GitHub Releases?
解决AppVeyor构建x86/x64版本时部署到GitHub Releases的覆盖问题
我明白你遇到的问题了——AppVeyor会为x86和x64平台分别启动独立的构建任务,每个任务只会生成对应平台的可执行文件,然后各自执行部署步骤。因为你设置了force_update: true,后执行的任务会直接覆盖GitHub Releases里的内容,最终只留下最后一个任务上传的文件。
下面是两种可行的解决方案,帮你把两个平台的可执行文件一起部署到GitHub Releases:
方法一:使用Final Job统一部署(推荐)
这种方法会创建一个专门的"最终任务",等待x86和x64的构建任务全部完成后,一次性把两个平台的可执行文件上传到GitHub Releases,完全避免覆盖问题。
修改你的appveyor.yml如下:
version: '{build}' image: Visual Studio 2017 configuration: Release # 定义构建矩阵,包含x86、x64构建任务,以及一个用于部署的final任务 matrix: include: - platform: x86 - platform: x64 - platform: final build: off # 这个任务不执行构建 depends_on: - x86 # 依赖x86任务成功完成 - x64 # 依赖x64任务成功完成 # 只有非final任务才执行构建 build: verbosity: minimal condition: platform != final # 为每个平台生成对应的artifact,添加条件避免找不到文件的警告 artifacts: - path: Release\pathfinding.exe name: pathfinding-x86.exe condition: platform == x86 - path: x64\Release\pathfinding.exe name: pathfinding-x64.exe condition: platform == x64 # 只在final任务中执行部署,一次性上传两个artifact deploy: - provider: GitHub auth_token: secure: the-token-is-hidden-on-purpose force_update: true artifact: pathfinding-x86.exe, pathfinding-x64.exe # 指定要上传的所有文件 on: APPVEYOR_REPO_TAG: true platform: final # 限制仅在final任务执行部署
方法二:调整部署策略,关闭强制更新(不推荐)
如果你不想添加额外任务,可以关闭force_update: true,让每个任务上传的文件追加到Releases中,而不是覆盖。但这种方法有个缺点:如果后续重新构建,Releases里会积累重复文件,需要手动清理。
修改deploy部分的配置:
deploy: - provider: GitHub auth_token: secure: the-token-is-hidden-on-purpose force_update: false # 关闭强制更新,改为追加文件 on: APPVEYOR_REPO_TAG: true
不过还是推荐第一种方法,它更清晰、可控,也不会产生冗余文件。
内容的提问来源于stack exchange,提问作者user7853410
相关产品推荐
相关产品推荐

