docker - Azure 管道从错误的 Dockerfile 构建映像
问题描述
我的项目包含 2 个 Dockerfile,一个用于后端,一个用于模拟数据库。我在 Azure 中有一个使用以下脚本的构建管道:
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: CopyFiles@2
inputs:
SourceFolder: './MyProject'
Contents: '**'
TargetFolder: '$(build.artifactStagingDirectory)'
flattenFolders: true
- task: CopyFiles@2
inputs:
SourceFolder: './MyProject/Database'
Contents: '**'
TargetFolder: '$(build.artifactStagingDirectory)/Database'
flattenFolders: true
- task: ArchiveFiles@2
displayName: "Archive files"
inputs:
rootFolderOrFile: "$(build.artifactStagingDirectory)"
includeRootFolder: true
archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(build.artifactStagingDirectory)'
ArtifactName: 'backend'
我在那里放了 2 个 CopyFiles 步骤,因为我有 2 个 Dockerfile,一个在 /MyProject 中用于后端,一个在 /MyProject/Database 中用于模拟数据库。这样我可以稍后在我的发布管道中在两个 Dockerfile 之间进行选择。在下图中,我在后端文件夹中标记了一个 Dockerfile,您可以在 Database 文件夹中看到另一个 Dockerfile。
问题是,即使我为发布步骤选择放置在后端文件夹中的 Dockerfile,管道仍将 Dockerfile 用于数据库。大概这是因为这是它遇到的第一个 Dockerfile,即使它位于我指定的子目录中。如何让我的管道使用正确的 Dockerfile?
解决方案
发现问题:设置 flattenFolders: true 这样做是为了让子目录中的 Dockerfile 覆盖了顶层 Dockerfile。通过将其设置为 false,我得到了完整的文件夹结构,并且可以选择正确的 Dockerfile。
推荐阅读
- java - kafka-elasticsearch-consumer 单元测试问题
- javascript - p5.js 使用 setInterval、array.push()、for 循环创建动画时出现问题
- php - 如何让 Wordpress 编辑器访问 Google 插件的 Site Kit?
- json - Bash 脚本 / JSON - 从 {"Key":"Duration","Value":"N"} 中提取数值
- python - 在 matplotlib 中更改字体无法正常工作
- orm - 在没有 UI 事件的情况下更改模型时的 Odoo v12
- java - 在外部 Spring Boot Java 项目中访问属性 pf application.properties
- regex - Notepad ++如何删除特定字符和符号组合之前的所有字符
- javascript - AngularJS 元素指令不在 HTML 上呈现
- mysql - 配置文件中的 ProxySQL SSL 后端配置