Azure集成JFrog Artifactory自动下载最新whl包方案咨询
实现方法
直接修改ArtifactoryGenericDownload@3任务的File Spec配置即可实现自动拉取最新正式版whl包的需求,无需硬编码版本号,也不需要额外编写自定义脚本,任务底层调用的JFrog CLI原生支持文件过滤、排序、下载数量限制能力。
方案1:单任务直接实现(推荐)
直接调整fileSpec配置,增加预发布版本排除规则、版本排序规则、下载数量限制即可,和你当前流水线使用的JFrog CLI 1.53.2版本完全兼容,修改后的完整任务配置如下:
- task: ArtifactoryGenericDownload@3 inputs: connection: "JFROG" specSource: "taskConfiguration" fileSpec: | { "files": [ { "pattern": "python/de-cf-dnalib/*/*.whl", "exclusions": ["*dev*"], "target": "./$(Pipeline.Workspace)/de-cf-dnalib/", "sortBy": "version", "sortOrder": "desc", "limit": 1, "recursive": true } ] } failNoOp: true
参数说明
pattern: 明确匹配de-cf-dnalib路径下所有版本子目录内的whl包,匹配范围和你当前执行时的实际路径一致exclusions: 排除所有路径中包含dev字符串的制品,自动过滤.dev0这类预发布版本,如果后续需要过滤alpha/beta/rc等其他预发布版本,只需要在数组里追加对应匹配规则即可,比如["*dev*", "*a*", "*b*", "*rc*"]sortBy: "version": 按语义化版本号排序,优先选版本号最高的正式版;如果你的Artifactory仓库未开启语义版本识别,把这个值改成created即可按制品上传时间倒序,取最新上传的正式版sortOrder: "desc": 倒序排列,让最新/最高版本排在最前limit: 1: 仅下载排序结果里的第一个制品,也就是符合要求的最新正式版recursive: true: 递归匹配子目录下的文件,和当前默认行为一致
方案2:先搜索再下载(适配老版本Artifactory)
如果你使用的Artifactory服务端版本较老,不支持在download的File Spec中直接使用sort/limit参数,可以拆成两个任务实现:
- 先用搜索任务查询符合过滤规则的所有正式版whl包,提取最新版本的元数据存为本地spec文件
- 再用下载任务读取spec文件拉取对应包
参考配置如下:
# 第一步:搜索定位最新正式版 - task: ArtifactoryGenericSearch@3 inputs: connection: "JFROG" specSource: "taskConfiguration" fileSpec: | { "files": [ { "pattern": "python/de-cf-dnalib/*/*.whl", "exclusions": ["*dev*"], "sortBy": "version", "sortOrder": "desc", "limit": 1 } ] } outputSpecPath: "$(Pipeline.Workspace)/latest_wheel.json" # 第二步:按搜索结果下载 - task: ArtifactoryGenericDownload@3 inputs: connection: "JFROG" specSource: "file" fileSpecPath: "$(Pipeline.Workspace)/latest_wheel.json" failNoOp: true
效果验证
配置完成后执行流水线,下载日志里只会出现最新正式版的whl包下载记录,不会再拉取历史版本和dev预发布版本,后续包版本迭代时会自动识别最高正式版本号,不需要修改流水线配置。如果你的whl包存放路径结构有调整,只需要对应修改pattern的匹配规则即可,过滤和排序逻辑保持不变。
内容的提问来源于stack exchange,提问作者Patryk Wilk
相关产品推荐
相关产品推荐

