Overview
This guide demonstrates how to integrate OpenText Application Security (Fortify Software Security Center) Application Security Testing (AST)
into your Azure DevOps pipelines using a script-based approach, leveraging the @fortify/setup npm package
to bootstrap fcli. Once bootstrapped, you can execute the fcli ci action to run scans,
providing a unified yet customizable experience across your AST scan workflows on Azure DevOps and other
CI systems. In the future, we may provide native fcli-based Azure DevOps tasks for an even easier integration.
Quick Start Example
Minimal configuration for running OpenText Fortify AST scans in Azure DevOps.
trigger:
branches:
include:
- main
pr:
branches:
include:
- main
variables:
- group: fortify # Variable group containing SSC_URL, SSC_TOKEN, SC_SAST_TOKEN
jobs:
- job: fortify
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self # Check out source code
- task: # ... setup build tool(s) # Set up build tool(s) required to build your project
- task: Bash@3 # Or PowerShell@2, using the PowerShell variant of the script below
displayName: 'Run Fortify AST scan'
inputs:
targetType: 'inline'
# Bash variant
script: |
# Bootstrap fcli
npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env init --tools=fcli:bootstrapped
# Add fcli to PATH and set related environment variables for subsequent steps in current script
source <(npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env shell)
# Alternatively, to make fcli ALSO available for subsequent tasks:
# source <(npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env ado --output-as=shell)
# Alternatively, to make fcli ONLY available for subsequent tasks:
# npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env ado
"${FCLI_CMD:-fcli}" action run ci # Or any other fcli-based custom workflow
# PowerShell variant
# script: |
# # Bootstrap fcli
# npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env init --tools=fcli:bootstrapped
# # Add fcli to PATH and set related environment variables for subsequent steps in current script
# npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env pwsh | Out-String | Invoke-Expression
# # Alternatively, to make fcli ALSO available for subsequent tasks:
# # npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env ado --output-as=pwsh | Out-String | Invoke-Expression
# # Alternatively, to make fcli ONLY available for subsequent tasks:
# # npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env ado
# & "${env:FCLI_CMD:-fcli}" action run ci # Or any other fcli-based custom workflow
env:
SSC_URL: $(SSC_URL)
SSC_TOKEN: $(SSC_TOKEN)
SC_SAST_TOKEN: $(SC_SAST_TOKEN)
# SSC_APPVERSION: MyApp:main # Optional: defaults to repo:branch
FORTIFY_SETUP_VERSION: v2.1 # Or v2 for latest features, v2.1.2 for stability
Platform Notes
To keep scripts portable across Linux/macOS and Windows agents, use the command path exported by
@fortify/setup:
-
Bash:
${FCLI_CMD:-fcli} action run ci -
PowerShell:
& $env:FCLI_CMD action run ci
This is particularly important for Bash tasks on Windows agents, where invoking fcli without the
full executable path may fail.
Tips & Recommendations
Centralized Configuration Management
For enterprise environments with multiple repositories, consider creating pipeline templates to wrap the Fortify integration. This approach provides:
-
Version stability: Pin specific
@fortify/setupand fcli versions (e.g.,FCLI_BOOTSTRAP_VERSION: v3.15.0) across all pipelines -
Consistent configuration: Centrally manage common settings like tool versions and scan parameters
-
Controlled upgrades: Test new versions centrally before rolling out to all repositories
Example template structure:
# fortify-scan-template.yml (in your organization's shared template repository)
parameters:
- name: sscAppVersion
displayName: 'Optional SSC application version, defaults to <repo>:<branch>'
type: string
default: ''
steps:
- task: Bash@3
displayName: 'Run Fortify AST scan'
inputs:
targetType: 'inline'
script: |
npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env init --tools=fcli:bootstrapped
source <(npx @fortify/setup@$(FORTIFY_SETUP_VERSION) env shell)
"${FCLI_CMD:-fcli}" action run ci
env:
SSC_URL: $(SSC_URL)
SSC_TOKEN: $(SSC_TOKEN)
SC_SAST_TOKEN: $(SC_SAST_TOKEN)
SSC_APPVERSION: $
FCLI_BOOTSTRAP_VERSION: v3.15.0 # Centrally managed version
FORTIFY_SETUP_VERSION: v2.1.2 # Centrally managed version
Air-Gapped Environments
For air-gapped or restricted network environments, host custom tool definitions and tool bundles in an internal SCM repository or artifact registry. Configure the integration to use these internal resources:
-
Set
TOOL_DEFINITIONSto point to your internally hosted tool definitions file -
Set
FCLI_BOOTSTRAP_URLto download fcli from your internal mirror
This ensures all required tools are accessible without external internet access.
Configuration
Configuration is accomplished through environment variables set in your Azure DevOps pipeline YAML file. Secrets and variables should be configured in Azure DevOps Library or pipeline variables. The following sections document all available configuration options organized by their purpose.
Setup & Bootstrap
The script-based Azure DevOps integration leverages the @fortify/setup npm package to bootstrap fcli
and supporting tools like ScanCentral Client. The environment variables in this section are provided by
@fortify/setup v2.1.x (configured via FORTIFY_SETUP_VERSION=v2.1.x).
If you configure a different @fortify/setup version, please refer to the
@fortify/setup documentation for
that version’s supported variables.
|
Note
|
@fortify/setup is automatically configured through the FCLI_BOOTSTRAP_* environment variables documented in this section. For simplicity and to avoid pipelines from interfering with each other, it is recommended to not use the @fortify/setup bootstrap-config command in CI pipelines.
|
|
Note
|
This integration requires @fortify/setup v2.1.2 or later, and fcli v3.15.0 or later.
|
|
Note
|
Environment variables listed in the subsequent sections are for fcli 3.15.0; if your bootstrap settings install another fcli version, please refer to to the fcli ci action documentation for that version. |
Environment Variable |
Description |
FCLI_BOOTSTRAP_VERSION |
By default, the latest fcli v3.x.y release is used for running the fcli-provided ci workflow, allowing you to always benefit from the latest features and fixes. If you prefer stability over automatic updates, you can pin to a specific minor or patch release like v3.15 or v3.15.0 by setting this environment variable to the desired version. Likewise, you can set this variable to an fcli pre-release tag like |
FCLI_BOOTSTRAP_PATH |
Path to a pre-installed fcli executable. When set, fcli bootstrapping will use this binary instead of downloading fcli. |
FCLI_BOOTSTRAP_URL |
By default, fcli is downloaded from the official GitHub releases page. This environment variable allows you to specify a custom URL, for example pointing to an internal mirror in air-gapped environments. In those cases, you’ll likely also want to set |
FCLI_BOOTSTRAP_RSA_SHA256_URL |
Custom URL for the fcli RSA SHA256 signature file. Defaults to |
FCLI_BOOTSTRAP_VERIFY_SIGNATURE |
Set to |
TOOL_DEFINITIONS |
Supporting tools like ScanCentral Client or Debricked CLI are by default downloaded from the URLs defined in the default Fortify tool definitions. For airgapped environments, point this environment variable to an internally hosted custom tool definitions zip file to download these tools from an internal mirror. |
PREINSTALLED |
Set to |
Authentication & Connection
Configure credentials and connection details for OpenText Application Security (Fortify Software Security Center).
Environment Variable |
Description |
SSC_URL |
OpenText Application Security (Fortify Software Security Center) URL, for example |
SSC_TOKEN |
Required when authenticating with an SSC token (recommended). Most actions should work fine with a CIToken. |
SSC_USER |
Required when authenticating with SSC user credentials. |
SC_SAST_TOKEN |
ScanCentral SAST Client Authentication Token for authenticating with ScanCentral SAST Controller. This environment variable is required when running a ScanCentral SAST scan. |
SSC_LOGIN_EXTRA_OPTS |
Extra SSC login options, for example for disabling SSL checks or changing connection time-outs; see |
Application Version Management
Configure OpenText Application Security (Fortify Software Security Center) application version settings, including automatic creation of application versions if they don’t exist.
Environment Variable |
Description |
SSC_APPVERSION |
Fortify SSC application version to use with this action. This should be specified as |
DO_SETUP |
If |
Package Configuration
Configure source code packaging behavior for SAST scans. Control whether to use custom packaging actions, specify pre-built packages, or customize ScanCentral Client usage.
Environment Variable |
Description |
PACKAGE_ACTION |
By default, when running a SAST scan, the fcli package action is used to (optionally) package the source code to be scanned; see next entry for information on how to configure the default package action. If the standard fcli package action doesn’t meet your needs, for example if you want to perform a local translation using Fortify Static Code Analyzer, you can use |
USE_PACKAGE |
These environment variables define packaging behavior. If |
Scan Execution
Configure SAST and Debricked scan execution and waiting behavior for OpenText Application Security (Fortify Software Security Center).
Environment Variable |
Description |
DO_SAST_SCAN |
The fcli |
DO_DEBRICKED_SCAN |
The fcli |
DO_WAIT |
By default, the fcli |
Post-Scan Actions
Configure post-scan tasks including Aviator auditing, application version summaries, policy checks, pull request comments, and vulnerability data exports for OpenText Application Security (Fortify Software Security Center). NOTE: Availability and behavior of post-scan tasks may vary across CI/CD systems and fcli versions.
Environment Variable |
Description |
AVIATOR_URL |
Aviator URL and JWT token to use for Aviator operations (see below). The |
DO_AVIATOR_AUDIT |
If |
DO_APPVERSION_SUMMARY |
If |
DO_CHECK_POLICY |
If |
DO_PR_COMMENT |
(PREVIEW) If |
DO_SAST_EXPORT |
If |
DO_DEBRICKED_EXPORT |
If |