Semgrep provides a sample configuration for Azure-hosted runners. If you use self-hosted Ubuntu Linux runners, you have significantly more control over their configuration, but as a result, they require additional preparation and configuration to run Semgrep. This guide adds two approaches to configuring self-hosted runners that use Ubuntu (the default self-hosted option for Azure DevOps Linux runners): BothDocumentation Index
Fetch the complete documentation index at: https://docs.semgrep.dev/llms.txt
Use this file to discover all available pages before exploring further.
pipx and uv install Semgrep into an isolated environment, which avoids issues with system-managed Python vs user-installed Python.
Using pipx
pipx installs standalone Python applications into isolated environments. This is the recommended approach for installing Semgrep on a self-hosted runner.
Prepare your runner
Access the runner and execute the following commands:Ensure the Azure DevOps agent is set up and running.
Create your configuration
Follow the steps provided in the sample configuration for Azure-hosted runners.
Add the following snippet to the
azure-pipelines.yml for the repository.CUSTOMIZING THE CONFIGURATION
- If your self-hosted runner agent pool has a different name, update the
namekey underpoolto match the desired agent pool. - If your default branch is not called
master, update the references tomasterto match the name of your default branch.
Set environment variables in Azure Pipelines
Semgrep minimally requires the variable SEMGREP_APP_TOKEN in order to report results to the platform, and other variables may be helpful as well. To set these variables in Azure Pipelines:Set SEMGREP_APP_TOKEN in the variable group, following the steps for secret variables. The variable is mapped into the env in the provided config.
Optional: Add the following environment variables to the group if you aren’t seeing hyperlinks to the code that generated a finding, or if you are not receiving PR or MR comments. Review the use of these variables at Environment variables for creating hyperlinks in Semgrep AppSec Platform.These variables are not sensitive and do not need to be secret variables.
- SEMGREP_REPO_NAME
- SEMGREP_REPO_URL
- SEMGREP_BRANCH
- SEMGREP_COMMIT
- SEMGREP_JOB_URL
Set variables for diff-aware scanning. The provided config sets SEMGREP_PR_ID to the system variable System.PullRequest.PullRequestId and SEMGREP_BASELINE_REF to origin/master within the script section of the config. The value of SEMGREP_BASELINE_REF is typically your trunk or default branch, so if you use a different branch than master, update the name accordingly. as main or master.
- If you prefer not to implement diff-aware scanning, you can skip setting these variables and remove the elif section of the script step.
Using uv
Prepare your runner
uv is a fast Python package and project manager. Its uv tool install command installs standalone Python applications into isolated environments, similar to pipx.
Access the runner and install uv following Astral’s installation instructions, for example:
Create your configuration
Add the following snippet to theazure-pipelines.yml for the repository.
CUSTOMIZING THE CONFIGURATION
- If your self-hosted runner agent pool has a different name, update the
namekey underpoolto match the desired agent pool. - If your default branch is not called
master, update the references tomasterto match the name of your default branch.
Set environment variables in Azure Pipelines
Semgrep minimally requires the variable SEMGREP_APP_TOKEN in order to report results to the platform, and other variables may be helpful as well. To set these variables in Azure Pipelines:Set SEMGREP_APP_TOKEN in the variable group, following the steps for secret variables. The variable is mapped into the env in the provided config.
Optional: Add the following environment variables to the group if you aren’t seeing hyperlinks to the code that generated a finding, or if you are not receiving PR or MR comments. Review the use of these variables at Environment variables for creating hyperlinks in Semgrep AppSec Platform.These variables are not sensitive and do not need to be secret variables.
- SEMGREP_REPO_NAME
- SEMGREP_REPO_URL
- SEMGREP_BRANCH
- SEMGREP_COMMIT
- SEMGREP_JOB_URL
Set variables for diff-aware scanning. The provided config sets SEMGREP_PR_ID to the system variable System.PullRequest.PullRequestId and SEMGREP_BASELINE_REF to origin/master within the script section of the config. The value of SEMGREP_BASELINE_REF is typically your trunk or default branch, so if you use a different branch than master, update the name accordingly. as main or master.
- If you prefer not to implement diff-aware scanning, you can skip setting these variables and remove the elif section of the script step.