当搜索的字符串不存在时,Jenkins shell 脚本返回退出代码 1

eam*_*ram 3 shell jenkins jenkins-pipeline

我正在 Jenkins 尝试以下操作,旨在搜索工作中的失败字符串。
这将每天运行。


def sd = "2020" + "${env.START_DATE}" + "0000"
def ed = "2020" + "${env.END_DATE}" + "2359.59"

pipeline {
    agent {label "master"}
    stages {
        stage('Build') {
            steps {

                print(sd)
                sh 'echo "Hello World"'
                sh """
                    pwd
                    #rm end-time start-time
                    #rm $WORKSPACE/$PARSING_OUTPUT
                    touch -t $sd $WORKSPACE/start-time
                    touch -t $ed $WORKSPACE/end-time
                    find /var/lib/jenkins/jobs/. -type f -newer $WORKSPACE/start-time  ! -newer $WORKSPACE/end-time -name '*' -exec grep $SEARCH_STRING /dev/null {} + >> $WORKSPACE/$PARSING_OUTPUT
                    ls -ltr
                """
            }
        post {
                always {
                    echo "sending mail"
                    //mail to: 'e@s.com',
                    //subject: "Parse Jenkins log",
                    //body: "TBD"
                    //body: "${env.BUILD_URL} has result ${currentBuild.result}"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我正在寻找的字符串不存在。作业失败。
控制台输出显示ERROR: script returned exit code 1
我尝试添加#!/bin/sh这将允许我在没有选项的情况下执行 - 没有帮助。
有什么建议 ?

小智 8

有多种方法可以达到上面的效果

  1. use set +e# 禁用非零退出

     sh ''''
     set +e
     ..
     '''
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用或|| 用命令

     sh''''
     $CMD || echo "string doesn't exist."
     '''
    
    Run Code Online (Sandbox Code Playgroud)
  3. 像下面这样使用

     sh (
       script: 'YOUR SCRIPT',
       returnStatus: true
     )
    
    Run Code Online (Sandbox Code Playgroud)