Appearance
GitLab CI Integration
Prerequisites
- GitLab project with access to CI/CD pipelines
- BrowserStack Code Quality instance running at public URL (e.g.,
https://bscq.example.com) - Repository Added to BrowserStack Code Quality (see Configure Your First Scan)
- Access Token from BrowserStack Code Quality User Settings
- CircleCI runner or GitLab-hosted runners with Docker support
Verify BrowserStack Code Quality URL is accessible:
bash
curl -I https://your-bscq-instance.comConfiguration
GitLab CI/CD Variables
Store BrowserStack Code Quality token as a protected CI/CD variable:
- Go to Settings > CI/CD > Variables
- Click Add variable
- Key:
BSCQ_TOKEN - Value:
<your-access-token> - Check Protect variable (optional)
- Click Add variable
.gitlab-ci.yml
Create .gitlab-ci.yml in repository root:
yaml
stages:
- scan
- gate
variables:
BSCQ_SERVER_URL: "https://your-bscq-instance.com"
BSCQ_PROJECT_ID: "12345"
BSCQ_REPOSITORY_ID: "67890"
DOCKER_IMAGE: "browserstack/embold:latest"
embold-scan:
stage: scan
image: docker:latest
services:
- docker:dind
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
before_script:
- export CI_COMMIT_SHA=$CI_COMMIT_SHA
- export CI_COMMIT_BRANCH=$CI_COMMIT_BRANCH
script:
- |
docker run --rm \
-v "$CI_PROJECT_DIR":/app \
-e BSCQ_SERVER_URL="$BSCQ_SERVER_URL" \
-e BSCQ_TOKEN="$BSCQ_TOKEN" \
-e BSCQ_PROJECT_ID="$BSCQ_PROJECT_ID" \
-e BSCQ_REPOSITORY_ID="$BSCQ_REPOSITORY_ID" \
-e CI_COMMIT_SHA="$CI_COMMIT_SHA" \
-e CI_BRANCH_NAME="$CI_COMMIT_BRANCH" \
"$DOCKER_IMAGE" scan
only:
- merge_requests
- main
- develop
embold-gate:
stage: gate
image: docker:latest
services:
- docker:dind
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
script:
- |
docker run --rm \
-v "$CI_PROJECT_DIR":/app \
-e BSCQ_SERVER_URL="$BSCQ_SERVER_URL" \
-e BSCQ_TOKEN="$BSCQ_TOKEN" \
-e BSCQ_PROJECT_ID="$BSCQ_PROJECT_ID" \
"$DOCKER_IMAGE" gate-check
allow_failure: false
only:
- merge_requests
- main
- developParameters
| Variable | Description | Value |
|---|---|---|
BSCQ_SERVER_URL | BrowserStack Code Quality instance URL | https://bscq.example.com |
BSCQ_TOKEN | API token (from CI/CD Variables) | $BSCQ_TOKEN |
BSCQ_PROJECT_ID | Project ID from BrowserStack Code Quality | e.g., 12345 |
BSCQ_REPOSITORY_ID | Repository ID from BrowserStack Code Quality | e.g., 67890 |
CI_COMMIT_SHA | Git commit hash (auto-provided by GitLab) | $CI_COMMIT_SHA |
CI_COMMIT_BRANCH | Branch name (auto-provided by GitLab) | $CI_COMMIT_BRANCH |
Find IDs in BrowserStack Code Quality:
- Project Settings shows Project ID
- Repository Settings shows Repository ID
Verification
View Pipeline
- Go to CI/CD > Pipelines
- Click pipeline run number
- View stages: scan and gate
Check Job Logs
Click embold-scan or embold-gate job to view output:
[INFO] Connecting to https://your-bscq-instance.com
[INFO] Scanning repository: main-app
[INFO] Analyzing 1,245 files
[INFO] Detected 23 issues
[INFO] Quality score: 3.2/5.0
[INFO] Critical issues: 0
[OK] Quality gate passedMerge Request Status
On your Merge Request:
- View Pipelines section
- Passed pipelines indicate scan succeeded and gate was met
- Failed pipelines show gate rejection with violation details
Troubleshooting
Docker Image Not Found
- Verify GitLab runner has internet connectivity
- Check Docker registry proxy settings in Admin > Runners
Token Error
- Go to Settings > CI/CD > Variables
- Verify
BSCQ_TOKENis set correctly - Regenerate token if older than 90 days
Quality Gate Failed
- View embold-gate job output for threshold violations
- Configure gates in BrowserStack Code Quality Project Settings > Quality Gates
Service Connection Timeout
- Verify BSCQ_SERVER_URL is publicly accessible from runner
- Check firewall rules if using on-premise runners
Advanced: Matrix Builds
Run scans against multiple project configurations:
yaml
embold-scan:
stage: scan
image: docker:latest
parallel:
matrix:
- BSCQ_PROJECT_ID: ["12345", "12346"]
LANGUAGE: ["python", "javascript"]
script:
- |
docker run --rm \
-v "$CI_PROJECT_DIR":/app \
-e BSCQ_SERVER_URL="$BSCQ_SERVER_URL" \
-e BSCQ_TOKEN="$BSCQ_TOKEN" \
-e BSCQ_PROJECT_ID="$BSCQ_PROJECT_ID" \
-e BSCQ_LANGUAGE="$LANGUAGE" \
"$DOCKER_IMAGE" scan