如何为 node.js 和 docker 保持版本干燥

How to keep version DRY for both node.js and docker

我正在构建一组 运行 在 Docker 上并使用 Kubernetes 编排的微服务。我在 Node.js 中构建服务,因此对于每个服务,我都有一个具有版本的 package.json 文件。我想在构建 docker 图像时使用此版本,并且为了使构建命令简单,我希望它成为 package.json 中的脚本。但是,我想保持版本号 DRY(即避免在整个 package.json 文件中散布版本号,或有任何其他副本)。例如,如果我有以下 package.json,我如何在脚本中引用版本以避免重复?

{
  "name": "sample-service",
  "version": "1.0.0",
  "description": "Sample service",
  "dependencies": {
    ...
  },
  "scripts": {
    "docker": "docker build -t prefix/image-name:$version ."
  }
}

显然,在标签中使用 $version 是行不通的,还有其他方法吗?为了以防万一,我使用 yarn 而不是 npm

是先获取package.json

的版本

然后将版本导出到变量,以便您可以将其作为 variable 访问。

这是你的package.json

{
  "name": "sample-service",
  "version": "1.0.0",
  "description": "Sample service",
  "dependencies": {
  },
  "scripts": {
    "docker": "export version=$(node -e \"console.log(require('./package.json').version)\") || set version=$(node -e \"console.log(require('./package.json').version)\") ; echo version is: $version;  docker build -t prefix/image-name:$version ."  }
}

如果你运行这个你会得到类似

的东西