如何在不将包发布到 npm 注册表的情况下,将依赖于纱线工作区的应用部署到 Google App Engine?



我目前正在将我们的单存储库迁移到纱线工作区。它包含多个包和服务。服务取决于其各自package.json中的软件包。我想将我的服务部署到 Google App Engine,而无需将包发布到私有 npm 注册表。

我设法通过使用自定义运行时并将app.yamlDockerfile移动到 monorepo 的根目录来部署单个服务,以便访问构建上下文中的包和服务。问题是我有多个服务,我不能将所有 dockerfile 都放在 monorepo 的根目录中,因为它们必须Dockerfile命名,并且我无法更改构建上下文。

我看到 2 个幼稚的解决方案:

第一种方法是在部署之前将相应服务的app.yamlDockerfile移动到单存储库的根目录。但这看起来很脏,会使 CI 代码非常复杂。

第二种方法是在 monorepo 的根目录中有一个Dockerfileservice1.yamlservice2.yaml等,并将变量传递给 Dockerfile。问题是我在 App Engine 文档中看不到任何将变量传递给自定义运行时Dockerfile的方法。

我梦想的解决方案是能够将每个Dockerfileapp.yaml保留在其各自服务的目录中,并能够通过gcloudCLI(就像我们在docker-compose中所做的那样(。 例:

project
├── package.json
├── packages
│   ├── package1
│   │   ├── package.json
│   │   └── src
│   ├── package2
│   │   ├── package.json
│   │   └── src
│   └── package3
│       ├── package.json
│       └── src
├── services
│   ├── service1
│   │   ├── app.yaml
│   │   ├── Dockerfile
│   │   ├── package.json
│   │   └── src
│   └── service2
│       ├── app.yaml
│       ├── Dockerfile
│       ├── package.json
│       └── src
└── yarn.lock

并运行类似以下内容:gcloud app deploy services/service1/app.yaml --build-context=.

但是我在文档中看不到任何方法可以做到这一点。

你知道我怎样才能更接近我的"梦想解决方案"吗?

添加注释中建议的可能选项以提供更多可见性。

一种可能性是保留您正在使用的docker-compose工作流程,并将其与您的 App Engine 部署集成。

由于您已经使用docker-compose构建 docker 映像以指定构建上下文,因此您可以将构建操作的结果推送到 Google 的容器注册表,以便以后可以使用--image-url标志使用这些映像来部署 App Engine。

相关内容

最新更新