首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash (通过Jenkins) regex if/else

Bash (通过Jenkins) regex if/else
EN

Stack Overflow用户
提问于 2016-05-09 10:49:27
回答 1查看 1.7K关注 0票数 0

我正在尝试从Jenkins的分支名称(Ubuntu12.04上的1.617)中提取Jira故事号,以便我的Maven部署( web应用程序的Maven部署)可以使用这个Jira编号来标记应用程序名。如果没有吉拉的故事号,我想让树枝贴上"bugfix“的标签。

例如,我办理ABC-123_Some_Feature分行登记手续。Jenkins发现有一个签入,并构建了该项目。然后提取"ABC-123“部分并将应用程序部署到http://my-dev-server/ABC-123中。

这一切我都做得很好,除了regex。特别是在通过Jenkins运行时的regex。

为了大大简化问题,在托管Jenkins实例的Ubuntu 12机器上,通过命令行,我可以这样做:

代码语言:javascript
运行
复制
xxx@yyy:/$ [[ abc_ABC-123_def =~ (ABC-[[:digit:]]*) ]] && echo "match" || echo "No match"
match
xxx@yyy:/$ [[ abc_XXX-ZZZ_def =~ (ABC-[[:digit:]]*) ]] && echo "match" || echo "No match"
No match

但是,当我在否则为空的Jenkins作业中的"Execute“构建命令中使用相同的脚本时,”控制台输出“是

代码语言:javascript
运行
复制
[EnvInject] - Loading node environment variables.
Building in workspace /var/lib/jenkins/jobs/TEST PROJECT/workspace
[workspace] $ /bin/sh -xe /tmp/hudson4251159992600854370.sh
/tmp/hudson4251159992600854370.sh: 2: /tmp/hudson4251159992600854370.sh: Syntax error: "(" unexpected
Build step 'Execute shell' marked build as failure
Finished: FAILURE

我假设意外的开始括号是regex字符串的开始。然而,我需要它来匹配这个小组。

我也尝试过用双反逗号包装正则表达式(例如"(ABC-[[:digit:]]*)",它的刺激效果是脚本不会失败,但它确实会产生错误的“不匹配”结果。)

FWIW我想做的是,如果我能够找出regex脚本的问题所在--将Jira号分配给一个名为branch的变量,稍后在构建脚本中使用该变量:

代码语言:javascript
运行
复制
[[ echo "${GIT_BRANCH#*/feature/}" =~ (ABC-[[:digit:]]*) ]] && branch=echo "${BASH_REMATCH[1]}" || branch="bugfix"

旁白:我通过另一种类似的脚本“有点”地完成了这个任务,但是if/else却让我无法理解。如果变量branch发生在分支名称中,则可以将其设置为ABC-123,但如果没有,grep就会失败,从而导致构建失败。

代码语言:javascript
运行
复制
branch=$(echo "${GIT_BRANCH#*/feature/}" | grep -o  'ABC-[0-9]\+')

最后,这个问题类似于this one,但是Jenkins特有的奇怪之处还没有答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-09 12:06:15

非常感谢chorobaJohn Mark Mitchell把我推向正确的方向。

在我的Jenkins "Execute脚本“构建步骤中工作的解决方案是

代码语言:javascript
运行
复制
 `!/bin/bash     # Name the build with the JIRA number taken from the branch name.      # NOTE: the first line (aka shebang) is required to force /bin/bash shell (instead of /bin/sh) which handles the regex below.     [[ ${GIT_BRANCH#*/feature/} =~ (ABC-[[:digit:]]*) ]] && branch="${BASH_REMATCH[1]}" || branch="bugfix"     echo "Branch is $branch"     echo feature_name=$branch > feature.prop`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37113869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档