用例:使用Jenkinsfile自动为分支创建构建
要点: 由于各种原因,有时Jenkins主机无法连接到SCM服务器。发生这种情况时,Jenkins会删除master上的作业目录,因为它不再看到分支。但是,从站不会被清理,因此它们仍然具有旧的工作空间路径(根据我的设置中的构建#唯一命名)。当Jenkins主服务器重新连接到SCM服务器时,它会在主服务器上重新创建一个新的作业文件夹,并且构建计数器将重置为#1。
这会产生以下问题:
构建开始时,它在从属服务器上执行。由于master有一个新的计数器,所以工作是#1。但是这个路径可能已经存在于该slave的先前构建中,因此该工件是使用为原始旧构建检出的内容构建的(即maven使用工作区内的/ target目录,该目录已经存在于以前的构建中)。因此最终结果是可能包含错误代码的工件。
这可能会造成构建风暴。解决连接问题后,Jenkins将看到Jenkinsfiles的所有存储库和分支,并开始构建它们。因此,在一个设置中,假设有20个存储库,每个存储库有10个分支,这将创建200个新构建。这会随着额外的存储库和分支而增加。这显然是不可取的。
解决方案:
我能想到的一个快速解决方案是更新Jenkinsfile以删除工作区(如果它存在),然后再在其中运行作业。但这只是一个解决方法。我不想掩盖连接问题,并希望保留管道的实际构建历史记录(不要让它自己擦除)。
尽量减少连接问题。尽管如此,这显然不会得到保证。此外,有时维护必须强制服务器脱机虽然我可以通过限制或解决此类问题的方式构建维护,但仍然会出现需要全面停机的极少数情况。如果Jenkins可以处理这个用例,那将是最好的。
我很好奇是否有人遇到过这个问题以及对这个问题的想法是什么?