Я нахожусь в процессе настройки нового конвейера GitLab CI для проекта.
Для начала моя цель - создать базовый конвейер, который собирает, тестирует и анализирует проект (3 простыхstage).
Моя проблема в том, что мой второй этап (тест) зависит от задачи Gradle, которая генерирует немного документации (мы генерировали документацию на лету на основе тестов). Указанная задача вызывает основную часть утилиты для генерации простой части документации.
Хотя все задачи работают нормально, когда я запускаю их на хосте Windows, выполнение того же на CI GitLab с использованием образа на основе Alpine Linux не удается сследующая ошибка:
> Task :compileTestJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test
> Task :generatePermissionsDocument FAILED
Error: Could not find or load main class
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':generatePermissionsDocument'.
> Process 'command '/opt/java/openjdk/bin/java'' finished with non-zero exit value 1
Я попытался включить трассировки стека Gradle, но мне не удалось получить из них никакой полезной информации. По большей части и мой сценарий сборки, и сценарий GitLab CI выглядят нормально (включены для справки ниже):
image: adoptopenjdk/openjdk8:jdk8u222-b10-alpine
include:
- project: "devops/ci-templates"
ref: "master"
file: "sonar/sonar-gradle.yml"
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
- apk add --no-cache tzdata
- cp /usr/share/zoneinfo/America/New_York /etc/localtime
- echo "America/New_York" > /etc/timezone
stages:
- build
- test
- analysis
build:
stage: build
script: ./gradlew --build-cache clean assemble -PMARKETING_SKIP_INT_TESTS
cache:
key: "$CI_COMMIT_REF_NAME"
paths:
- build
- .gradle
- src/main/java/fts/marketing/util/Version.java
retry: 2
only:
- merge_requests
- master
- /^support\/\d+[.]\d+$/
- tags
except:
- api
test:
stage: test
script: ./gradlew test -PMARKETING_SKIP_INT_TESTS --stacktrace
cache:
key: "$CI_COMMIT_REF_NAME"
policy: pull
paths:
- build
- .gradle
- src/main/java/fts/marketing/util/Version.java
only:
- merge_requests
- master
- /^support\/\d+[.]\d+$/
- tags
except:
- api
Сначала я подумал, что это будет связано с кэшированием или разрешением, но я проверил обацелостность или кэш, создаваемый задачей сборки, а также разрешения сгенерированной папки и все выглядит отлично.
Для справки, задачу, которую я пытаюсь вызвать, это:
task generatePermissionsDocument(type: JavaExec, group: 'application') {
description = 'Will generate API Permissions adoc'
main = 'fts.marketing.tools.GeneratePermissionsDocument'
classpath = sourceSets.main.runtimeClasspath
//jvmArgs = applicationDefaultJvmArgs
workingDir = generatedDocumentation
}
Может ли кто-нибудь пролить свет на то, почему это не удается и что нужно сделать для его устранения?