代码之家  ›  专栏  ›  技术社区  ›  Jaime Alcántara Arnela

如何从sh step命令获取curl退出状态?

  •  2
  • Jaime Alcántara Arnela  · 技术社区  · 6 年前

    curl -o/dev/null -sfI "$url" ,在sh中可以这样使用:

    if ( curl -o/dev/null -sfI "$url" ); then
      echo "URL exists"
    else
      echo "URL does not exist"
    fi
    

    所以,我需要这个条件在我的jenkins文件中,但我不知道如何重新创建它。这就是我尝试过的:

    def fileAlreadyExists = sh(
                    script: "curl -o/dev/null -sfI \"$url\"",
                    returnStdout: true
            )
    

    1 回复  |  直到 6 年前
        1
  •  4
  •   Szymon Stepniak    6 年前

    -o /dev/null 开关。如果你想捕获退出代码,你必须设置 returnStatus 而不是 returnStdout 选项,如:

    def fileAlreadyExists = sh(
                script: "curl -o/dev/null -sfI \"$url\"",
                returnStatus: true
    )
    

    echo $?

    def fileAlreadyExists = sh(
                script: "curl -o/dev/null -sfI \"$url\"; echo \\\$?",
                returnStdout: true
    ) as Integer // explicit casting needed, because it returns String
    

    变量 fileAlreadyExists 存储整数值,以便在 if () if (0) false ,所以如果你想 0 退出代码然后最好将此比较显式化,如:

    if (fileAlreadyExists == 0) { /* exists */ } else { /* not exist */ }
    

    作为旁注:记住要逃跑 \ 如果要将其传递给sh命令-Jenkins去掉单个转义字符,因此如果要传递(例如双引号)基础脚本,则必须按以下方式对其进行转义: \\\" .