如何在Azure DevOps流水线中传递Docker容器输出作为构建工件
在Azure DevOps流水线中传递Docker容器输出文件的方案
核心思路
把Docker容器内的输出目录挂载到流水线代理主机的本地目录,将容器生成的文件同步到主机后,再通过Azure DevOps的PublishPipelineArtifact任务将文件发布为流水线制品,后续阶段通过DownloadPipelineArtifact任务获取即可。
具体实现步骤
1. 第一阶段:运行模型训练容器并导出输出文件
在训练阶段的Docker运行命令中,使用-v参数将容器内的输出目录(假设你的similarity.py在容器内的/app目录下,生成的data文件夹在此)挂载到代理主机的$(Build.ArtifactStagingDirectory)/model-data目录(该目录是Azure DevOps预定义的临时目录,专门用于存放待发布的制品)。
示例YAML片段:
stages: - stage: Train_Model jobs: - job: Train steps: - script: | # 构建训练镜像 docker build -t model-train -f Dockerfile.train . # 运行容器并挂载目录,将容器内data文件夹同步到主机 docker run -v $(Build.ArtifactStagingDirectory)/model-data:/app/data model-train python similarity.py displayName: '运行模型训练容器' - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.ArtifactStagingDirectory)/model-data' artifact: 'trained-model' publishLocation: 'Container' displayName: '发布训练模型制品'
2. 第二阶段:下载制品并构建API容器
在API构建阶段,先下载之前发布的trained-model制品,然后将下载的模型目录同步到源码目录,供Dockerfile读取使用。
示例YAML片段:
- stage: Build_API dependsOn: Train_Model jobs: - job: Build steps: - task: DownloadPipelineArtifact@2 inputs: artifact: 'trained-model' path: '$(Build.SourcesDirectory)/data' # 将模型文件下载到源码目录的data文件夹,供Dockerfile访问 displayName: '下载训练模型制品' - script: | # 构建API镜像,此时Dockerfile可直接读取$(Build.SourcesDirectory)/data下的模型文件 docker build -t api-service -f Dockerfile.api . displayName: '构建API容器镜像'
关键注意事项
- 确保
Dockerfile.train中,similarity.py生成的模型文件确实输出到容器内的指定目录,需根据实际路径调整挂载参数。 - 优先使用
$(Build.ArtifactStagingDirectory)而非自定义目录,避免权限问题,该目录是Azure DevOps流水线默认拥有读写权限的目录。 - 两个阶段必须通过
dependsOn明确依赖关系,保证训练阶段完成后再执行API构建阶段。
内容的提问来源于stack exchange,提问作者Psychotechnopath
相关产品推荐
相关产品推荐

