# 9.5 - Continuous Integration

Continuous Integration — Knowledge Base articles.

# Continuous Integration (Knowledge Base Articles)

## Contents

- [Appvance CICD](/books/continuous-integration/page/appvance-cicd)
- [Updating CICD Dashboard Code Location for AIQ 5.x.x](/books/continuous-integration/page/updating-cicd-dashboard-code-location-for-aiq-5xx)
- [Bamboo CI integration with Dashboard Creation](/books/continuous-integration/page/bamboo-ci-integration-with-dashboard-creation)
- [Issues with Linux Environments Issues with Linux Environments](/books/continuous-integration/page/issues-with-linux-environments-issues-with-linux-environments)
- [Using Appvance AIQ with Docker/Containers](/books/continuous-integration/page/using-appvance-aiq-with-dockercontainers)
- [GitHub Action](/books/continuous-integration/page/github-action)
- [GitHub Action CICD](/books/continuous-integration/page/github-action-cicd)
- [How to consume scenario into the dashboard](/books/continuous-integration/page/how-to-consume-scenario-into-the-dashboard)
- [How to link 2 jobs in Jenkins](/books/continuous-integration/page/how-to-link-2-jobs-in-jenkins)
- [Move/Re-locate Dashboard projects](/books/continuous-integration/page/movere-locate-dashboard-projects)
- [Questions on Jenkins Server Questions on Jenkins Server](/books/continuous-integration/page/questions-on-jenkins-server-questions-on-jenkins-server)
- [Parameterize the Controller URL in a GitLab CICD Pipeline](/books/continuous-integration/page/parameterize-the-controller-url-in-a-gitlab-cicd-pipeline)
- [Runing Appvance IQ on Windows as a Service](/books/continuous-integration/page/runing-appvance-iq-on-windows-as-a-service)
- [Using Bamboo CI with Appvance](/books/continuous-integration/page/using-bamboo-ci-with-appvance)
- [Why Jenkins job is failing with an Out of Memory error?](/books/continuous-integration/page/why-jenkins-job-is-failing-with-an-out-of-memory-error)
- [CICD Dashboard Credentials Encryption (Public)](/books/continuous-integration/page/cicd-dashboard-credentials-encryption-public)
- [Encrypting EC2 Cloud Configuration Files using API Calls](/books/continuous-integration/page/encrypting-ec2-cloud-configuration-files-using-api-calls)

This section contains a collection of articles from the Appvance Knowledge Base.

<div class="MCMiniTocBox_0 miniToc nocontent" id="bkmrk-"> </div><div id="bkmrk-last-updated%3A-june-2">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">June 26, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# AIQ CI/CD Overview

## Recommended guidance

Use AIQ CI/CD integrations to run controlled Scenario Editor, Service Suite, and performance checks from automated delivery pipelines. CI/CD jobs should provide repeatable execution, clear pass/fail criteria, and useful evidence without exposing credentials or customer data.

## What to define before automation

- The AIQ environment, project, scenario or suite, target Test Node, and browser or API execution mode.
- The pipeline trigger: pull request, merge, scheduled run, release candidate, or production validation.
- The test data source, expected result, timeout, retry policy, and artifact retention.
- The credential model, using CI/CD secret storage instead of hard-coded values.
- The owner responsible for failures, flaky tests, and pipeline maintenance.

## Recommended pipeline behavior

1. Run a small smoke suite before expensive end-to-end or performance suites.
2. Fail the pipeline when AIQ cannot start, times out, or returns a failed result.
3. Publish links to AIQ executions, logs, reports, screenshots, and service responses.
4. Separate product failures from environment, data, browser, and integration failures.
5. Review duplicate or obsolete CI/CD jobs regularly and retire unused jobs.

*Last updated: October 5, 2026*

# Update CI/CD Dashboard Code Location for AIQ 5.x

## Recommended guidance

This article is version-specific to AIQ 5.x environments. Use it only when maintaining an AIQ 5.x CI/CD dashboard or migrating an older dashboard configuration. For newer environments, confirm the current dashboard and repository structure before applying these steps.

## Before changing code locations

- Confirm the exact AIQ version, dashboard version, repository, branch, and deployment path.
- Back up the current dashboard configuration and document the previous code location.
- Check pipeline variables, environment files, service accounts, and artifact paths.
- Confirm permissions for the CI/CD runner and any service that reads dashboard code.
- Test changes in a non-production environment first.

## Validation checklist

1. Run the CI/CD job that publishes or refreshes the dashboard.
2. Confirm the dashboard reads from the new code location.
3. Verify links to AIQ executions, reports, and artifacts still resolve correctly.
4. Review logs for missing files, permission errors, or stale cache references.
5. Document the final path and rollback instructions.

**Obsolescence note:** If the AIQ 5.x dashboard is no longer in use, mark this page as legacy or consolidate the relevant migration note into the active CI/CD documentation.

*Last updated: October 5, 2026*

# Bamboo CI Integration with AIQ Dashboard Creation

**Last reviewed:** September 24, 2026

Use this article when Bamboo triggers AIQ execution and the pipeline also needs to publish or create dashboard evidence.

## What changed in this article

- Confirm whether Bamboo is still the active CI tool for the customer; many teams have moved this workflow to Jenkins or another CI service.
- Keep Bamboo plan variables separate from AIQ credentials and dashboard names.
- Validate dashboard creation with one controlled build before enabling scheduled or branch-wide runs.

## Validation workflow

1. Review the Bamboo plan variables used to call AIQ.
2. Run a single build and confirm the AIQ execution completes successfully.
3. Verify that the expected dashboard is created or updated with the correct run data.

**Review note:** Marked Bamboo as customer/environment-specific CI guidance and tightened the scope around dashboard creation.

---

Last updated: September 24, 2026

If you have feedback on this topic, contact <documentation@appvance.ai>.

# Troubleshoot Linux Environment Issues for AIQ CI

**Last reviewed:** September 30, 2026

Use this article when AIQ executions or CI jobs fail because of Linux host, browser, display, dependency, permission, or environment configuration issues.

## What changed in this article

- Fixed the duplicated title “Issues with Linux Environments Issues with Linux Environments.”
- Reframed the content around AIQ CI and Linux execution-host troubleshooting.
- Added checks for browser dependencies, display/headless settings, filesystem permissions, environment variables, network/proxy configuration, and logs.

## Validation workflow

1. Collect the CI job log, AIQ/Test Node log, browser log, and host package/runtime versions.
2. Check Linux display/headless configuration, permissions, dependencies, proxy/network access, and working directory paths.
3. Run a minimal scenario on the same host before changing the full CI pipeline.

**Review note:** This page now removes duplicate title noise and gives a concrete Linux troubleshooting path.

---

Last updated: September 30, 2026

If you have feedback on this topic, contact <documentation@appvance.ai>.

# Using Appvance AIQ with Docker/Containers

### What is Docker?

Docker is a container management service that allows developers to build applications, ship them into containers and run them anywhere.

### What is a container?

Is the encapsulation os an application with it dependencies, appears to be a lightweight form of virtual machine (VMs).

### Facts about containers

- Share resources with the host OS (more efficient).
- Can be started and stopped in a fraction of the time a virtual machine would do it.
- Incurs into little to no overhead compared to applications running natively on the host OS.
- Allows changes in the running environment easily.
- A developer can run dozens of containers at the same time, making it possible to emulate a production-ready distributed system.
- Allows run complex applications without needing to spend hours of configuration and installation issues or worrying about the changes required for their system.
- This concept is not new, it's an old concept in UNIX systems, they had the chroot command, there have been different implementations across the time and different distributions. coming to what we are discussing today.
 
### Docker Hub

Get started by downloading Docker Desktop, and learn how you can build, tag and share a sample image on Hub, please take a look to https://hub.docker.com/, create an account and log in, you will find an enormous number of public container images for download, avoiding duplicates work already done by others; in our case could use one of those images as the base to create a new one for AIQ.

Docker philosophy "Batteries included but replaceable", meaning that a complete solution would be provided, but parts could be swapped out.

One of the biggest use cases and strongest drivers behind the uptake of containers are microservices.

### Installing Docker

The official way to install docker as below.

$ culr http://get.docker.com &gt; /tmp/install.sh

A good install practice is checking the changes to be performed, do it as below.

$ cat /tmp/install.sh

Change the access permission for /tmp/install.sh.

$ chmod +x /tmp/install.sh

Issue the script file as below

$ /tmp/install.sh

A few checks, then install docker using the appropriate package for your system, this documentation does not include the installation procedure for Windows platforms, there are a lot of considerations beginning by Docker is native for Unix alike systems and there are not strong implementations and experiences in Windows.

In case of Red Hat based distributions, it is recommended you run SELLinux in permissive mode, which will log rather than enforce errors, check mode by issuing as below.

$ sestatus

If the current mode is "enforcing" then change into the permissive mode as follows.

$ setenforce 0

### Additional tasks

As Docker is a privileged binary, it will need to prefix commands with sudo to avoid that add the current user to the docker group as follows.

$ sudo usermod -aG docker

The last command is for Ubuntu but would be similar for other Linux distributions, now restart the Docker service by performing.

$ sudo service docker restart

In order to test that the Docker has been properly installed run the command as follows.

$ docker run debian echo "hello world"

Some verbosity will be obtained, the last line must be "hello world"

### Building images from Dockerfiles

Dockerfile is a plain text file containing instructions to create an image, a Docker image is a file, comprised of multiple layers, used to execute code in a Docker container.

Most common instructions are:

- FROM, specify the base image to use, the format for this instruction is "FROM &lt;image&gt;:&lt;version&gt;" latest version will be used if no version is specified e.g. (FROM ubuntu:18.04)
- WORKDIR, specify the default folder in the container.
- ENV, specify environmental variables in pairs e.g. (ENV folderTemp /tmp)
- LABEL, customized labels e.g. (version=1.0)
- EXPOSE, informs Docker that the container listens on the specified network ports at runtime e.g. (EXPOSE 80/tcp)
- USER, sets the user name (or UID) and optionally the user group (or GID) to use when running the image and for anyRUN,CMDandENTRYPOINTinstructions that follow it in theDockerfile e.g. (USER patrick)
- VOLUME, creates a mount point with the specified name and marks it as holding externally mounted volumes from native host or other containers, these volumes will persist the data.
- COPY, This copies one or many local files or folders into the destination within your Docker image e.g. (COPY Gemfile Gemfile.lock ./)
- ADD, same that COPY but additionally If &lt;source&gt; is a local tar archive in a recognized compression format, then it is automatically unpacked as a directory into the Docker image. e.g. (ADD rootfs.tar.xz /)
- RUN, executes the command(s) that you give in a new layer and creates a new image. This is mainly used for installing a new package, e.g. (RUN apt-get update &amp;&amp; apt-get install -y apache2)
- ENTRYPOINT, Entrypoint sets the command and parameters that will be executed first when a container is run, e.g. (ENTRYPOINT \["/usr/sbin/apache2ctl", "-D", "FOREGROUND"\]
- CMD, The main purpose of a CMD (Dockerfiles) / command (Docker Compose files) is to provide defaults when executing a container. These will be executed after the entrypoint.
 
There are more instructions and details over this stuff, but this document is not intended to be a Docker course but the necessary tools to implement AIQ in containers.

### Best Practices

- Needs to be easy to destroy.
- One service per container.
- Avoid undesired files by declaring them in .dockerignore file.
- As few layers as possible.
- Use multiline in instructions for readability and layers reduction.
- Have the more arguments as possible.
- Avoid installing unnecessary packages.
- Adding labels that help and guide the usage.
 
<div id="bkmrk-last-updated%3A-may-17">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">May 17, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# GitHub Action

[https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-ant](https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-ant)

You must be authorized on GitHub with the public key.

Create a new repository.

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/fsotpHXhOIbMg8Yw-70d5dbf0a61e.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/UtIkyYAVKehAmyPY-3f26225f8de7.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/m6PKQLWkdkdFTLwW-058bb8c5955b.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/GzAOCbmRtTEMf2gX-92ca536c8af4.png)Clone repo.

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/3fPrIAKZm0BWO0QH-174319c01be5.png)Open the terminal on his machine.

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/NaCwOND2i3wB4ZFo-3f54657912db.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/zJeFdIJ9xYs8WICF-7790c1e2c8b3.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/5ZHgDIMzPN5YraDl-69a0f25b740b.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/1JsHmknqbxyLlJHl-f6772d9499ba.png)Change directory.

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/xkHvQI2KE9A8hKCp-ad226c4f402f.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/rv5zTYl6RamYwHaF-727444dcf62c.png)Create files or paste some code into the repo

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/6mtUzoY5iS6jO3FV-30e30ac324e8.png)<div id="bkmrk-name%3A-ci-create-dash"> <table> <colgroup> <col style="width:680px;"></col> </colgroup> <tbody> <tr> <td><div style="border-width:1px;"><div>```
name: CI-Create-Dashboard
on:
  push:
    branches:
      - master
  workflow_dispatch:
env:
  REGISTRY: <name of registry>jobs:
  lint:
    runs-on: ubuntu-latest
    name: Lint Code Base
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Lint Code Base
        uses: github/super-linter@v4
        env:
          VALIDATE_ALL_CODEBASE: false
          DEFAULT_BRANCH: master
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  build_and_push:
    runs-on: ubuntu-latest
    name: Build and push docker image
    needs: lint
    outputs:
      commit_hash: ${{ steps.commit_hash.outputs.commit_hash }}
    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with: 
          java-version: '11'
          distribution: 'adopt'
      - name: Build with Ant
        run: ant -noinput -buildfile build.xml
      - id: commit_hash
        run: echo "::set-output name=commit_hash::${GITHUB_SHA::7}"      - name: Login to <registry>        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USER }}
          password: ${{ secrets.DOCKER_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          context: .
          push: true
          tags: |
            ${{ env.REGISTRY }}:${{ steps.commit_hash.outputs.commit_hash }}
```

 </div> </div> </td> </tr> </tbody> </table>

 </div>Copy code from above example main.yml and paste into, or use example from GitHub

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/10fCw4FGUCB0CHi2-5d95ee7c79d1.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/DkGrrK8rOdR7udoQ-f2c23206138f.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/xNyXRj8d1q6sqE3p-df96afca3774.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/MSu5Rr5XGXtqncmx-af13a1908168.png)GitHub created directory for you [.github](https://github.com/nikolasht1/new-repository/tree/main/.github)/**workflows**/

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/LO7YvjrgWZuaVZUi-284a208732e9.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/SfMih5EtWZvL0hNp-8484260515e1.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/aHzxNMAaNQsOsSEp-0821995689ef.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/DD62TnXfw4h2uJad-70a030484d95.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/HLrmbJiMK5tyLfW2-675a30ef3c3e.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/c2VJOWVuFalWDxpv-0d69e0d6c84d.png)For more information visit [https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-ant](https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-ant)

<div id="bkmrk-last-updated%3A-june-2">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">June 26, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# GitHub Action CICD

Prerequisite: Attached file, GITRepo.zip should be present in the GitHub repo as shown in the first snapshot

- [GITRepo.zip](../../../Resources/Scripts/GITRepo.zip)
 
The following files are available in the folder. The following information details the configuration changes need to be made.

- Build.xml
- controller.json
- ec2.creds
 
## Build.xml

Build.xml files hold the configuration settings and also all the defined ANT tags.

Some of the ant tags are explained below:

- deps - Downloads the required AppvanceRestClientWithDeps.jar
- startNode - Starts the mentioned EC2 instance using the file ec2.creds and controller.json files which holds details about account and instance details.  
    setupEnvironment - Depending on the parameters, we could use this to set up the environment.
- executeScenario - Executes the mentioned scenarios.
- stopNode - Stops the instance once the execution is done.
- createScenariosDashboard - This tag will create the Scenario Dashboard once execution is complete.
- createScenariosDashboard - This tag will create the Scenario Dashboard once execution is complete.
 
### AISG Related Targets

- blueprintCreation - Starts the creation of the AISG.
- reportUpload - uploads the smoke test report, timing report and a BlueprintReport.html which is a human-readable report.uploads the smoke test report, timing report and a BlueprintReport.html which is a human-readable report.
- blueprintDashboard: this target generates an HTML report that includes the history of all previous build reports and uploads it to an S3 bucket.
- checkResult: this target checks the AISG generated report and it will fail the build if the number of failures surpases a user defined parameter.
- generateRegressionScenario - Generates the Regression scenarios.
 
Details about all the ant targets can be found in [CICD- AntTags.](https://docs.appvance.net/Content/AIQ/Integrations/ContinousIntegration/CICD__AntTags.htm)

## controller.json

Basically has details about the controller machine and the credentials. Above can be used when we have the EC2 set-up.

When we are running AIQ local builds, instances in the 2nd line could be replaced with "url" and full URL of the AIQ controller could be provided.

<div class="codeSnippet" id="bkmrk-copy-%7B%22controller%22%3A-"><div class="codeSnippetBody">```
{<br></br><span style="color:#dd1144;">"controller"</span>: {<br></br><span style="color:#dd1144;">"url"</span>: <span style="color:#dd1144;">"<http://<replace_IP>:8080"</span>,><br></br><span style="color:#dd1144;">"instances"</span>: [<span style="color:#dd1144;">"<replace_instanceID>"</span>],<br></br><span style="color:#dd1144;">"ec2Creds"</span>: <span style="color:#dd1144;">"ec2.creds"</span>,<br></br><span style="color:#dd1144;">"timeOut"</span>: <span style="color:#008080;">180</span>,<br></br><span style="color:#dd1144;">"username"</span>: <span style="color:#dd1144;">"<replace_username>"</span>,<br></br><span style="color:#dd1144;">"password"</span>: <span style="color:#dd1144;">"<replace_password>"</span>,<br></br><span style="color:#dd1144;">"workFolder"</span>: <span style="color:#dd1144;">"<replace_path/to/AIQ/resources>"</span><br></br>}<br></br>}<br></br>
```

 </div> </div>## ec2.creds

ec2.creds will have details of the AWS account: This can be used when we are using AIQ Controller on the EC2 machine and when yours tests are run in the AWS cloud.

AWS\_ACCESS\_KEY\_ID=&lt;replace\_awsKEYIDE&gt;

AWS\_SECRET\_ACCESS\_KEY=&lt;replace\_awsSecretAccessKey&gt;

## Required File Changes

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/486iVn4Wvw1Lxm4Q-7c33dbb05877.png)

Once we login to GitHub click the Actions tabs and click New Workflow

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/YtkIcWLBGjCBzfRV-b9f4f49d3cbb.png)

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/Hn3brP6fR1ddr9EN-2f5495186ef5.png)

Click Simple Workflow by Github and paste the below code into the .yml Text Editor

<div class="codeSnippet" id="bkmrk-copy-name%3A-ci-create"><div class="codeSnippetBody">```
name: CI-Create-Dashboard<br></br><br></br>on:<br></br>  push:<br></br>    branches:<br></br>      - master<br></br>  workflow_dispatch:<br></br><br></br>env:<br></br>  REGISTRY: &lt;name of registry&gt;jobs:<br></br>  lint:<br></br>    runs-on: ubuntu-latest<br></br>    name: Lint Code Base<br></br>    steps:<br></br>      - name: Checkout Code<br></br>        uses: actions/checkout@v3<br></br>        with:<br></br>          fetch-depth: 0<br></br>      - name: Lint Code Base<br></br>        uses: github/super-linter@v4<br></br>        env:<br></br>          VALIDATE_ALL_CODEBASE: false<br></br>          DEFAULT_BRANCH: master<br></br>          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}<br></br><br></br>  build_and_push:<br></br>    runs-on: ubuntu-latest<br></br>    name: Build and push docker image<br></br>    needs: lint<br></br>    outputs:<br></br>      commit_hash: ${{ steps.commit_hash.outputs.commit_hash }}<br></br>    steps:<br></br>      - uses: actions/checkout@v3<br></br>      - name: Set up JDK 11<br></br>        uses: actions/setup-java@v3<br></br>        with: <br></br>          java-version: '11'<br></br>          distribution: 'adopt'<br></br>      - name: Build with Ant<br></br>        run: ant -noinput -buildfile build.xml<br></br><br></br>      - id: commit_hash<br></br>        run: echo "::set-output name=commit_hash::${GITHUB_SHA::7}"      - name: Login to &lt;registry&gt;        uses: docker/login-action@v2<br></br>        with:<br></br>          username: ${{ secrets.DOCKER_USER }}<br></br>          password: ${{ secrets.DOCKER_TOKEN }}<br></br><br></br>      - name: Build and push<br></br>        uses: docker/build-push-action@v3<br></br>        with:<br></br>          context: .<br></br>          push: true<br></br>          tags: |<br></br>            ${{ env.REGISTRY }}:${{ steps.commit_hash.outputs.commit_hash }}
```

 </div> </div><div id="bkmrk-%C2%A0" style="border-width:1px;"><div>```
 
```

```

```

 </div> </div> ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/LSpMMvvTJBc0oYA6-484fb917474d.png)Click Run Workflow

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/qIgGoxZBLZVHTXpL-3fd5f3286ed4.png)<div id="bkmrk-last-updated%3A-july-0">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">July 03, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# How to consume scenario into the dashboard

- Unzip the files that are available (That we got by making use of CreateScenarioDashboard ant call)
- edit the build.xml:
    
    
    - change product property value
    - change environment property value
    - change project property value
    - change the customer property value
    - change bucket property value
 
- RMScenario1: run **ant report1**
- RMScenario2: run **ant report2**
 
<div id="bkmrk-last-updated%3A-june-0">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">June 02, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# How to link 2 jobs in Jenkins

How to create linking between different jobs or projects in Jenkins. For our learning purposes, we have created two small jobs named ‘Job 01’ and ‘Job 02’ in Jenkins server:

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/Ujl2EF3mADAjSNGR-cc106c9cb617.png)In order to this, let’s go to job 02 and select configure from dropdown:

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/mJ1eKILraAD1MXgK-bcd1977f674a.png)Now go to ‘Build triggers’ and select ‘Build after other projects are built’. Under ‘Projects to Watch’ to select ‘job 01’:

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/efKokVfpDlSIyaxq-0cf27d5994f6.png)Let’s select ‘Trigger only if build is stable’ so that ‘Job 02’ is executed only when ‘Job 01’ is successfully completed. After this, select save and apply. Now when you build ‘Job 01’ and see the log output, it should be something like this:

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/nwxKzaeA7TnwstCd-fdea5d3d861e.png)<div id="bkmrk-last-updated%3A-june-2">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">June 26, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# Move/Re-locate Dashboard projects

Dashboard projects stored in one location can be moved into another s3 bucket or GIT repository.

**The dashboard projects can be moved from one location to another :**

**I) s3 to another s3 bucket.**

**ii) s3 bucket to GIT repository.**

**iii) GIT to GIT Repository.**

**iv) GIT Repository to s3 bucket.**

### **Steps to be followed to move/re-locate:** 

**1.Below ant tag must be added to build.xml of a CICD project:**

i) Ant Tag to **relocate**:

<div id="bkmrk-%3Ctarget-name%3D%22reloca" style="border-width:1px;"><div>```
<target name="relocation" depends="deps">      <taskdef name="relocation" classname="com.appvance.ci.location.Relocation">         <classpath refid="RestClientLibPath" />      </taskdef>      <relocation config="${config}" />   </target>
```

 </div> </div>ii) Ant Tag to **UpdateDashboard**:

<div id="bkmrk-%3Ctarget-name%3D%22update" style="border-width:1px;"><div>```
<target  name="updateDashboard" depends="deps">   <taskdef name="ProductDashboard" classname="com.appvance.ci.ProductsDashboard">		<classpath refid="RestClientLibPath" />   </taskdef>   <ProductDashboard 
		credentials="${awsCredentials}" 
		bucketBase="${Bucket}" 
		customer="${customer}" /></target>
```

 </div> </div>Here, **ProductDashboard** is to re-generate all the Html content for you (history and main file only )

**2. Follow the below steps to add config.json file to move from one s3 bucket to another s3 bucket:**

 i. Open a CICD project.

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/oGdbB8lhC6k2aq5F-4f3df8d050c3.png) ii. Create and add config.json file to the CICD project.

 In the below example, it is added inside the AppvanceLibs folder

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/HfpA7tsm2a8cbwA9-9ed67b578291.png) iii. Copy the below content to the config.json file.

 Input S3 &gt; S3

<div id="bkmrk-%7B-%22in%22%3A-%7B-%22type%22%3A%22s3" style="border-width:1px;"><div>```
{
	"in": {
		"type":"s3",
		"source":"appvance-source",
		"folder": "products",
		"creds": "AppvanceLibs/ec2A.creds"	},
	"out": {
		"type":"s3",
		"target":"appvance-target",
		"creds": "AppvanceLibs/ec2B.creds"	}
}
```

 </div> </div>In the above code,

**source**: In this field input the s3 bucket name in which already dashboard data is stored

**target**: In this field input the s3 bucket name in which data needs to be moved.

**Note**: Make sure the ec2.creds file is added for both s3 buckets if they are in a different region.

- **To Relocate/Move dashboard data from S3 to GIT, you need to change the config.json to below and add githhtp.json to the project:**
 
Input S3 &gt; GIT

<div id="bkmrk-%7B-%22in%22%3A-%7B-%22type%22%3A%22s3-1" style="border-width:1px;"><div>```
{
	"in": {
		"type":"s3",
		"source":"appvance-qa",
		"folder": "products",
		"creds": "AppvanceLibs/ec2.creds"	},	
	"out": {
		"type":"git",
		"creds": "AppvanceLibs/githttp.json"	}
}
```

 </div> </div>Add the githttp.json file to CICD project

<div id="bkmrk-%7B-%22username%22%3A-%22someu" style="border-width:1px;"><div>```
{
	"username": "someUserAccount@appvance.com",
	"password": "theUserPassword",
	"repository": "https://gitlab.com/theGitRepository.git",
	"branch": "thebranch",
	"sshPhrase": "";
	"sshKey": ""}
```

 </div> </div> ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/RutTFDhB5pE9J7Io-bb6f692860dd.png)- **To Relocate/Move dashboard data from GIT to GIT, you need to change the config.json to below and add githhtp.json to the project:**
 
Input GIT &gt; GIT

<div id="bkmrk-%7B-%22in%22%3A-%7B-%22type%22%3A%22gi" style="border-width:1px;"><div>```
{
	"in": {
		"type":"git",
		"creds": "AppvanceLibs/githttpA.json"	},		
	"out": {
		"type":"git",
		"creds": "AppvanceLibs/githttpB.json"	}
}
```

 </div> </div>Note: Add githttp.json files for both source and target repository location.

- **To Relocate/Move dashboard data from GIT to S3, you need to change the config.json to below and add githhtp.json to the project:**
 
Input GIT &gt; S3

<div id="bkmrk-%7B-%22in%22%3A-%7B-%22type%22%3A%22gi-1" style="border-width:1px;"><div>```
{
	"in": {
		"type":"git",
		"creds": "AppvanceLibs/githttp.json"	},
	"out": {
		"type":"s3",
		"target":"appvance-wtc",
		"creds": "AppvanceLibs/ec2.creds"	}
}
```

 </div> </div>**3. Now, open the command prompt from the CICD location and run the below command:**

Note: Not mandatory AIQ must be running to execute the below commands.

**ant relocation** // This command moves the file from source s3 bucket to target s3 bucket.

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/b1n2Mtfv9e0u9zG3-28ced24fd4c9.png)**ant updateDashboard** // This command updates the existing dashboard main.html and reflects newly added data in the existing main.html.

**4. User can view the results with new s3 URI if the data is moved to s3 and if data is moved to GIT user must clone the GIT repository, then check out the branch&gt;click on Explore**

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/xtOXVoEW6twRFwoA-3f58b8785ed7.png) ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/q57o7ZkMaI0Oe8Sh-4bba24dc064f.png)<div id="bkmrk-last-updated%3A-june-2">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">June 26, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# Questions on Jenkins Server Questions on Jenkins Server

Regarding the test execution machine to trigger build XML for the dashboard (2 Core and 8GB for Jenkins, with ant and git plugin), can this be shared for different teams/applications?

Can you also confirm, that this machine will have a copy of the automated scripts? And if this is shared with different application teams, everyone will have access to the test scripts for all applications?

Responses -

1- Yes, it can be shared with different applications or teams, just change the product/environment to differentiate results.

2- Workspaces are created for each pipeline, and it gets saved there as a temp folder right and we don't know how long it stays there is a plugin called workspace clean up plugin, that can be configured to clean up workspaces<a>https://computingforgeeks.com/automatically-clean-up-jenkins-workspace-after-builds-complete/#:~:text=Login%20to%20Jenk\[…\]20tab%20below%20the%20page</a>

3- yes, I think everyone will have that access, again depends on 2

<div id="bkmrk-last-updated%3A-june-0">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">June 02, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# Parameterize the AIQ Controller URL in a GitLab CI/CD Pipeline

# Parameterize the AIQ Controller URL in a GitLab CI/CD Pipeline

Parameterize the AIQ Controller URL so the same GitLab CI/CD pipeline can run against different AIQ environments without changing the pipeline script for every deployment.

## Recommended approach

- Store the Controller URL as a GitLab CI/CD variable instead of hard-coding it in the pipeline file.
- Use separate variables for development, staging, and production-like AIQ environments.
- Keep authentication tokens and credentials in protected or masked variables.
- Validate the URL before triggering a long-running suite so failed configuration is caught early.

## Pipeline checklist

1. Define the Controller URL variable in GitLab settings or the pipeline environment.
2. Reference the variable from the AIQ execution command or integration script.
3. Run a small smoke test to confirm the pipeline reaches the intended controller.
4. Review logs to make sure sensitive values are not printed.
5. Promote the same pipeline definition across environments by changing only variable values.

*Last updated: October 8, 2026*

# Runing Appvance IQ on Windows as a Service

It is recommended that you start AIQ services automatically rather than manually. The suggested method is to use the Autologon utility to setup Appvance IQ to run as service on Windows.

Autologon is Microsoft utility that enables you to easily configure Windows’ built-in autologon mechanism. Instead of waiting for a user to enter their name and password, Windows uses the credentials you enter with Autologon, which are encrypted in the Registry, to log on the specified user automatically.

Prerequisites:

- Appvance IQ is installed on Windows OS
- Login to Windows using an account with administrator privileges
 
## Download and Install Autologon

1. Download Autologon from Microsoft here: [Download Autologon](https://docs.microsoft.com/en-us/sysinternals/downloads/autologon)
2. Extract `Autologon.zip` archive. For example, extract to `C:\Autologon`.
 
## Setup Autologon Service

### Checking for Previous Configurations

Verify that no other entries for Autologon service exist as follows. If there are previous configurations on the server, it may prevent Autologon from working correctly.

For any past users for which an Autologon service was created:

1. Open Autologon.
2. Enter the Username, Domain and Password.
3. Click **Disable**.
 
Check the Registry for Autologon entries:

1. Inthe Registry navigate to **HKEY\_LOCAL\_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon**
2. Change the value of the `AutoAdminLogon` key from `1 (true)` to `0 (false)`, to disable the `AutoAdminLogon` feature.
    
    See [Turn on automatic logon in Windows](https://learn.microsoft.com/en-us/troubleshoot/windows-server/user-profiles-and-logon/turn-on-automatic-logon) on the Microsoft site for more information.
 
Active Directory considerations:

- When the user used to login is provided by an Active Directory domain and the Active Directory is set to have an interactive login, autologon process will not work. In those cases, try creating a local user in the machine itself, edit its group policy to remove any interactive logon and use this local user to set the autologin process.
 
### Configuring Autologon

1. Open Autologon.exe (64 bit). The **Autologon - Sysinternals** window appears.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/JxhlMyxdGPuuskqK-27dc8bc83055.png)
2. Enter the user’s password and click **Enable**.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/DVLfJZcu2X90Svqt-1a4b55baa8b0.png)
3. Open **Task Scheduler** with administrative privileges, click **Action** and select **Create Basic Task**. The Create Basic Task Wizard appears.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/1qGwSiXHCz35iss9-6cf394654361.png)
4. Enter a name in the **Name** box (such as AIQ or Appvance) and click **Next**The Task Trigger list appears
5. Select **When I log on** and click **Next**
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/nuGWoRj2yxSifasf-ad9fc21ee4c5.png)
6. The Action list appears.
7. Select **Start a Program** and click **Next**
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/NETXOoSwpy8VmHKE-bff7ace31542.png)
8. The Start a Program configuration appears.
9. Click **Browse**.
10. Browse to and select **&lt;aiq-path&gt;/TestNode/startup.bat** and click **Open**.
11. **IMPORTANT**: Also enter the **&lt;aiq-path&gt;/TestNode/** path in the **Start in** box and click **Next**.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/UHZDq1pHVVm0N4Q0-612da5402225.png)
12. Select **Open the Properties dialog for this task when I click Finish**.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/xyRMCyfYLm3bE2fi-cf79023dee27.png)
13. Click **Finish**The Properties dialog appears.
14. Select **Run only when user is logged on**.
15. Check **Run with highest privileges**.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/83LjR4cXkNyAl84Z-78371a07e2e2.png)
16. Click **Settings**.
17. Uncheck the **Stop the task if it runs longer than** option.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/qcmA3ebsdbKD5mwC-ca0ef86b844a.png)
18. Click **OK**.
19. When prompted, enter the service username and password to apply the changes and click **OK**.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/O0sZu1XRXtZPJ22a-255c7de03fd5.png)
 
### Verifying Autologon Service

You may test the Autologon service by running it manually from the Task Scheduler. However to ensure the settings are working as expected, it is recommended that you restart the server and confirm that Appvance IQ launches properly without a user directly logging into the server.

<div id="bkmrk-last-updated%3A-march-">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">March 26, 2024</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# Legacy Bamboo CI Setup for AIQ Execution

**Last reviewed:** September 29, 2026

This page is retained for teams that still run AIQ execution plans from Atlassian Bamboo.

## What changed in this article

- Marked Bamboo CI setup as legacy/environment-specific because many current CI workflows use Jenkins, GitHub, Azure DevOps, or another maintained runner.
- Replaced the long Bamboo installation walkthrough with targeted AIQ execution-plan guidance: agents, Ant tasks, repositories, credentials, and result handling.
- Called out stale dependencies from the old article, including Ubuntu 16.04, Oracle JDK 8, old Bamboo agent versions, and credential files such as creds.json.

## Validation workflow

1. Confirm Bamboo is still the customer’s active CI system before using this page.
2. Validate agent OS, JDK, Ant, browser, repository, and AIQ connectivity before creating the execution plan.
3. Run one controlled Bamboo build and confirm AIQ execution results are created before scheduling recurring jobs.

**Review note:** Kept as legacy CI guidance and removed the impression that old Bamboo/JDK/Ubuntu setup is current default practice.

---

Last updated: September 29, 2026

If you have feedback on this topic, contact <documentation@appvance.ai>.

# Why Jenkins job is failing with an Out of Memory error?

Typically default Jenkins setup has a low setup amount of heap memory space (256Mb). This is good enough for medium size scenarios, but bulk scenarios needing to upload a lot of files for the scenario execution might fail with an `OutOfMemoryError: Java heap space` error similar to

<div id="bkmrk-c%3A%5Cprogramdata%5Cjenki" style="border-width:1px;"><div>```
C:\ProgramData\Jenkins\.jenkins\workspace\Smoke\Smoke.xml:221: java.lang.OutOfMemoryError: Java heap space
	at java.base/java.util.Arrays.copyOf(Arrays.java:3745)
```

 </div> </div>In this cases you need to increase the default Java heap memory available to Jenkins server.

To do that please follow following steps if your Jenkins server is Windows. Similar steps needs to be done in case of Jenkins using linux.

1. Log into your Jenkins server via RDP or SSH if it is ubuntu. You will need credentials for this.
2. Locate the file jenkins.xml file. Location may vary depending of operating system. In case of windows can find it normally at C:\\Program Files\\Jenkins.
3. Edit the jenkins.xml file in a test editor to increase the value of the -Xmx java parameter from   
    -Xmx256m to -Xmx2048m or more
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/snUty4ZPIEQHYKCI-b799dca58a39-png.jpg)
4. Add a environment variable with JAVA\_OPTS name and value -Xmx2048Mb
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/4cNQcvZ7NlWuqd9e-5f296ceb429d-png.jpg)
5. Open the TaskManager app and select Services Tab. Select java.exe for Jenkins process and stop it and restart it.
    
     ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/h5qxRzYbrz6rHxOS-b63f45092205.png)
 


<div id="bkmrk-last-updated%3A-june-2">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">June 26, 2023</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>

# CI/CD Dashboard Credential Encryption

## Recommended guidance

Credential encryption for CI/CD dashboards protects sensitive values used by automation. Treat this page as security-sensitive guidance: never paste real passwords, tokens, keys, or decrypted values into documentation, tickets, chat, or screenshots.

## Recommended controls

- Store secrets in approved secret managers or CI/CD credential stores.
- Encrypt values before they are committed or shared with deployment artifacts.
- Limit decryption capability to the runtime or owner that actually needs it.
- Rotate credentials when ownership, access scope, or exposure risk changes.
- Audit who can view, edit, or deploy encrypted dashboard configuration.

## Validation checklist

1. Confirm the dashboard can read encrypted values at runtime.
2. Confirm logs do not print decrypted credentials.
3. Test failure behavior when a credential is missing, expired, or revoked.
4. Document rotation and emergency revocation steps.

*Last updated: October 6, 2026*

# Encrypting EC2 Cloud Configuration Files using API Calls