Jenkins
Hay dos formas de integrar Gerion en Jenkins. Elige la que mejor encaje con tu setup:
- Opción A — Declarative Pipeline: copia el
Jenkinsfiledirectamente en tu repositorio. - Opción B — Shared Library (JSL): registra la librería en Jenkins y usa
gerionScan()en cualquier pipeline con una línea.
Configuración previa
Añade las siguientes credenciales en Manage Jenkins → Credentials:
| ID | Tipo | Descripción |
|---|---|---|
gerion-api-url | Secret text | URL del Gerion API Gateway |
gerion-api-key | Secret text | API key M2M de tu organización |
El agente Jenkins donde se ejecute el pipeline debe tener Docker disponible.
Opción A — Declarative Pipeline
Copia este Jenkinsfile en la raíz de tu repositorio:
pipeline { agent { label 'docker' }
options { timeout(time: 30, unit: 'MINUTES') buildDiscarder(logRotator(numToKeepStr: '30')) disableConcurrentBuilds() }
triggers { cron('0 2 * * *') // Ejecución nocturna a las 02:00 }
environment { GERION_IMAGE = 'ghcr.io/gerion-appsec/gerion-cli:latest' GERION_API_URL = credentials('gerion-api-url') GERION_API_KEY = credentials('gerion-api-key') }
stages { stage('Gerion — Secrets') { steps { sh ''' docker run --rm \ -v "${WORKSPACE}:/code" \ -e GERION_API_URL -e GERION_API_KEY \ -e JENKINS_URL -e GIT_URL -e GIT_BRANCH \ -e BUILD_NUMBER -e GIT_COMMIT -e GIT_COMMITTER_NAME \ "${GERION_IMAGE}" gerion secrets-scan /code ''' } } stage('Gerion — SCA') { steps { sh ''' docker run --rm \ -v "${WORKSPACE}:/code" \ -e GERION_API_URL -e GERION_API_KEY \ -e JENKINS_URL -e GIT_URL -e GIT_BRANCH \ -e BUILD_NUMBER -e GIT_COMMIT -e GIT_COMMITTER_NAME \ "${GERION_IMAGE}" gerion sca-scan /code ''' } } stage('Gerion — IaC') { steps { sh ''' docker run --rm \ -v "${WORKSPACE}:/code" \ -e GERION_API_URL -e GERION_API_KEY \ -e JENKINS_URL -e GIT_URL -e GIT_BRANCH \ -e BUILD_NUMBER -e GIT_COMMIT -e GIT_COMMITTER_NAME \ "${GERION_IMAGE}" gerion iac-scan /code ''' } } stage('Gerion — SAST') { steps { sh ''' docker run --rm \ -v "${WORKSPACE}:/code" \ -e GERION_API_URL -e GERION_API_KEY \ -e JENKINS_URL -e GIT_URL -e GIT_BRANCH \ -e BUILD_NUMBER -e GIT_COMMIT -e GIT_COMMITTER_NAME \ "${GERION_IMAGE}" gerion sast-scan /code ''' } } }
post { always { withCredentials([ string(credentialsId: 'gerion-api-url', variable: 'GERION_API_URL'), string(credentialsId: 'gerion-api-key', variable: 'GERION_API_KEY') ]) { sh ''' docker run --rm \ -v "${WORKSPACE}:/code" \ -e GERION_API_URL -e GERION_API_KEY \ -e JENKINS_URL -e GIT_URL -e GIT_BRANCH -e BUILD_NUMBER -e GIT_COMMIT \ "${GERION_IMAGE}" \ gerion report \ --format pdf \ --output-file /code/gerion-report.pdf \ --severity HIGH --active-only || true ''' } archiveArtifacts(artifacts: 'gerion-report.pdf', allowEmptyArchive: true) } }}Opción B — Shared Library (JSL)
La Shared Library te permite llamar gerionScan() desde cualquier Jenkinsfile de tu organización sin copiar el pipeline completo.
1. Registrar la librería
Ve a Manage Jenkins → System → Global Pipeline Libraries y añade:
| Campo | Valor |
|---|---|
| Nombre | gerion |
| Versión por defecto | main |
| Retrieval method | Modern SCM |
| SCM | Git |
| Repository URL | https://github.com/gerion-appsec/gerion-jenkins-library |
2. Usar en un Jenkinsfile
@Library('gerion') _
pipeline { agent { label 'docker' } stages { stage('Security Scan') { steps { gerionScan() } } }}3. Parámetros de gerionScan()
| Parámetro | Defecto | Descripción |
|---|---|---|
scanType | 'all' | all | secrets | sca | iac | sast |
codePath | '.' | Ruta relativa al workspace |
outputFormat | '' | json | markdown | sarif | vacío |
outputFile | '' | Fichero de salida relativo al workspace |
logLevel | 'info' | debug | info | warning | error |
timeout | 180 | Timeout por escáner en segundos |
apiUrlCredId | 'gerion-api-url' | ID de la credencial Jenkins para la URL |
apiKeyCredId | 'gerion-api-key' | ID de la credencial Jenkins para la API key |
archiveArtifacts | true | Archiva el fichero de salida si se configuró outputFile |
// Ejemplo con todos los parámetrosgerionScan( scanType: 'sast', outputFormat: 'sarif', outputFile: 'gerion-sast.sarif', logLevel: 'debug', timeout: 300, archiveArtifacts: true)Notas
- Gerion CLI detecta automáticamente las variables de Jenkins (
JENKINS_URL,GIT_URL,GIT_BRANCH,BUILD_NUMBER,GIT_COMMIT,GIT_COMMITTER_NAME). - El bloque
withCredentialsen el JSL garantiza que la API key aparece enmascarada en los logs.