【发布时间】:2021-05-03 01:15:15
【问题描述】:
尝试使用管道将多项目应用部署到 Azure。在尝试了各种组合之后(管道日志显示过去几天大约有 75/80 次运行),看起来问题出在 Visual Studio 2019 的 Dockerfile 或某处的 Azure 管道上。
以下是我将其缩小到的范围:
项目A-
- 创建一个 vs asp.net core webapp 项目,比如 test1sp,
- 选中在同一文件夹中创建解决方案和项目的复选框,
- 选择 docker 支持(我选择了 Linux)或稍后添加
- 没有添加代码,样板代码按原样运行良好
- 将其添加到 GitHub
- 在 azure 中创建项目/管道,来源 Github,我使用没有 YAML 的经典编辑器
- 创建一个 docker build/push 任务和设置,我选择最基本的选项,订阅等。
- 构建效果很好,我还添加了部署到应用服务任务并将其部署到应用服务
项目 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