我正在编写Jenkins流水线,我的流水线相当大,因此为了测试目的,我创建了一个小的,我添加了新的代码并想要测试。
在小测试流水线中测试完代码后,我将代码复制/粘贴到原始的大流水线中。当运行大型流水线时,在运行了几个小时后,它失败了,原因很简单,比如没有定义变量,这是从测试流水线复制/粘贴时遗漏的。
这些微不足道的错误在Jenkins Pipeline UI和Intellij Idea(我使用的)中都没有发现。
有没有人可以帮助我,如何避免这些小错误,使管道运行了很长时间后不会失败?
发布于 2020-04-06 13:56:36
您应该考虑使用Pipeline Unit Test库为您的管道设置单元测试。它允许您在不到1秒的时间内编译和模拟复杂流水线的执行。当然,您可能需要花费一些时间来正确配置您的单元测试,但这是值得投资的工作。
您可以从打印调用堆栈的简单测试开始,例如:
import com.lesfurets.jenkins.unit.BasePipelineTest
class TestExampleJob extends BasePipelineTest {
//...
@Test
void should_execute_without_errors() throws Exception {
def script = loadScript("job/exampleJob.jenkins")
script.execute()
printCallStack()
}
}
如果您在调用堆栈中没有看到错误,则可以添加assertJobStatusSuccess()
来验证管道的执行是否没有导致构建状态的更改。然后,您可以开始添加诸如assertCallStackContains(str)
之类的内容,以开始验证在执行过程中是否存在特定的命令或阶段。
此单元测试还应捕获任何(或至少大多数)编译问题。在极少数情况下,管道单元测试通过,但在Jenkins上执行的管道失败。我在我的Jenkins共享库中使用了这个库两年,它为我节省了数百小时的手动测试和捕获简单错误的时间。
https://stackoverflow.com/questions/61053157
复制相似问题