bash - 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 脚本的任何帮助都会很好,我不完全确定如何将这些全部串在一起以执行我想要的操作(如果目录存在,则删除目录。否则什么也不做)。
解决方案
[ -d postman-scripts ]
如果目录不存在,您的 shell 测试条件将失败。这与任何其他命令一样都是失败的,因此它会退出。@jordanm 是正确的,-f
即使没有要删除的内容,使用也会返回成功,因此您的下一步将继续。如果由于系统锁定或类似原因而无法删除文件,则例外,这可能是一件好事,
推荐阅读
- node.js - 为什么在使用 @pdftron/pdfnet-node 包时会出现此错误,我该如何解决?
- python - 按照 WSQ 指纹规范实现双通道子带编码器
- javascript - 我用于替换 url 的 jsfiddle 正在工作,但不在博客源中
- git - 推送到远程后如何将一个分支的更改合并到另一个分支
- python - pandas中如何将重复的数据行收集到单行中?
- machine-learning - 目标标签仅包含允许标签的子集时的 F1 分数计算
- reactjs - history.push() 更改了 url,但在记录 window.location.href 时,这些更改不会反映
- c# - 检测用户何时离开(即关闭浏览器)
- docker - 无法在第二个对等点上部署 fabcar 链代码
- sql - 如何使用 postgis 查询获取分组几何的 bbox?