首页 > 解决方案 > 如何从 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”中,那么它应该跳过下载文件。

标签: jenkinschartsjenkins-pipelinedevopspipeline

解决方案


注意:我假设您的 Jenkins 服务器正在运行 Unix 操作系统,因为您没有在问题中指定操作系统。

您可以使用以下命令Charts.tgz检查文件是否在本地存在:chart_directoryfind

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


推荐阅读