Qodana 2022.3 Help

GitLab CI/CD

GitLab CI/CD is a tool for software development that uses various CI/CD methodologies. This section explains how you can run Qodana Docker images within GitLab CI/CD pipelines and covers the following cases:

  • Inspecting specific branches and merge requests

  • Forwarding inspection reports to Qodana Cloud

  • Exposing Qodana reports in the GitLab CI/CD user interface

Prepare your project

Make sure that your project repository is accessible by GitLab CI/CD.

In the root directory of your project, save the .gitlab-ci.yml file. This file will contain the pipeline configuration that will be used by GitLab CI/CD.

Basic configuration

This is the basic pipeline configuration.

qodana: image: name: jetbrains/qodana-<linter> entrypoint: [""] script: - qodana --save-report --results-dir=$CI_PROJECT_DIR/qodana --report-dir=$CI_PROJECT_DIR/qodana/report artifacts: paths: - qodana

In this configuration, the image:name keyword pulls the Qodana Docker image of your choice.

The script keyword runs the qodana command and enumerates the Qodana configuration options described in the Docker image configuration section.

Finally, artifacts configures job artifacts.

Inspect specific branches

Using the only keyword, you can tell Qodana which branches to inspect. To inspect only the main branch and incoming merge requests, you can use this configuration:

qodana: only: - main - merge_requests image: name: jetbrains/qodana-<linter> entrypoint: [""] script: - qodana artifacts: paths: - qodana

Forward reports to Qodana Cloud

Once the inspection step is complete, inspection reports can be forwarded to Qodana Cloud.

This configuration defines the variables required by Qodana Cloud and referring to the following values:

  • QODANA_TOKEN is the project token of Qodana Cloud defined as the $qodana_token variable

  • QODANA_REMOTE_URL is the project URL

  • QODANA_BRANCH is the name of the inspected branch

  • QODANA_REVISION is the commit hash

  • QODANA_JOB_URL is the job URL

qodana: image: name: jetbrains/qodana-<linter> entrypoint: [""] variables: QODANA_TOKEN: $qodana_token QODANA_REMOTE_URL: git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git QODANA_BRANCH: $CI_COMMIT_BRANCH QODANA_REVISION: $CI_COMMIT_SHA QODANA_JOB_URL: $CI_JOB_URL script: - qodana artifacts: paths: - qodana

Expose Qodana reports

To make a report available in any given merge request, you can use the expose_as keyword and change the path to the artifacts:

qodana: image: name: jetbrains/qodana-<linter> entrypoint: [""] script: - qodana --save-report --results-dir=$CI_PROJECT_DIR/qodana --report-dir=$CI_PROJECT_DIR/qodana/report artifacts: paths: - qodana/report/ expose_as: 'Qodana report'

Assuming that you have configured your pipeline in a similar manner, this is what it may look like:

  1. Qodana report affiliated with a pipeline in a merge request

    Qodana report affiliated with a pipeline in a merge request
  2. Available actions for a given exposed Qodana artifact

    Available actions for a given exposed Qodana artifact

Combined configuration

This configuration combines all approaches mentioned in this section.

qodana: only: - main - merge_requests image: name: jetbrains/qodana-<linter> entrypoint: [""] variables: QODANA_TOKEN: <your-project-token> QODANA_REMOTE_URL: git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git QODANA_BRANCH: $CI_COMMIT_BRANCH QODANA_REVISION: $CI_COMMIT_SHA QODANA_JOB_URL: $CI_JOB_URL script: - qodana --save-report --results-dir=$CI_PROJECT_DIR/qodana --report-dir=$CI_PROJECT_DIR/qodana/report artifacts: paths: - qodana/report/ expose_as: 'Qodana report'
Last modified: 08 February 2023