【发布时间】:2021-07-26 13:07:27
【问题描述】:
我在我的 Jenkins 管道脚本中设置了并行阶段,这些阶段在单独的节点(AWS EC2 实例)上执行测试
例如
stage('E2E-PR') {
parallel {
stage('Cypress Tests 1') {
agent { label 'aws_slave_cypress' }
steps {
runE2eTests()
}
}
stage('Cypress Tests 2') {
agent { label 'aws_slave_cypress' }
steps {
runE2eTests()
}
}
}
}
我想重新使用从管道开始时使用的父节点生成的签出 repo\生成的工作空间,而不是每个并行阶段都签出它自己的副本。
我遇到了一种使用顺序阶段的方法,并在阶段内嵌套阶段以跨多个阶段共享工作区,我尝试如下
parallel {
stage('Cypress Tests') {
agent { label 'aws_slave_cypress' }
stages {
stage('Cypress 1') {
steps {
runE2eTests()
}
}
stage('Cypress 2') {
steps {
runE2eTests()
}
}
}
}
}
但我可以从我的 Jenkins 构建输出中看到,只有一个 aws 实例被启动并用于我的两个嵌套阶段,这并没有给我带来并行性的好处。
我也遇到过 stash\unstash 命令,但我读过这些命令应该用于小文件而不是大目录\整个存储库?
让我在多个节点上使用相同最初生成的工作区的并行阶段的正确方法是什么?这可能吗?
谢谢
【问题讨论】:
-
您能否提供更多信息,说明您为什么要这样做? (浅浅地)克隆一个 git repo 与存储和取消存储文件没有什么不同。
-
所以用于测试的从代理,只需要能够引用一些测试文件,所以我可以使用 stash\unstash 的方法考虑一下。