AppVeyor推送tag时构建产物命名规则不同如何配置?
AppVeyor 区分普通构建与Tag构建的产物命名配置方案
你可以通过AppVeyor原生支持的条件配置语法实现需求,有两种常用实现方案:
方案一:分开声明两套产物规则
直接在artifacts节点下为两种场景分别定义规则,通过if参数控制生效条件:
artifacts: # 普通推送触发的构建生效 - path: Foo\bin\$(configuration) name: Foo_%APPVEYOR_BUILD_VERSION% type: zip if: not ($env:APPVEYOR_REPO_TAG -eq $true) # Tag推送触发的构建生效 - path: Foo\bin\$(configuration) name: Foo_%APPVEYOR_REPO_TAG_NAME% type: zip if: $env:APPVEYOR_REPO_TAG -eq $true
方案二:预定义统一产物名称变量
在构建前置阶段通过脚本判断场景,设置统一的产物名称变量,后续产物规则直接引用该变量即可,后续修改命名规则时只需要调整一处:
# 构建前置阶段设置变量,Windows构建用PowerShell语法如下 install: - ps: | if ($env:APPVEYOR_REPO_TAG -eq $true) { $env:ARTIFACT_PREFIX = "Foo_$($env:APPVEYOR_REPO_TAG_NAME)" } else { $env:ARTIFACT_PREFIX = "Foo_$($env:APPVEYOR_BUILD_VERSION)" } artifacts: - path: Foo\bin\$(configuration) name: $(ARTIFACT_PREFIX) type: zip
注意事项
- 判断逻辑依赖内置变量
APPVEYOR_REPO_TAG,该变量为布尔类型,Tag触发构建时自动取值为true - 如果使用Linux/macOS构建环境,把
install阶段的PowerShell脚本替换为对应bash语法即可 - 推送的Tag名称不要包含操作系统不允许的文件名非法字符,避免产物生成失败
内容的提问来源于stack exchange,提问作者Monk
相关产品推荐
相关产品推荐

