> For the complete documentation index, see [llms.txt](https://docs.sealsecurity.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sealsecurity.io/setup-apps-os/cli-in-cicd/jenkins.md).

# Integrating with Jenkins

Jenkins integration is a shell pattern: install the CLI, run `seal fix`.

## Before you start

* A [token](/getting-started/tokens.md) stored as a **Secret text** credential (for example, with ID `seal-token`).
* A [Project ID](/getting-started/creating-a-seal-project.md#project-id-and-project-name) for the activity.

## The stage

```groovy
stage('Seal CLI') {
  environment {
    SEAL_TOKEN = credentials('seal-token')
    SEAL_PROJECT = 'my-project-id'
  }
  steps {
    sh '''
      curl -fsSL https://github.com/seal-community/cli/releases/download/latest/seal-linux-amd64-latest.zip -o seal.zip
      unzip seal.zip && chmod +x seal
      ./seal fix --mode all
    '''
  }
}
```

Replace `--mode all` with `--mode remote` or `--mode local` per your [deployment method](/setup-apps-os/choosing-deployment-method.md). The stage should run after dependencies are installed and before they are packaged.

The `credentials('seal-token')` binding sets `SEAL_TOKEN` in the stage's environment. If your pipeline splits the install and the run into separate stages, both need the binding.

## Related

* [Installing the Seal CLI](/setup-apps-os/cli-in-cicd/installing-the-cli.md).
* [The CLI fix mode](/setup-apps-os/cli-in-cicd/cli-fix-mode.md).
