You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI中JIRA状态校验的if条件失效问题求助

问题修复方案

你的问题出在两个核心点:

  1. jq输出带双引号:默认jq会把字符串输出用双引号包裹(比如"Done"),导致状态值带引号,无法匹配不带引号的正则表达式
  2. Bash条件匹配逻辑错误:[[ ... == ... ]]用于通配符匹配,而非正则表达式匹配,正则匹配需要用=~运算符

修复步骤

1. 修正JIRA状态提取命令

使用jq -r(raw模式)输出不带引号的纯文本状态值:

- export JIRA_STATUS=$(echo ${JIRA_DETAIL} | jq -r '.fields.status.name')

2. 修正if条件判断

把==替换为=~,启用正则表达式匹配:

- |
   if [[ "$JIRA_STATUS" =~ ^(Done|Completed|Closed)$ ]] 
    then 
      echo "Invalid JIRA (Done/Completed/Closed) found!"
      exit 1
    else 
      echo "Valid JIRA Id found!" 
   fi    

完整修正后的GitLab CI代码

stages:
  - check

variables:
  JIRA_HEADER: "Accept: application/json"

jira:
  stage: check
  before_script:
    #- apk add jq curl
    - apk add --no-cache bash jq curl
    
  image: python:3.7.4-alpine3.9
  script:
    - export MERGE_REQUEST_JIRA_ID=$(echo ${CI_MERGE_REQUEST_TITLE} | sed -r "s/^([A-Za-z][A-Za-z0-9]+-[0-9]+).*/\1/")
    - echo $CI_MERGE_REQUEST_TITLE
    
    - export JIRA_DETAIL=$(curl -u ${JIRA_USERNAME}:${JIRA_PASSWORD} -H "${JIRA_HEADER}" -X GET https://${JIRA_SERVER}/rest/api/2/issue/${MERGE_REQUEST_JIRA_ID}?fields=status)
    - echo $JIRA_DETAIL

    # extract the JIRA key id, this also validates JIRA issue referenced is valid
    - export JIRA_KEY_ID=$(echo ${JIRA_DETAIL} | jq -e '.key')
    - echo $JIRA_KEY_ID

    # extract the JIRA status (raw output without quotes)
    - export JIRA_STATUS=$(echo ${JIRA_DETAIL} | jq -r '.fields.status.name')
    - echo $JIRA_STATUS
    - |
       if [[ "$JIRA_STATUS" =~ ^(Done|Completed|Closed)$ ]] 
        then 
          echo "Invalid JIRA (Done/Completed/Closed) found!"
          exit 1
        else 
          echo "Valid JIRA Id found!" 
       fi    
  only:
    - merge_requests

额外说明

  • jq -r确保输出为纯字符串,不会携带JSON格式的双引号,彻底解决匹配时的字符串格式问题
  • Bash的=~运算符原生支持正则表达式匹配,^(Done|Completed|Closed)$会严格匹配这三个状态的完整字符串,避免部分匹配导致的误判

内容的提问来源于stack exchange,提问作者vinod827

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:10:32