首页 > 解决方案 > 为什么我的 bash 函数在 Jenkinsfil 中不起作用

问题描述

我写了这个函数

def docker_images(image_name,image_tag){

def curl_image_exists_status_code =

    curl_image_exists_status_code=sh (
    script:""" docker login -u XXXXX -p $$$$$$  2> /dev/null 1>/dev/null
    docker pull XXXXX/'${image_name}':'${image_tag}' > /dev/null && echo "success" || echo 'failed' 
    """,  returnStdout: true)
    echo "${curl_image_exists_status_code}"
    return (curl_image_exists_status_code == 'success')?true: false
    }

但输出是

成功

空值

最后一行返回false 的输出curl_image_exists_status_code应该是成功,最后一行应该返回 true 但为什么它不起作用?

标签: dockerjenkinskubernetescontinuous-integrationjenkins-pipeline

解决方案


您需要将 .trim() 添加到 sh 的输出中,如下所示:

def docker_images(image_name,image_tag){

   def curl_image_exists_status_code =

      curl_image_exists_status_code=sh (
      script:""" docker login -u XXXXX -p $$$$$$  2> /dev/null 1>/dev/null
      docker pull XXXXX/'${image_name}':'${image_tag}' > /dev/null && echo "success" || echo 'failed' 
    """,  returnStdout: true).trim() //this will make your output trimmed
      echo "${curl_image_exists_status_code}"
      return (curl_image_exists_status_code == 'success')?true: false
    }

推荐阅读