【发布时间】:2021-06-29 09:57:15
【问题描述】:
我有一个带有变量DOCKER_TAG = 0.0.1的makefile
并且我希望在每个调用它的目标上都会遇到问题(仅补丁版本)是否可能
例如
DOCKER_TAG = 0.0.1
push:
docker push docker.io/testasm:$(DOCKER_TAG)
现在,如果我运行make push,它将使用版本0.0.1,但如果我第二次这样做,它将被撞到0.0.2,依此类推(每次运行make push),是否有可能?
更新我已经尝试了以下
DOCKER_TAG = 0.0.1
DOCKER_REGISTRY = testreg/vsp
VERSION_FILE := version.txt
-include $(VERSION_FILE)
VERMAJMIN := $(subst ., ,$(DOCKER_TAG))
DOCKER_TAG := $(shell [ -f "$(VERSION_FILE)" ] && cat "$(VERSION_FILE)" || echo '0.0.1')
VERMAJMIN := $(subst ., ,$(DOCKER_TAG))
VERSION := $(word 1,$(VERMAJMIN))
MAJOR := $(word 2,$(VERMAJMIN))
MINOR := $(word 3,$(VERMAJMIN))
NEW_MINOR := $(shell expr "$(MINOR)" + 1)
NEW_DOCKER_TAG := $(VERSION).$(MAJOR).$(NEW_MINOR)
NEW_DOCKER_TAG := $(VERSION).$(MAJOR).$(NEW_MINOR)
build:
echo "$(NEW_DOCKER_TAG)" > "$(VERSION_FILE)"
而version.txt 文件的值是.. 两个点...知道如何解决吗?
如果我选择答案中的最后一个选项原样
我看到version.txt 文件包含DOCKER_TAG := ..
更新 2
我创建了空的 version.txt 文件并按原样使用以下文件
VERSION_FILE := version.txt
DOCKER_TAG := 0.0.1.
-include $(VERSION_FILE)
VERMAJMIN := $(subst ., ,$(DOCKER_TAG))
NEW_DOCKER_TAG := $(VERSION).$(MAJOR).$(NEW_MINOR)
build:
docker build -t docker.io/vcd/test:$(DOCKER_TAG) .
echo "DOCKER_TAG := $(NEW_DOCKER_TAG)" > "$(VERSION_FILE)"
我在 version.txt 文件中得到了以下DOCKER_TAG := ..
【问题讨论】:
-
你知道不用make怎么做吗?我的意思是,如何使用
docker命令获取当前版本号,以及如何使用shell来递增它? -
@RenaudPacalet - 有没有办法让我采用像 0.0.1 这样的 var 值,当你运行一些目标来更新它时,像
push: updversion这样只增加最后一个值?跨度>
标签: bash shell makefile gnu-make