GitLab CI/CD
Edit page Last modified: 08 February 2023GitLab 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
variableQODANA_REMOTE_URL
is the project URLQODANA_BRANCH
is the name of the inspected branchQODANA_REVISION
is the commit hashQODANA_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:
Qodana report affiliated with a pipeline in a merge request
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'
Thanks for your feedback!