jenkins - 如何从 Jenkinsfile 检查其他目录中存在的文件,而不是工作区中的文件
问题描述
我在 git repo 中有一个 tar/zip 文件。此 tar/zip 文件需要放在名为“chart_directory”的目录中。使用我的 Jenkinsfile,我想实现仅当“chart_directory”不包含 git 存储库中存在的 tar/zip 文件的副本时,它才会从 git 存储库下载此 tar/zip 文件的逻辑。例如 - 在名为“testing.git”的 git 存储库中有一个名为“Charts.tgz”的文件,只有当“chart_directory”尚未包含文件“Charts”时,我才需要在“chart_directory”中下载这个“Charts.tgz”文件.tgz'。如果 Charts.tgz 已经存在于“chart_directory”中,那么它应该跳过下载文件。
解决方案
注意:我假设您的 Jenkins 服务器正在运行 Unix 操作系统,因为您没有在问题中指定操作系统。
您可以使用以下命令Charts.tgz
检查文件是否在本地存在:chart_directory
find
find chart_directory -type f -name Charts.tgz
-type f
告诉find
搜索常规文件,并-name Charts.tgz
告诉find
专门搜索Charts.tgz
.
find
如果什么也没找到,则退出代码为零。要解决此问题,read
如果什么也没找到,您可以通过管道获取非零退出代码find
。(read
如果遇到 则有一个非零退出代码EOF
,这正是如果find
没有找到任何东西会发生的情况。)
在您的代码中,Charts.tgz
只有当它不存在时才能下载chart_directory
:
find chart_directory -type f -name Charts.tgz | read || {
# Your code here (between the '{' and '}') to clone the git repo
# to retrieve Charts.tgz
}
运算符所做的||
是仅当右侧的表达式具有非零退出代码时才评估左侧的表达式。在这种情况下,这意味着只有在没有找到任何东西时才会评估{
和之间的代码。}
find
推荐阅读
- java - 方法不会覆盖其超类中的方法并且无法解析符号
- amazon-web-services - AWS API Gateway 和静态 HTML:“由于配置错误,执行失败:statusCode 应该是请求模板中定义的整数”
- android - 仅影响华为设备的奇怪崩溃 - Android 10 - android.view.InflateException
- automation - 如何在 Cucumber 自动化中将数据从 Config 文件传递到数据表
- kivy - Kivy 编译应用关闭后出现问题
- lua - lua 匹配字符串中标签后的所有内容
- r - 闪亮:上传数据后updateSelectInput为空
- python - 如何根据数据框中的相同索引将同一列中的值相乘?
- php - 为什么我的 php 脚本没有显示来自 mysql 的所有数据?
- javascript - OneSignal 和 Firebase 云函数 - 返回未定义、预期的 Promise 或值