grep在GitLab CI中失败

huangapple go评论57阅读模式
英文:

grep failing in gitlab CI

问题

script: |
echo "running jenkins job from user $EMAIL using following settings - $BRANCH / $TAGS in $ENV environment"

lastbuildNumber=$(curl -s --user ${EMAIL}:${TOKEN} "$JENKINS_URL/$ENV-SmokeTests-UIOnly/lastBuild/api/json" | jq ".number")

echo "last build was number ${lastbuildNumber}"
currentBuild=$((lastbuildNumber + 1 ))

echo "current build is ${currentBuild}"

echo "view cucumber report here"
baseurl="$JENKINS_URL/${ENV}-SmokeTests-UIOnly"
echo $baseurl

curl -s --user $EMAIL:$TOKEN $JENKINS_URL/$ENV-SmokeTests-UIOnly/ --output cucumber.txt

cucumber_endpoint=$(cat cucumber.txt | grep -o -m 1 "[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zAZ0-9.-]*")

full_cucumber=$baseurl$cucumber_endpoint

echo $full_cucumber

update:

after_script:
- |
echo "view cucumber report here"
baseurl="$JENKINS_URL/job/${ENV}-SmokeTests-UIOnly"

    curl -s --user "$EMAIL":"$TOKEN" $JENKINS_URL/"$ENV"-SmokeTests-UIOnly/ --output cucumber.txt
    cat cucumber.txt

    cucumber_endpoint=$(cat cucumber.txt | grep -o -m 1 '[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zAZ0-9.-]*')
    full_cucumber="${baseurl}${cucumber_endpoint}"
    echo "${full_cucumber}"

proving is not an issue with 'set -e'

#!/bin/bash
set -e
echo "view cucumber report here"
baseurl="https://example"

cucumber_endpoint=$(curl -s --user "$EMAIL":"$TOKEN" ${JENKINS_URL}/"$ENV"-SmokeTests-UIOnly/ | grep -o -m 1 '[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zAZ0-9.-]*')
# cat cucumber.txt

# cucumber_endpoint=$(cucumber.txt | grep -o -m 1 '[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zAZ0-9.-]*')
full_cucumber="${cucumber_endpoint}"
echo "${baseurl}${full_cucumber}"
英文:

I am trying to finalyze a script in Gitlab CI but struggling with some syntax error

  script: |        
          echo "running jenkins job from user $EMAIL using following settings - $BRANCH /  $TAGS in $ENV enviroment" 
          
          lastbuildNumber=$(curl -s --user ${EMAIL}:${TOKEN} "$JENKINS_URL/$ENV-SmokeTests-UIOnly/lastBuild/api/json"  | jq ".number")

          echo "last build was number ${lastbuildNumber}"
          currentBuild=$((lastbuildNumber + 1 ))  
          
          echo "current build is ${currentBuild}"

          echo "view cucumber report here"
          baseurl="$JENKINS_URL/${ENV}-SmokeTests-UIOnly"
          echo $baseurl
          
          curl -s --user $EMAIL:$TOKEN $JENKINS_URL/$ENV-SmokeTests-UIOnly/ --output cucumber.txt


          cucumber_endpoint=$(cat cucumber.txt | grep -o -m 1 "[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zA-Z0-9.-]*")

          full_cucumber=$baseurl$cucumber_endpoint

          echo $full_cucumber

The script works fine on my local terminal, but fails in the CI when running

cucumber_endpoint=$(cat cucumber.txt | grep -o -m 1 "[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zA-Z0-9.-]*")

is for sure something related to quotes but cannot work out what the issue is.


update:

I changed to:

after_script:
    - |
        echo "view cucumber report here"
        baseurl="$JENKINS_URL/job/${ENV}-SmokeTests-UIOnly"

        curl -s --user "$EMAIL":"$TOKEN" $JENKINS_URL/"$ENV"-SmokeTests-UIOnly/ --output cucumber.txt
        cat cucumber.txt 
        
        cucumber_endpoint=$(cat cucumber.txt | grep -o -m 1 '[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zA-Z0-9.-]*')
        full_cucumber="${baseurl}${cucumber_endpoint}"
        echo "${full_cucumber}"

and I have run the script through 'shellcheck.net'

it's the grep that is not working but is not returning anyerror now.

the result of the cat command are correct, as on my local machine.


proving is not an issue with set -e

#!/bin/bash
set -e
        echo "view cucumber report here"
        baseurl="https://example"

        cucumber_endpoint=$(curl -s --user "$EMAIL":"$TOKEN" ${JENKINS_URL}/"$ENV"-SmokeTests-UIOnly/ | grep -o -m 1 '[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zA-Z0-9.-]*')
        # cat cucumber.txt 
        
        # cucumber_endpoint=$(cucumber.txt | grep -o -m 1 '[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zA-Z0-9.-]*')
        full_cucumber="${cucumber_endpoint}"
        echo "${baseurl}${full_cucumber}"

which gets what I want:

 ➜ ./cucumber.sh                                                                                                                                                                                                                                         [16/02/23|11:39:59|]
view cucumber report here
https://example/cucumber-html-reports_fb3a3468-c298-3fb5-ad9a-dacbc0323763/overview-features.html

答案1

得分: 0

看起来 GitLab CI 不喜欢在 grep 调用中使用 -m 1 选项,

所以改成了

cucumber_endpoint=$(curl -s --user "$EMAIL":"$TOKEN" ${JENKINS_URL}/"$ENV"-SmokeTests-UIOnly/ | grep -o '[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zA-Z0-9.-]*'| sort -u)
英文:

apparently gitlab ci did not like the -m 1 option in the grep call

so changed to

cucumber_endpoint=$(curl -s --user "$EMAIL":"$TOKEN" ${JENKINS_URL}/"$ENV"-SmokeTests-UIOnly/ | grep -o '[a-zA-Z.-]*/cucumber-html-reports_[a-zA-Z0-9.-]*/[a-zA-Z0-9.-]*'| sort -u)

huangapple
  • 本文由 发表于 2023年2月16日 17:56:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/75470541.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定