logoBack to App page
Requirements and Test Management for Jira
Cloud Data Center
Documentation
FAQ
Release notes
Migration to Cloud
Requirements and Test Management for Jira
Cloud Data Center
Documentation
FAQ
Release notes
Migration to Cloud
Last updated Dec 27, 2024

GitLab integration

Use following step script in you .gitlab-ci.yml file.

  1. Obtain URL address to RTM REST API. Follow authentication documentation to learn how to authenticate and get the API URL for your RTM instance.
  2. Add a secret repository variable RTM_API_TOKEN in GitLab. It is used to authenticate with the RTM REST API. To learn how to set secured variables, see GitLab documentation.
  3. Update PROJECT_KEY with your target project for import.
  4. Create an archive with test results using tar.
Example: .gitlab-ci.yml Configuration
stages:
  - build
  - test
  - report

variables:
  RTM_URL: https://your-rtm-instance.com
  JOB_URL: $CI_PIPELINE_URL
  PROJECT_KEY: EXAMPLE
  TE_SUMMARY: Automated tests report build $CI_PIPELINE_ID
  
build_job:
  stage: build
  script:
    - echo "Building the project..."
    - ./gradlew build

test_job:
  stage: test
  script:
    - echo "Running tests..."
    - ./gradlew test
  artifacts:
    when: always
    reports:
      junit:
        - build/test-results/test/*.xml
    paths:
      - build/test-results/test/*.xml

import_test_results:
  stage: report
  script: |
    RESULTS_ARCHIVE=test_results.tar.gz
    find ./build/test-results/test -type f -name "*.xml" -exec tar czvf $RESULTS_ARCHIVE {} +      

    printf "\n[RTM] Importing test results...\n"
    IMPORT_RESULT=$(curl -s -S -X POST ${RTM_URL}/api/v2/automation/import-test-results \
      -H "Authorization: Bearer ${RTM_API_TOKEN}" \
      -F "projectKey=${PROJECT_KEY}" \
      -F "name=${TE_SUMMARY}" \
      -F "file=@${RESULTS_ARCHIVE}" \
      -F 'reportType=JUNIT' \
      -F "jobUrl=${JOB_URL}")
    # checks in loop import status
    if [[ $IMPORT_RESULT =~ ^.{8}-.{4}-.{4}-.{4}-.{12}$ ]]; then
      printf "[RTM] Import created with taskId: $IMPORT_RESULT, checking import status"
      TASK_STATUS='IMPORTING'
      TRIES=0
      while [[ "$TASK_STATUS" == *"IMPORTING"* && $TRIES != 30 ]]; do
        TASK_STATUS=$(curl -s -S ${RTM_URL}/api/v2/automation/import-status/$IMPORT_RESULT -H "Authorization: Bearer ${RTM_API_TOKEN}")
        if [[ "$TASK_STATUS" == *"IMPORTING"* ]]; then
          printf "\n[RTM] Importing, retrying in 10 second"
          sleep 10s
        fi
        ((TRIES = TRIES + 1))
      done
      if [ $TRIES -gt 30 ]; then
        printf "\n[RTM] Import timeout with last status: ${TASK_STATUS}\n"
      else
        printf "\n[RTM] Import completed with status: ${TASK_STATUS}\n"
      fi
    else
      printf "\n[RTM] Import failed with response: ${IMPORT_RESULT}\n"
    fi

Note

See REST API for all available options to import endpoint.

Explanation of steps

  1. Defining variables:
    • RTM_URL: The base URL for your RTM instance.
    • JOB_URL: A URL pointing to the current GitLab pipeline run.
    • PROJECT_KEY: Jira project key where results will be imported.
    • TE_SUMMARY: A summary for created Test Execution.
  2. Creating archive of test results:
    • Uses the tar command to compress all XML files from the ./target/surefire-reports directory into a .tar.gz archive.
  3. Importing test results:
    • The script uses curl to issue a POST request to the RTM API endpoint /api/v2/automation/import-test-results. It includes the test results archive and metadata such as project key, build summary, and job URL.
  4. Monitoring Import Status:
    • After submitting the test results, the script monitors the import status by repeatedly querying /api/v2/automation/import-status/{taskId}.
    • If the status is IMPORTING, it retries up to 30 times, with a 10-second delay between retries.
    • The script will log the final status or timeout if the import doesn’t complete in time.

Required changes

  1. Replace https://your-rtm-instance.com with the URL of your RTM instance.
  2. Replace EXAMPLE in PROJECT_KEY with your RTM project key.
  3. Ensure RTM_API_TOKEN is properly added as secret repository variable.
  4. Update directory for tar command with path to XML files with test results.

Best practices:

  • The RTM_API_TOKEN must remain secret as it provides authentication to the RTM system.
  • Make sure the generated test results are compatible with the specified reportType (in the example, JUnit is used).
  • Logs and responses will help debug any issues during the import process. If an error occurs, check the response from the curl commands for further insights.