circleci - CircleCI - 字符串中的正则表达式过滤匹配
问题描述
我正在尝试过滤以确保分支中包含 jira 票证名称。工单名称可以是分支名称中的任何位置。
- uploadToJira:
requires:
- testDebug
- testRelease
filters:
branches:
only: /.*(jira|JIRA)-\d+.*/
这应该与feature-JIRA-18889-test
or bug-JIRA-2344
or之类的名称匹配jira-1233
,但它似乎没有这样做(尽管相同的正则表达式在 Java 中有效)。我究竟做错了什么?
更新:正则表达式/^pull.*/
有效,它告诉我它与分支的拉取请求名称匹配(这是 circleci 在检查代码时使用的名称)。这似乎是 circleci 中的一个错误,因为pull/383
没有给您足够的信息来匹配分支名称;他们都会是一样的。
解决方案
由于 PR 来自分叉的存储库,它不匹配。只有当它是来自非分叉存储库的 PR 时,分支匹配才有效。
上面@halfer 的建议是不过滤并让脚本本身确定它是否应该运行是我们最终的结果。
这是它的样子:
#!/bin/bash
TICKET_NUMBER_REGEX='(ourproject|OURPROJECT)-[0-9]+'
# if CIRCLE_PR_NUMBER is NOT set (meaning it is not a PR
# from a forked repository), then CIRCLE_BRANCH will
# contain the real branch name
if [ -z "${CIRCLE_PR_NUMBER}" ]; then
REAL_BRANCH_NAME="${CIRCLE_BRANCH}"
# if CIRCLE_PR_NUMBER is set, then we need to use it
# to fetch the real branch name
else
REAL_BRANCH_NAME=$(curl -s https://api.github.com/repos/"${CIRCLE_PROJECT_USERNAME}"/"${CIRCLE_PROJECT_REPONAME}"/pulls/"${CIRCLE_PR_NUMBER}"?access_token="${GITHUB_TOKEN}" | jq -r '.head.ref')
fi
TICKET_NUMBER="$(echo "${REAL_BRANCH_NAME}" | grep -Eo "${TICKET_NUMBER_REGEX}")"
# if the ticket number regex does not match, then it's not
# a feature branch, and we shouldn't upload to JIRA.
if [ -z "${TICKET_NUMBER}" ]; then
echo 'Not uploading JIRA APKS for non-feature branch.'
# if it is a feature branch, then use the script to upload the
# build to the correct ticket.
else
./scripts/jiraBuildUpload.py -s -t "$(echo "${REAL_BRANCH_NAME}" | grep -Eo "${TICKET_NUMBER_REGEX}")"
fi
推荐阅读
- c - 打印pid和errno
- swift - 可选类型“浮点数?”的值 必须解包为“Float”类型的值
- ios - 未调用 DidRefreshRegistrationToken,即使在卸载/安装之后也是如此。如何在 xamarin IOS 中获取已生成的 firebase 令牌,
- c# - youtube使用c#中的rest api上传问题?
- asp.net - 将剃须刀页面转换为 Angular 6 视图
- php - 从另一个表中插入具有一个值的数据 Mysql
- android - gradle实现依赖的继承类不能在另一个模块中使用
- xcode - 如何在 Xcode 中为不同的 git 分支设置不同的项目结构?
- hibernate - hibernate.hbm2ddl.auto 属性使用 create 而不是 update 创建表
- html - HTML5 引导带,spring JSTL 页面未按我希望的方式显示