【问题标题】:All testcase should run in gitlab instead 1st one failed所有测试用例都应该在 gitlab 中运行,而不是第一个失败
【发布时间】:2016-12-10 10:27:35
【问题描述】:

我正在设置一个 gitlab 环境。每次推送后凌晨 1 点运行 5 个测试用例。但是,如果任何测试用例下降,则跳过其他测试用例。 我想运行所有的案例。因为它们是相互独立的。

gitlab-ci.yml

stages:
  - build
  - unit_test_1
  - unit_test_2
  - unit_test_3

job1:
    stage: build
    script:
        - bash build.sh

job2:
    stage: unit_test_1
    script:
        - bash ./unit_test_1.sh

job3:
    stage: unit_test_2
    script:
        - bash ./unit_test_2.sh

job4:
    stage: unit_test_3
    script:
        - bash ./unit_test_3.sh

如果 uint_test_1.sh 失败。跳过其他测试。

【问题讨论】:

    标签: gitlab gitlab-ci gitlab-ci-runner


    【解决方案1】:

    您可以使用when 属性让您的作业每次都运行,而不管构建之前阶段的作业状态如何。

    stages:
      - build
      - test
    
    job1:
        stage: build
        script:
            - bash build.sh
    
    job2:
        stage: test
        when: always
        script:
            - bash ./unit_test_1.sh
    
    job3:
        stage: test
        when: always
        script:
            - bash ./unit_test_2.sh
    
    job4:
        stage: test
        when: always
        script:
            - bash ./unit_test_3.sh
    

    此外,如果您想确保永远不会有作业并行运行,那么您可以为运行器配置并发限制。

    将其配置为globally 将限制您的所有跑步者仅在所有跑步者之间同时运行一项作业。

    将其配置为 per runner 将限制该运行器每个构建令牌仅同时运行 1 个作业。

    【讨论】:

      【解决方案2】:

      你可以这样试试:

      gitlab-ci.yml

      stages:
          - build
          - test
      
      job1:
          stage: build
          script:
              - bash build.sh
      
      job2:
          stage: test
          script:
              - bash ./unit_test_1.sh
      
      job3:
          stage: test
          script:
              - bash ./unit_test_2.sh
      
      job4:
          stage: test
          script:
              - bash ./unit_test_3.sh
      

      文档说:

      阶段中元素的顺序定义了构建执行的顺序:

      同一阶段的构建并行运行。 下一阶段的构建在上一阶段的作业成功完成后运行。

      https://docs.gitlab.com/ce/ci/yaml/README.html#stages

      要并行运行,您必须输入相同的阶段名称 https://docs.gitlab.com/ce/ci/pipelines.html#pipelines

      【讨论】:

      • 是的,我已经尝试过了。但它将执行所有作业job2、job3和job4。我不想并行执行。它将造成资源紧缩。我想执行所有脚本。但如果第一个不成功,那么它正在跳过其他阶段。
      • 在这种情况下你可能需要allow_failuredocs.gitlab.com/ce/ci/yaml/README.html#allow_failure
      • (我不知道如何编辑评论)如果您想要一个名为 test 的阶段并运行所有测试作业(顺序:不是并行)即使有些失败,您也需要添加dependenciesallow_failure 在我建议你的解决方案中 docs.gitlab.com/ce/ci/yaml/README.html#dependencies docs.gitlab.com/ce/ci/yaml/README.html#allow_fa‌​ilure
      • 您可以将所有作业添加到同一阶段,但仍然可以通过向运行器添加并发作业限制 1 来阻止它们并行运行。您可以将其限制为 1 per runner with limit1 for all runners with concurrent
      猜你喜欢
      • 2015-05-30
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 2019-10-09
      • 2020-01-13
      相关资源
      最近更新 更多