【问题标题】:how to chop string and random version number in unix shell script如何在 unix shell 脚本中截断字符串和随机版本号
【发布时间】:2018-01-24 20:40:17
【问题描述】:

假设我在 Nexus 中有一个名为“abc-1.0.war”的工件。 Jenkins 不断从 nexus 中提取最新的工件,例如“abc-1.2.war、abc-1.3.war 等”,并通过 jenkins 构建 Docker 镜像。

现在我想知道如何使用每次递增的最新版本定义 docker 标签并存储在 jenkins 中。例如:ankur/java:1.0, ankur/java:1.1 ?

我已经在 jenkins 中定义了执行 shell,它将工件值分隔为 2 部分 (f1:f2),以便我可以将这些变量值定义到标签中以确认版本,但它没有工作。

如果我可以定义更多技术,请告知

comp=$COMPONENT 回声 $COMPONENT VERSION='回声 $comp |剪切 -d ":" -f2 ARTIFACT-ID='echo $comp |剪切 -d ":" -f1

还可以在 jenkins 中为 Docker 执行 shell: 导出 Dockerfile=Dockerfile 导出 IMG=$(DTR)/$(REPO)/$(APP_COMPONENT):$(ENVIRONMENT)-$(VERSION)-$(APP_COMPONENT)

(注意:$COMPONENT,$DTR,$REPO,$APP_COMPONENT, $ENVIRONMENT 是 jenkins 中的字符串参数,我在构建时定义硬编码值”

【问题讨论】:

  • 请在每行代码/数据/错误消息的前面使用4个空格或突出显示一个文本块并使用编辑框左上角的{}格式工具格式化为code/data/output/errorMsgs。有关详细信息,请参阅 editing-helpformatting。祝你好运。

标签: shell unix docker jenkins


【解决方案1】:

如果我误解了您的问题,请纠正我。 假设您的 $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

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

这些对你有用吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 2012-11-14
    • 2017-07-06
    • 1970-01-01
    • 2012-01-29
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多