如何为 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 ." }
}
如果你运行这个你会得到类似
的东西
我正在构建一组 运行 在 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 ." }
}
如果你运行这个你会得到类似
的东西