【问题标题】:Lerna monorepo publish docker images instead of npm packagesLerna monorepo 发布 docker 镜像而不是 npm 包
【发布时间】:2022-01-20 11:55:24
【问题描述】:

我目前正在将我的后端从 polyrepo 或 multirepo 转移到 monorepo。 我已经成功地将共享包移动到 Lerna monorepo 中,现在是微服务的时候了。 我的项目结构很简单:

root
  services
    service_written_in_node
       Dockerfile
       package.json
    service_Written_in_something_else
       Dockerfile
  packages
     shared_package_1
         package.json
     shared_package_2
         package.json
    

所以基本上packages 目录中的所有内容都应该发布到 npm,services 目录中的所有内容都应该发布到 Docker 注册表。

【问题讨论】:

  • 问题是什么?您想知道如何将您的服务的构建镜像推送到您的私有镜像仓库?
  • 我希望 lerna 或其他脚本运行 docker build 并推送从最新版本更改的每个服务。
  • 我对 lerna 了解不多,但我想我理解它是 javascript 的东西。如果您想要构建任何微服务,请尝试让您的 CI 构建您的映像并将其推送到注册表。我会在这里忘记lerna。只需使用 github / gitlab ...

标签: node.js docker monorepo lerna


【解决方案1】:

您可以使用package.json 的功能并在那里添加postinstall 脚本。

例如:

"scripts": {
    "postinstall": "npm run docker-build-publish",
    "docker-build-publish: "docker build .... {ADD HERE SCRIPTS TO PUSHLISH}
}

在每个有 Dockerfile 的服务中都有这个。

在 repo 的根目录中,您可以使用 lerna bootstrap 作为您的 postinstall 来触发对每个服务的安装。

您可以随时查看其他更适合您用例的 pre 和 post 脚本:https://docs.npmjs.com/cli/v8/using-npm/scripts

【讨论】:

  • 但是这个命令会为monorepo的每个服务运行docker-build-publish,我想只为改变的服务运行它。
  • @Yurgen Lerna 仅在更改后运行。因此,在每个 service 中,在每个 service 的每个 package.json 中都有那个 postinstall 脚本。它只会 docker-build-publish 那些被 Lerna 更改和安装的人。
猜你喜欢
  • 2020-04-06
  • 2023-03-18
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多