首页 > 解决方案 > CircleCI - 字符串中的正则表达式过滤匹配

问题描述

我正在尝试过滤以确保分支中包含 jira 票证名称。工单名称可以是分支名称中的任何位置。

      - uploadToJira:
          requires:
            - testDebug
            - testRelease
          filters:
            branches:
              only: /.*(jira|JIRA)-\d+.*/

这应该与feature-JIRA-18889-testor bug-JIRA-2344or之类的名称匹配jira-1233,但它似乎没有这样做(尽管相同的正则表达式在 Java 中有效)。我究竟做错了什么?

更新:正则表达式/^pull.*/有效,它告诉我它与分支的拉取请求名称匹配(这是 circleci 在检查代码时使用的名称)。这似乎是 circleci 中的一个错误,因为pull/383没有给您足够的信息来匹配分支名称;他们都会是一样的。

标签: circleci

解决方案


由于 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

推荐阅读