假设我在Nexus中有一个名为“abc-1.0.war”的工件。 Jenkins继续从nexus中提取最新的工件,例如“abc-1.2.war,abc-1.3.war& so”,并通过jenkins构建Docker镜像。
现在我想知道如何定义具有最新版本的docker标记,每次增加并存储在jenkins中。例如:ankur / java:1.0,ankur / java:1.1?
我已经在jenkins中定义了执行shell,它将工件值分隔为2个部分(f1:f2),这样我可以将这些变量值定义为标记以确认版本,但它不起作用。
请告知我是否有更多可以定义的技术
排版= $ COMPONENT echo $ COMPONENT VERSION ='echo $ comp | cut -d“:” - f2 ARTIFACT-ID ='echo $ comp | cut -d“:” - f1
还在jenkins中为Docker执行shell: export Dockerfile = Dockerfile export IMG = $(DTR)/ $(REPO)/ $(APP_COMPONENT):$(ENVIRONMENT) - $(VERSION) - $(APP_COMPONENT)
(注意:$ COMPONENT,$ DTR,$ REPO,$ APP_COMPONENT,$ ENVIRONMENT是jenkins中的字符串参数,我在构建时定义硬编码值“
答案 0 :(得分:0)
如果我误解了你的问题,请纠正我。
假设您的$COMPONENT
变量包含Nexus文件的名称,那么类似于“abc-1.2.war”
然后您可以获得版本号“1”和“2”,如下所示:
COMPONENT=abc-1.2.war
comp=$COMPONENT
tail=$(echo $comp | cut -d "-" -f2)
VERSION=$(echo $tail | cut -d "." -f1).$(echo $tail | cut -d "." -f2)
注意$(...)语法将剪切调用的结果赋给变量。
然后您可以使用它来构建docker文件:
docker build -t ankur/java:$VERSION
重构您的Execute shell:
export Dockerfile=Dockerfile
export IMG=$DTR/$REPO/$APP_COMPONENT:$ENVIRONMENT-$VERSION-$APP_COMPONENT
注意我从变量中删除了括号。
这对你有用吗?