San Jaisy
San Jaisy

Reputation: 17128

Gradle build failed in Tekton CI/CD

I have below pipeline task for Gradle build, which clones the project from bitbucket repo and try to build the application.

  tasks:
    - name: clone-repository
      taskRef:
        name: git-clone
      workspaces:
        - name: output
          workspace: shared-workspace
      params:
        - name: url
          value: "$(params.repo-url)"
        - name: deleteExisting
          value: "true"
    - name: build
      taskRef:
        name: gradle
      runAfter:
        - "clone-repository"
      params:
        - name: TASKS
          value: build -x test
        - name: GRADLE_IMAGE
          value: docker.io/library/gradle:jdk17-alpine@sha256:dd16ae381eed88d2b33f977b504fb37456e553a1b9c62100b8811e4d8dec99ff
      workspaces:
        - name: source
          workspace: shared-workspace

I have the below project structure

enter image description here

The settings.gradle contain the below projects

rootProject.name = 'discount'
include 'core'
include 'infrastructure'
include 'shared'
include 'discount-api'

when running the pipeline with below code

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: run-pipeline
  namespace: tekton-pipelines
spec:
  serviceAccountName: git-service-account
  pipelineRef:
    name: git-clone-pipeline
  workspaces:
    - name: shared-workspace
      persistentVolumeClaim:
        claimName: fetebird-discount-pvc
  params:
    - name: repo-url
      value: [email protected]:anandjaisy/discount.git

Getting an exception as

FAILURE: Build failed with an exception.

* What went wrong:
Task 'build -x test' not found in root project 'discount'.

I have used the task from the Tekton catalog https://github.com/tektoncd/catalog/blob/main/task/gradle/0.1/gradle.yaml

If I pass the PROJECT_DIR value as ./discount-api to the Gradle task. I get an exception as settings.gradle not found. which is correct because that project has no setting.gradle file.

The main project is discount-api. I need to build the application. Quite not sure what is wrong. On the local env if I do ./gradlew build in the root directory the application successfully builds.

Upvotes: 0

Views: 831

Answers (1)

SYN
SYN

Reputation: 5041

The error message tells about Task 'build -x test' not found in root project 'discount'

Checking that Task, in tekton catalog, we can read:

....
- name: TASKS
  description: 'The gradle tasks to run (default: build)'
  type: string
  default: build
steps:
- name: gradle-tasks
  image: $(params.GRADLE_IMAGE)
  workingDir: $(workspaces.source.path)/$(params.PROJECT_DIR)
  command:
    - gradle
  args:
    - $(params.TASKS)

Now, in your Pipeline, you set that TASKS param to build -x test. This is your issue.

As you can read above, that TASKS param is a string. While you want to use an array.

You should be able to change the param definition, such as:

....
- name: TASKS
  description: 'The gradle tasks to run (default: build)'
  type: array
  default:
  - build
steps:
- name: gradle-tasks
  image: $(params.GRADLE_IMAGE)
  workingDir: $(workspaces.source.path)/$(params.PROJECT_DIR)
  command:
    - gradle
  args: [ "$(params.TASKS)" ]

This would ensure "build", "-x" and "test" are sent to gradle as separate strings. While your current attempt would be equivalent to running gradle "build -x test", resulting in your error.

Upvotes: 1

Related Questions