Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

In this case, since Bamboo was configured to report results back to Xray, a new Test Execution would be created and linked back to the source Test Plan where the automation was triggered from

GitHub

Trigger a GitHub workflow from a Test Plan and report the results back to it

GitHub configuration

We need to create a personal access token so that we can use GitHub API later on. That can be done from within the user's profile.

Image Added Image Added


The token must have "workflow" scope enabled.

Image Added



Then, in your GitHub repository containing the project's code and tests, create a workflow under .github/workflows.

Image Added



The workflow will be triggered upon a "workflow dispatch" event, which is usually manually triggered. However, this event can also be triggered using GitHub's API.

In the following example the workflow will receive the Test Plan issue key as an input parameter. It will then run the build, including the automated tests, and in the end it will report the results back to Xray using the open-source GitHub action xray-action.

Code Block
languageyml
title/.github/workflows/jira_cloud_report_to_testplan.yaml
name: CI (Jira cloud example with GH action, report results to Test Plan - demo)
on:
  workflow_dispatch:
    inputs:
      test_plan_key:
        description: 'Test Plan issue key'
        required: false
        default: ''

jobs:
  build:
    runs-on: ubuntu-latest
        
    steps:
    - uses: actions/checkout@v1
    - name: Set up Java
      uses: actions/setup-java@v1
      with:
        java-version: '1.8'  
    - name: Cache Maven packages
      uses: actions/cache@v2
      with:
        path: ~/.m2
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: ${{ runner.os }}-m2
    - name: Build with Maven
      run: mvn clean compile test --file pom.xml
    - name: Submit results to Xray
      uses: mikepenz/xray-action@v0.9.4
      with:
        username: ${{ secrets.client_id }}
        password: ${{ secrets.client_secret }}
        testFormat: "junit"
        testPaths: "**/surefire-reports/*.xml"
        projectKey: "CALC"
        testPlanKey: ${{ github.event.inputs.test_plan_key }}



Automation configuration

  1. create a new rule and define the "When" (i.e. when it to should be triggered ), to be "Manually triggered"

Image Added

2. define the condition so that this rule can only be executed from Test Plan issue

Image Added

3. define an action (i.e. the "Then") as "Send webhook" and configure it as follows

Image Added

  • the web request URL provided above follows this syntax:
    • https://api.github.com/repos/<github_user>/<github_repository>/actions/workflows/<workflow_filename>/dispatches
  • the HTTP POST body content, defined in the "Custom data" field, will be used to identify the original Test Plan issue key and the branch of the code 

    Code Block
    languagejs
    titlecustom data (i.e. HTTP body content)
    collapsetrue
    {
    "ref":"main",
     "inputs":  {
      "test_plan_key": "{{issue.key}}"
     }
    }
  • besides, the "Accept" header that should be "application/vnd.github.v3+json"; define also an "Authorization" header having the value "Basic <auth>", where  the base64 encoded <auth> can be generated using your GitHub username plus the personal access token obtained earlier (as the password).


After publishing the rule, you can go to the screen of an issue and trigger a workflow run in GitHub.

Image Added


Image Added

In this case, since the workflow was configured to report results back to Xray, a new Test Execution would be created and linked back to the source Test Plan where the automation was triggered from.

Image Added

Image Added

GitLab

Trigger a GitLab workflow from a Test Plan and report the results back to it

GitLabb configuration

We need to create a trigger token so that we can use GitLab API later on. That can be done from within Settings > CI/CD.


Image Added


Image Added


Then, in your GitLab repository containing the project's code and tests, create a pipeline /.gitlab-ci.yml; this pipeline will be triggered using GitLab's API.


In the following example, the pipeline will receive the Test Plan issue key as an input parameter. It will then run the build, including the automated tests, and in the end it will report the results back to Xray using "curl" utility.

Code Block
languageyml
title/.gilab-ci.yml
# Use Maven 3.5 and JDK8
image: maven:3.5-jdk-8

variables:
  # This will supress any download for dependencies and plugins or upload messages which would clutter the console log.
  # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
  # when running from the command line.
  # `installAtEnd` and `deployAtEnd`are only effective with recent version of the corresponding plugins.
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"


# Cache downloaded dependencies and plugins between builds.
# To keep cache across branches add 'key: "$CI_JOB_REF_NAME"'
cache:
  paths:
    - .m2/repository


maven_build:
  script:
    - |
        echo "building my amazing repo..."
        mvn test
        export token=$(curl -H "Content-Type: application/json" -X POST --data "{ \"client_id\": \"$client_id\",\"client_secret\": \"$client_secret\" }" https://$xray_endpoint/api/v2/authenticate| tr -d '"')  
        echo $token
        curl -H "Content-Type: text/xml" -H "Authorization: Bearer $token" --data @target/surefire-reports/TEST-com.xpand.java.CalcTest.xml  "https://$xray_endpoint/api/v2/import/execution/junit?projectKey=CALC&testPlanKey=${TESTPLAN}"
        echo "done"


Xray endpoint's base URL and the API key credentials (i.e. client id + client secret) are defined in GitLab as variables.

Image Added 


Automation configuration

  1. create a new rule and define the "When" (i.e. when it to should be triggered ), to be "Manually triggered"

Image Added

2. define the condition so that this rule can only be executed from Test Plan issue

Image Added

3. define an action (i.e. the "Then") as "Send web request" and configure it as follows

Image Added


  • the web request URL provided above follows this syntax:
    • https://gitlab.com/api/v4/projects/<project_id_in_gitlab>/trigger/pipeline
  • the HTTP POST body content, defined in the "Custom data" field, will be used to identify the branch and also the original Test Plan issue key; authentication is done using the "token" variable, created earlier in GitLab

    Code Block
    languagejs
    titlecustom data (i.e. HTTP body content)
    collapsetrue
    token=9e347219182813....&ref=master&variables[TESTPLAN]={{issue.key}}
  • besides, the "Content-Type" header should be "multipart/form-data"


After publishing the rule, you can go to the screen of an issue and trigger a pipeline run in GitLab.

Image Added


Image Added


In this case, since the pipeline was configured to report results back to Xray, a new Test Execution would be created and linked back to the source Test Plan where the automation was triggered from.

Image Added

Image Added

Tips

Accessing network-restricted CI/CD tools

...