我正在尝试从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机器上,通过命令行,我可以这样做:
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“构建命令中使用相同的脚本时,”控制台输出“是
[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的变量,稍后在构建脚本中使用该变量:
[[ echo "${GIT_BRANCH#*/feature/}" =~ (ABC-[[:digit:]]*) ]] && branch=echo "${BASH_REMATCH[1]}" || branch="bugfix"旁白:我通过另一种类似的脚本“有点”地完成了这个任务,但是if/else却让我无法理解。如果变量branch发生在分支名称中,则可以将其设置为ABC-123,但如果没有,grep就会失败,从而导致构建失败。
branch=$(echo "${GIT_BRANCH#*/feature/}" | grep -o 'ABC-[0-9]\+')最后,这个问题类似于this one,但是Jenkins特有的奇怪之处还没有答案。
发布于 2016-05-09 12:06:15
非常感谢choroba和John Mark Mitchell把我推向正确的方向。
在我的Jenkins "Execute脚本“构建步骤中工作的解决方案是
`!/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`https://stackoverflow.com/questions/37113869
复制相似问题