首页 > 解决方案 > Jenkinsfile 没有执行整个 shell 脚本

问题描述

我在 Jenkinsfile 中有以下内容作为离散阶段:

        stage("Check if Postman scripts are already cloned, delete") {
            steps {
                sh "[ -d postman-scripts ] && rm -rf postman-scripts && echo 'Directory cleared.'"
            }
        }

但是,当我查看我的 Jenkins 管道时,它看起来好像失败并且没有运行整个脚本:

[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Check if Postman scripts are already cloned, delete)
[Pipeline] sh
+ '[' -d postman-scripts ']'
[Pipeline] }

那是因为它没有找到postman-scripts目录,所以它没有执行脚本的其余部分?这是否被视为构建失败?它跳过了所有后续阶段,所以从逻辑上讲,我认为它正在这样做。

此外,对 bash 脚本的任何帮助都会很好,我不完全确定如何将这些全部串在一起以执行我想要的操作(如果目录存在,则删除目录。否则什么也不做)。

标签: bashjenkinsjenkins-pipeline

解决方案


[ -d postman-scripts ]如果目录不存在,您的 shell 测试条件将失败。这与任何其他命令一样都是失败的,因此它会退出。@jordanm 是正确的,-f即使没有要删除的内容,使用也会返回成功,因此您的下一步将继续。如果由于系统锁定或类似原因而无法删除文件,则例外,这可能是一件好事,


推荐阅读