【问题标题】:Bug in Azure devops pipeline/VS templates/dockerfile?Azure devops 管道/VS 模板/dockerfile 中的错误?
【发布时间】:2021-05-03 01:15:15
【问题描述】:

尝试使用管道将多项目应用部署到 Azure。在尝试了各种组合之后(管道日志显示过去几天大约有 75/80 次运行),看起来问题出在 Visual Studio 2019 的 Dockerfile 或某处的 Azure 管道上。

以下是我将其缩小到的范围:

项目A-

  1. 创建一个 vs asp.net core webapp 项目,比如 test1sp,
  2. 选中在同一文件夹中创建解决方案和项目的复选框,
  3. 选择 docker 支持(我选择了 Linux)或稍后添加
  4. 没有添加代码,样板代码按原样运行良好
  5. 将其添加到 GitHub
  6. 在 azure 中创建项目/管道,来源 Github,我使用没有 YAML 的经典编辑器
  7. 创建一个 docker build/push 任务和设置,我选择最基本的选项,订阅等。
  8. 构建效果很好,我还添加了部署到应用服务任务并将其部署到应用服务

项目 B - 我的项目名为 demo8

与项目 A 相同,除了步骤 #2 - 不要选择在同一文件夹中创建解决方案和项目。按照其余步骤操作,现在您应该会收到此错误。

Step 7/17 : COPY ["demo8/demo8.csproj", "demo8/"]
...
...
##[error]COPY failed: file not found in build context or excluded by .dockerignore: stat demo8/demo8.csproj: file does not exist

它在localhost/docker 上运行良好。所以,我猜可能 vs2019 使用了一些更宽容的实现来修补它。或者,azure 的实现有问题还是别的什么?

我对 Dockerfile 编辑比较陌生,看到了很多详细/复杂的场景,希望有人能解释一下如何让它工作?

这是项目文件/结构的屏幕截图:

更新 - 将 Dockerfile 移动到项目 B 中的解决方案文件夹使其在 azure BUT 中工作

  • 那么它在 Visual Studio 中不起作用,无法调试等。
  • 在项目和父文件夹中复制 Dockerfile(+ 保持同步)
  • 但是,如果您的解决方案有多个像我这样的项目,那么
  • 您必须将 Dockerfile 命名为不同的名称才能在父文件夹中具有唯一名称
  • 并修改管道以使用各自的文件名

张贴在这里以防它帮助某人。

【问题讨论】:

  • 能否共享与 Dockerfile 同级的文件基础架构?并给出 Dockerfile 的路径和文件 demo8.csproj。
  • @CharlesXu 添加在上面

标签: azure azure-devops dockerfile azure-devops-pipelines


【解决方案1】:

Dockerfile 中的代码必须具有 Dockerfile 所在文件夹级别的相对路径。

解决问题的两种方法。一是修改Dockerfile中的代码,对于项目B,可以这样修改COPY代码:

COPY ["demo8.csproj", "demo8/"]

另一种方法是将 Dockerfile 移动到与您的 COPY 代码匹配的路径。但是这样可能会影响到你Dockerfile中的其他代码。

而且你最好将你的项目规划在不同的文件夹中,并在不同的文件夹中为每个项目创建 Dockerfile。

【讨论】:

  • 是的,我在上面发布了一个可行的解决方法,但它充其量是笨拙的,至少忽略了 DRY 原则!鉴于代码是自动生成的,因此无法确定问题是在 vs2019 中的代码生成中还是在 Azure 管道中
  • @Kumar 实际上,我认为 DRY 原则取决于您,而不是 Docker。 Docker 是只帮你打包运行环境的工具。所以你需要自己做 DRY。
  • @Kumar 这个问题有什么更新吗?它解决了你的问题吗?如果它解决了您的问题,请接受它。
  • @Kumar 关于这个问题的任何更新?它解决了你的问题吗?
【解决方案2】:

我刚刚在 VS2022 中使用默认控制台应用程序遇到了这个问题。我通过将 ADO 构建管道的 Docker“构建和推送”步骤中的“构建上下文”参数从默认的 ** 更改为 **/.. 来修复它,以便工作目录是解决方案文件夹,它与 VS (AFAIK) 匹配.

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2023-01-09
    • 2020-05-28
    相关资源
    最近更新 更多