找不到GitLab CI主要方法上的Gradle任务失败

时间:2019-10-17 13:20:49

标签: java gradle gitlab

我正在为项目设置新的GitLab CI管道。

首先,我的目标是创建一个用于构建,测试和分析项目的基本管道(三个简单阶段)。

我的问题是,我的第二阶段(测试)依赖于Gradle任务,该任务会生成一些文档(我们根据测试动态生成了文档)。所述任务调用实用程序的主体来生成简单的文档。

当我在Windows主机上运行所有任务时,它们都能正常工作,但使用基于Linux的Alpine镜像在GitLab的CI上执行相同的操作却失败,并出现以下错误:

> 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 :(得分:0)

我设法找出了根本原因。我正在对应用程序的默认JVM args进行一些条件设置,这显然是错误的。所说的过程是在Gradle传递给JVM的args中包含一个尾随的“,”。

由于某种原因,当从类似Unix的环境中运行时,它并不受欢迎,而在Windows主机上运行良好。我重新修改了arg设置的条件部分,一切都像个魅力一样。