我目前正在将我们的单存储库迁移到纱线工作区。它包含多个包和服务。服务取决于其各自package.json
中的软件包。我想将我的服务部署到 Google App Engine,而无需将包发布到私有 npm 注册表。
我设法通过使用自定义运行时并将app.yaml
和Dockerfile
移动到 monorepo 的根目录来部署单个服务,以便访问构建上下文中的包和服务。问题是我有多个服务,我不能将所有 dockerfile 都放在 monorepo 的根目录中,因为它们必须Dockerfile
命名,并且我无法更改构建上下文。
我看到 2 个幼稚的解决方案:
第一种方法是在部署之前将相应服务的app.yaml
和Dockerfile
移动到单存储库的根目录。但这看起来很脏,会使 CI 代码非常复杂。
第二种方法是在 monorepo 的根目录中有一个Dockerfile
和service1.yaml
、service2.yaml
等,并将变量传递给 Dockerfile。问题是我在 App Engine 文档中看不到任何将变量传递给自定义运行时Dockerfile
的方法。
我梦想的解决方案是能够将每个Dockerfile
和app.yaml
保留在其各自服务的目录中,并能够通过gcloud
CLI(就像我们在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。