den*_*dog 4 typescript docker google-cloud-platform monorepo google-cloud-run
我们有一个monorepo设置,其中每个文件夹都有一个typescript/node服务。还有一个共享/types文件夹,我们使用打字稿项目引用将其拉入每个项目。
由于您无法复制父文件夹,因此我们在本地使用:
docker build -f Dockerfile ..
哪个工作正常,但是使用 docker 构建器尝试相同的操作cloudbuild.yaml会抛出以下错误,关于丢失的文件描述符?
docker.io/library/docker:latest
error checking context: 'file ('/proc/1/fd/5') not found or excluded by .dockerignore'.
ERROR
ERROR: build step 0 "docker" failed: step exited with non-zero status: 1
------------------------------------------------------------------------------------------------------------------------------------------------
ERROR: (gcloud.builds.submit) build dc31344a-b836-4089-87ab-e6ce7c69cab3 completed with status "FAILURE"
Run Code Online (Sandbox Code Playgroud)
那么,我们如何gcloud build在单一存储库中使用云运行服务,同时仍然引入我们的共享类型呢?
当您运行 Cloud Build 作业时,它会复制当前目录中的所有文件。如果您位于子目录中,则所有同级目录或父目录都不会上传,因此在 Cloud Build 上是已知的。
为此,您必须在父目录级别运行 Cloud Build 作业,并在命令中引用 CloudBuild.yaml 文件(并指向正确的子目录)。
考虑也更改您的 cloudbuild.yaml 步骤定义,因为您的根文件夹不再是子目录,而是根目录。您可以使用该directory参数来指定每个步骤的工作目录。
编辑1
如果您不想在每个组件构建中上传整个 monorepo,则可以在手动触发 gcloud builds Summit 命令时忽略文件。
但是您不能使用触发器来执行此操作。您可以忽略文件,但这一次,这意味着在构建作业触发条件中必须忽略文件(例如,自述文件,当您推送它时,触发新构建是没有用的)。但是,如果构建是由其他文件触发的,这些“忽略的文件”仍然会出现在运行作业中。
| 归档时间: |
|
| 查看次数: |
1771 次 |
| 最近记录: |