
Executa o Trivy como uma ação do GitHub para escanear sua imagem de contêiner Docker em busca de vulnerabilidades.
GitHub Action para Trivy
[![GitHub Release][release-img]][release] [![GitHub Marketplace][marketplace-img]][marketplace] [![License][license-img]][license]

name: build on: push: branches: - main pull_request: jobs: build: name: Build runs-on: ubuntu-24.04 steps: - name: Checkout code uses: actions/checkout@v4 - name: Build an image from Dockerfile run: docker build -t docker.io/my-organization/my-app:${{ github.sha }} . - name: Run Trivy vulnerability scanner uses: aquasecurity/[email protected] with: image-ref: 'docker.io/my-organization/my-app:${{ github.sha }}' format: 'table' exit-code: '1' ignore-unfixed: true vuln-type: 'os,library' severity: 'CRITICAL,HIGH'
### Pipeline de CI de Varredura (com Config do Trivy)```yaml
name: build
on:
push:
branches:
- main
pull_request:
jobs:
build:
name: Build
runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner in fs mode
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
trivy-config: trivy.yaml
Neste caso, trivy.yaml é uma configuração YAML que é versionada como parte do repositório. Informações detalhadas estão disponíveis no site do Trivy, mas um exemplo é o seguinte:```yaml
format: json
exit-code: 1
severity: CRITICAL
secret:
config: config/trivy/secret.yaml
É possível definir todas as opções no arquivo `trivy.yaml`. Especificar opções individuais por meio da ação é mantido para fins de compatibilidade retroativa. A definição dos seguintes itens é necessária, pois eles não podem ser definidos com o arquivo de configuração:
- `scan-ref`: Se usar varreduras `fs, repo`.
- `image-ref`: Se usar varredura `image`.
- `scan-type`: Para definir o tipo de varredura, ex.: `image`, `fs`, `repo`, etc.
#### Ordem de preferência para opções
O Trivy usa [Viper](https://github.com/spf13/viper), que tem uma ordem de precedência definida para opções. A ordem é a seguinte:
- Flag do GitHub Action
- Variável de ambiente
- Arquivo de configuração
- Padrão
### Cache
A ação tem uma funcionalidade integrada para armazenar em cache e restaurar [o banco de dados de vulnerabilidades](https://github.com/aquasecurity/trivy-db), [o banco de dados Java](https://github.com/aquasecurity/trivy-java-db) e [o pacote de verificações](https://github.com/aquasecurity/trivy-checks) se forem baixados durante a varredura.
O cache é armazenado no diretório `$GITHUB_WORKSPACE/.cache/trivy` por padrão.
O cache é restaurado antes do início da varredura e salvo após o término da varredura.
Ele usa [actions/cache](https://github.com/actions/cache) internamente, mas requer menos configurações.
A entrada de cache é opcional, e o armazenamento em cache é ativado por padrão.
#### Desativando o cache
Se quiser desativar o cache, defina a entrada `cache` como `false`, mas recomendamos mantê-lo ativado para evitar problemas de limitação de taxa.```yaml
- name: Run Trivy scanner without cache
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
cache: 'false'
Observe que existem restrições de acesso ao cache entre branches no GitHub Actions.
Por padrão, um workflow pode acessar e restaurar um cache criado no branch atual ou no branch padrão (geralmente main ou master).
Se você precisar compartilhar caches entre branches, talvez seja necessário criar um cache no branch padrão e restaurá-lo no branch atual.
Para otimizar seu workflow, você pode configurar um job cron para atualizar regularmente o cache no branch padrão. Isso permite que as verificações subsequentes usem o banco de dados em cache sem baixá-lo novamente.```yaml
name: Update Trivy Cache
on: schedule: - cron: '0 0 * * *' # Run daily at midnight UTC workflow_dispatch: # Allow manual triggering
jobs: update-trivy-db: runs-on: ubuntu-latest steps: - name: Setup oras uses: oras-project/setup-oras@v1
- name: Get current date
id: date
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Download and extract the vulnerability DB
run: |
mkdir -p $GITHUB_WORKSPACE/.cache/trivy/db
oras pull ghcr.io/aquasecurity/trivy-db:2
tar -xzf db.tar.gz -C $GITHUB_WORKSPACE/.cache/trivy/db
rm db.tar.gz
- name: Download and extract the Java DB
run: |
mkdir -p $GITHUB_WORKSPACE/.cache/trivy/java-db
oras pull ghcr.io/aquasecurity/trivy-java-db:1
tar -xzf javadb.tar.gz -C $GITHUB_WORKSPACE/.cache/trivy/java-db
rm javadb.tar.gz
- name: Cache DBs
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/.cache/trivy
key: cache-trivy-${{ steps.date.outputs.date }}
Ao executar uma varredura, defina as variáveis de ambiente `TRIVY_SKIP_DB_UPDATE` e `TRIVY_SKIP_JAVA_DB_UPDATE` para ignorar o processo de download.```yaml
- name: Run Trivy scanner without downloading DBs
uses: aquasecurity/[email protected]
with:
scan-type: 'image'
scan-ref: 'myimage'
env:
TRIVY_SKIP_DB_UPDATE: true
TRIVY_SKIP_JAVA_DB_UPDATE: true
Por padrão, a ação chama aquasecurity/setup-trivy como primeira etapa
que instala a versão do trivy especificada pela entrada version. Se você já instalou o trivy por outros
meios, por exemplo, chamando aquasecurity/setup-trivy diretamente, ou se está invocando esta ação várias vezes, você pode usar a
entrada skip-setup-trivy para desabilitar esta etapa.
name: build on: push: branches: - main pull_request: jobs: build: name: Build runs-on: ubuntu-24.04 steps: - name: Checkout code uses: actions/checkout@v4