Отчет о покрытии Jacoco в gitlab-ci для Android отчетов по проекту "Файлы классов не указаны" - PullRequest
0 голосов
/ 12 марта 2020

Я настроил отчет о покрытии Jacoco для нашего проекта Kotlin Android, который должен запускаться в gitlab-ci как задание. Я следовал этой статье для генерации заданий. Отчет о покрытии работает отлично, если работает локально. Но если одна и та же задача gradle выполняется в gitlab runner, он всегда создает пустые отчеты с сообщением «Файлы классов не указаны».

Что отличается в конвейере, когда речь идет о файлах классов?

Возможно, кто-то из вас сможет определить проблему.

jacoco.gradle :

apply plugin: 'jacoco'

android {
    testOptions {
        unitTests.all {
            jacoco {
                includeNoLocationClasses = true
            }
        }
    }

    jacoco {
        version = '0.8.4'
    }
}

project.afterEvaluate {
    def buildTypes = android.buildTypes.collect { type ->
        type.name
    }
    def productFlavors = android.productFlavors.collect { flavor ->
        flavor.name
    }
    if (!productFlavors) productFlavors.add('')
    productFlavors.each { productFlavorName ->
        buildTypes.each { buildTypeName ->
            def sourceName, sourcePath
            if (!productFlavorName) {
                sourceName = sourcePath = "${buildTypeName}"
            } else {
                sourceName = "${productFlavorName}${buildTypeName.capitalize()}"
                sourcePath = "${productFlavorName}${buildTypeName}"
            }
            def testTaskName = "test${sourceName.capitalize()}UnitTest"

            task "${testTaskName}Coverage" (type:JacocoReport, dependsOn: "$testTaskName") {
                group = "Reporting"
                description = "Generate Jacoco coverage reports on the ${sourceName.capitalize()} build."
                classDirectories = fileTree(
                    dir: "$project.buildDir/tmp/kotlin-classes/${sourcePath}",
                    excludes: ['**/R.class'] #List of excludes is reduced for this question
                )
                def coverageSourceDirs = [
                    "$project.buildDir.parent/src/main/java",
                    "$project.buildDir.parent/src/$productFlavorName/java",
                    "$project.buildDir.parent/src/$buildTypeName/java"
                ]

                additionalSourceDirs = files(coverageSourceDirs)
                sourceDirectories = files(coverageSourceDirs)
                executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")

                reports {
                    xml.enabled = true
                    html.enabled = true
                }
            }
        }
    }
}

gitlab-ci.yml : (несвязанные задания и этапы удалены)

image: docker:latest

variables:
    BUILDER_VERSION: "68e9780a"
    GRADLE_ARGS_CI: "--no-daemon --stacktrace"

stages:
    - build
    - test

.build-template: &build_definition
    stage: build
    image: our-docker-registry.com/android-builder:$BUILDER_VERSION
    tags:
        - frontend
    only:
        - merge_requests
        - develop
        - schedules

.test-template: &test_definition
    stage: test
    image: our-docker-registry.com/android-builder:$BUILDER_VERSION
    tags:
        - hermine-frontend
    only:
        - merge_requests
        - develop
        - schedules

build:dev:debug:
    <<: *build_definition
    script:
        - echo "Starting SCRIPT in job $CI_JOB_NAME"
        - ./gradlew $GRADLE_ARGS_CI :app:assembleDevDebug
    artifacts:
        paths:
            - app/build/outputs/apk/dev/debug
            - app/build/tmp/
        expire_in: 1 week

test:dev:debug:
    <<: *test_definition
    script:
        - echo "Starting SCRIPT in job $CI_JOB_NAME"
        - ./gradlew $GRADLE_ARGS_CI -Pci --console=plain :app:testDevDebugUnitTest
        - ./gradlew $GRADLE_ARGS_CI -Pci --console=plain :app:testDevDebugUnitTestCoverage
    artifacts:
        paths:
            - app/build/reports/tests/testDevDebugUnitTest
            - app/build/jacoco #execution file
            - app/build/reports
        expire_in: 1 day

Снимок экрана моей папки Android Studio build: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...