如何在unix shell脚本中删除字符串和随机版本号

时间:2018-01-24 20:40:17

标签: shell unix docker jenkins

假设我在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中的字符串参数,我在构建时定义硬编码值“

1 个答案:

答案 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

注意我从变量中删除了括号。

这对你有用吗?