Не удалось выполнить задачу Gradle в основном методе GitLab CI - PullRequest
1 голос
/ 17 октября 2019

Я нахожусь в процессе настройки нового конвейера 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
}

Может ли кто-нибудь пролить свет на то, почему это не удается и что нужно сделать для его устранения?

1 Ответ

0 голосов
/ 17 октября 2019

Мне удалось выяснить коренные случаи этого. Я выполнял некоторые условные установки аргументов JVM приложения по умолчанию, что, по-видимому, было неверным. Указанный процесс включал в конце аргументы ',' в аргументах, передаваемых Gradle в JVM.

По какой-то причине это не очень понравилось при запуске из среды, подобной Unix, тогда как он отлично работал на хостах Windows,Я переделал условную часть настройки arg, и все заработало как шарм.

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