continuous-integration - 如何在 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 个工件。
解决方案
您可以添加一个阶段以在发生故障时收集报告。
在下面的示例中,我添加了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