首页 > 解决方案 > 如何在 1 个作业中定义 2 个具有不同条件的工件?

问题描述

我试图让 CI 使用 gradle 构建代码。问题是,当构建失败时,它没有上传我的测试报告,这是我以后调试所需要的。

build:
  stage: build
  script:
    - ./gradlew build --info
  artifacts:
    paths:
      - build/install/<app_name>/*
      - build/reports/*
    expire_in: 7 days
    reports:
      junit: build/test-results/test/TEST-*.xml

作为 gitlab-ci 默认,它只在构建成功时上传工件。但是我需要始终上传测试报告,并且只有在构建成功时才上传构建文件。我可以使用 always 和 on_success 但我不确定是否可以在 1 个工作条件下分离这 2 个工件。

标签: continuous-integrationgitlabgitlab-ci

解决方案


您可以添加一个阶段以在发生故障时收集报告。
在下面的示例中,我添加了build-reports阶段,when: on_failure它负责收集日志和报告。

stages:
  - build
  - build-reports


build:
  stage: build
  allow_failure: false
  artifacts:
    paths:
    - report.txt
    - output.txt
    expire_in: 1 week
  script:
    - echo "Reports:" $(date) > report.txt
    - echo "Output:" $(date) > output.txt

Build-Reports:
  stage: build-reports
  when: on_failure
  artifacts:
    name: Build reports
    paths:
    - report.txt
    expire_in: 1 week
  script:
    - echo "Build Failed" >> report.txt

成功构建的管道输出:(构建阶段的工件包含:report.txtoutput.txt
成功构建的管道输出

构建失败的管道输出构建报告阶段的工件包含report.txt:)
构建失败的管道输出


推荐阅读