[英]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.