繁体   English   中英

如何通过 Jenkinsfile 克隆到潜在的非空目录?

[英]How do I clone into a potentially non-empty directory via Jenkinsfile?

我有一个简单的 Jenkinsfile,它将 Git 存储库克隆到多个代理之一中。 这些代理可能还没有回购,或者可能。

目前这里是 Jenkinsfile:

stage("Clone Postman Collection") {
       steps {
           sh "git clone ssh://git@bitbucket.company.com/lol/postman-scripts.git"
       }
   }

目前这在第一次克隆 repo 时有效,但如果文件夹不为空,则会导致作业失败,并出现一个非常容易理解的错误: fatal: destination path 'postman-scripts' already exists and is not an empty directory.

我问这个问题而不是使用其他许多 Stack Overflow 问题中的其他答案之一的原因是,我无法确定正在运行的代理是否实际上已经克隆了 repo,所以那里需要某种IF子句之类的。

我想知道在 Jenkinsfile 中是否有一种优雅的方式来处理这个问题。 例如,我可以:

强制克隆覆盖它找到的文件?

导致错误不是致命的?

捕捉到具体错误并删除,重试?

强制克隆覆盖它找到的文件?

这种思路的逻辑结论是每次都删除工作空间或克隆。 无论如何,这样做通常有很好的理由,其中一个更引人注目的是“您的构建过程将创建不会出现在 repo 中的工件”。

但是如果 repo 足够大,我想你可能真的想要缓存,所以

导致错误不是致命的? 捕捉到具体错误并删除,重试?

您已经在运行 shell 脚本,因此您可以使用 shell 构造在git clone的结果和后续步骤之间添加一些逻辑。 使用目标目录作为克隆或获取/签出的标志似乎很简单——如果目录存在,则克隆,否则,签出。

但我建议不要这样做。 我敢打赌,您的存储库只需要几秒钟就可以克隆到您当前的设置中,而且您的时间比詹金斯的时间更值得。 在每次结帐时删除 repo,您损失的很少,并获得更简单的运行时一致性保证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM