charts/pipelines-library/templates/tasks/sonar/sonarqube-gradle.yaml (167 lines of code) (raw):
{{ if .Values.pipelines.deployableResources.tasks }}
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: sonarqube-gradle
labels:
app.kubernetes.io/version: "0.2"
annotations:
tekton.dev/pipelines.minVersion: "0.12.1"
tekton.dev/categories: Security
tekton.dev/tags: security
tekton.dev/displayName: "sonarqube scanner"
tekton.dev/platforms: "linux/amd64"
spec:
description: >-
The sonarqube-scanner Task will update parameters in the
sonar-project.properties file or create a new sonar-project.properties
file and put parameters of a sonar project into it.
Task will run sonar-scanner for scanning after preparing the sonar-project.properties file.
workspaces:
- name: source
volumes:
- name: settings-gradle
configMap:
name: {{ .Values.tekton.configs.gradleConfigMap }}
params:
- name: SONAR_PROJECT_KEY
description: Project's unique key
default: ""
- name: SONAR_PROJECT_NAME
description: Project's unique name
default: ""
- name: SONAR_QUALITYGATE_WAIT
description: Forces the analysis step to poll the SonarQube instance and wait for the Quality Gate status.
default: "true"
- name: ci-sonarqube
type: string
description: name of the secret holding the Sonarqube CI integration data
default: "ci-sonarqube"
- name: branch
type: string
description: Branch of scanning (for build pipeline)
default: ""
- name: target-branch
type: string
description: Target branch of Merge Request
default: ""
- name: source-branch
type: string
description: Source branch of Merge Request
default: ""
- name: key-id
type: string
description: Change number from Merge Request
default: ""
- name: ci-nexus
type: string
description: name of the secret for the Nexus integration
default: ci-nexus
- name: BASE_IMAGE
description: Gradle base image.
type: string
default: {{ include "edp-tekton.registry" . }}/gradle:7.6.1-jdk11
- name: PROJECT_DIR
description: The directory containing build.gradle
type: string
default: "."
- name: EXTRA_COMMANDS
type: string
- name: step_prepare_project_image
type: string
default: "{{ include "edp-tekton.registry" . }}/epamedp/tekton-autotest:0.1.6"
steps:
- image: $(params.step_prepare_project_image)
name: prepare-project
workingDir: $(workspaces.source.path)
env:
- name: SONAR_HOST_URL
valueFrom:
secretKeyRef:
name: $(params.ci-sonarqube)
key: url
- name: SONAR_TOKEN
valueFrom:
secretKeyRef:
name: $(params.ci-sonarqube)
key: token
- name: SONAR_PROJECT_KEY
value: "$(params.SONAR_PROJECT_KEY)"
- name: SONAR_PROJECT_NAME
value: "$(params.SONAR_PROJECT_NAME)"
script: |
set -e
# Check if SonarQube is available
SONAR_STATUS=$(curl -s -I -w "%{http_code}" -o /dev/null ${SONAR_HOST_URL}) || SONAR_STATUS="503"
if [[ "$SONAR_STATUS" != "200" ]]; then
echo -e "SonarQube is not available\nPlease check the connection to SonarQube"
exit 1
fi
# Check if project exists
SONAR_RESPONSE=$(curl -s -u "${SONAR_TOKEN}:" "${SONAR_HOST_URL}/api/components/show?component=${SONAR_PROJECT_KEY}")
# Check token is valid
if [[ -z "$SONAR_RESPONSE" ]]; then
echo "Token isn't valid or not defined"
exit 1
fi
# Create project if it doesn't exist of skip if it does
if echo "$SONAR_RESPONSE" | jq -e '.errors[0].msg' &>/dev/null; then
default_branch=$(kubectl get codebase $SONAR_PROJECT_NAME -o jsonpath='{.spec.defaultBranch}')
echo "Create project ${SONAR_PROJECT_KEY}"
curl -X POST -u ${SONAR_TOKEN}: "${SONAR_HOST_URL}/api/projects/create?name=${SONAR_PROJECT_KEY}&project=${SONAR_PROJECT_KEY}&mainBranch=${default_branch}"
else
if echo "$SONAR_RESPONSE" | jq -e '.component.key' &>/dev/null; then
echo "Project \"$SONAR_PROJECT_KEY\" already exists"
else
echo "Unknown Response format"
fi
fi
- name: gradle-tasks
image: $(params.BASE_IMAGE)
volumeMounts:
- name: settings-gradle
mountPath: /var/configmap
{{- if .Values.tekton.packageRegistriesSecret.enabled }}
envFrom:
- secretRef:
name: {{ .Values.tekton.packageRegistriesSecret.name }}
{{- end }}
workingDir: $(workspaces.source.path)/$(params.PROJECT_DIR)
script: |
#!/bin/bash
set -e
gradle \
-I \
/var/configmap/init.gradle \
-PnexusLogin=${CI_USERNAME} \
-PnexusPassword=${CI_PASSWORD} \
$(params.EXTRA_COMMANDS)
env:
- name: XDG_CONFIG_HOME
value: $(workspaces.source.path)/$(params.PROJECT_DIR)
- name: GRADLE_USER_HOME
value: $(workspaces.source.path)/$(params.PROJECT_DIR)
- name: SONAR_USER_HOME
value: $(workspaces.source.path)/$(params.PROJECT_DIR)
- name: SONAR_TOKEN
valueFrom:
secretKeyRef:
name: $(params.ci-sonarqube)
key: token
- name: SONAR_HOST_URL
valueFrom:
secretKeyRef:
name: $(params.ci-sonarqube)
key: url
- name: CI_USERNAME
valueFrom:
secretKeyRef:
name: $(params.ci-nexus)
key: username
- name: CI_PASSWORD
valueFrom:
secretKeyRef:
name: $(params.ci-nexus)
key: password
- name: NEXUS_HOST_URL
valueFrom:
secretKeyRef:
name: $(params.ci-nexus)
key: url
{{- include "resources" . | nindent 6 }}
{{ end }}