jenkins并行构建

2021-06-01 17:57:24 浏览数 (1)

如果需要分别在Chrome、Firefox、IE等浏览器的各个不同版本中对同一个web应用进行UI测试,怎么做呢?

  1. pipeline {
  2. agent any
  3. stages {
  4. stage('Build') {
  5. steps {
  6. echo 'Building..'
  7. }
  8. }
  9. stage('Test on Chrome') {
  10. steps {
  11. echo 'Testing..'
  12. }
  13. }
  14. stage('Test on Firfox') {
  15. steps {
  16. echo 'Testing..'
  17. }
  18. }
  19. }
  20. }

不论是将UI分别放在不同的阶段还是步骤中,这种按顺序执行的测试都太慢了,慢到执行一次完整的UI测试要一小时以上。

通过仔细分析你会发现,这些测试是可以并行执行的。就像原来只有一个测试人员,要测试4个浏览器,他只能测试完一个浏览器,再测试另一个浏览器,但是现在有4个测试人员,他们就可以同时进行测试。这样测试耗时就降到了原来的1/4。

很明显,Jenkins pipeline插件支持这种并行构建,并且使用起来也非常简单。

  1. pipeline {
  2.     agent none
  3.     stages {
  4.         stage('Run Tests') {
  5.             failFast true
  6.             parallel {
  7.                 stage('Test On Chrome') {
  8.                     agent { label "chrome" }
  9.                     steps {
  10.                         echo "Chrome UI测试"
  11. }
  12. }
  13.                 stage("Test On Firefox") {
  14.                     agent { label "firefox" }
  15.                     steps {
  16.                         echo "Firefox UI测试"
  17. }
  18. }
  19.                 stage("Test On IE") {
  20.                     agent { label "ie" }
  21.                     steps {
  22.                         echo "IE UI测试"
  23. }
  24. }
  25. }
  26. }
  27. }
  28. }

在stages部分包含一个Run Tests阶段,在这个阶段下包含一个parallel块,在parallel块下又包含了多个阶段。位于parallel块下的阶段都并行执行,而且并行阶段还可以被分到不同的Jenkins agent上执行。

因为parallel本身不包含任何步骤,所以在parallel块下本身不允许包含agent和tools。

在默认情况下,pipeline要等待parallel块下所有的阶段都执行完成,才能确定结果。如果希望所有并行阶段中的某个阶段失败后,就让其他正在执行的阶段都中止,那么只需要在与parallel块同级的位置加入failFast true就可以了。

0 人点赞