Saltearse al contenido
ES EN

Jenkins

Hay dos formas de integrar Gerion en Jenkins. Elige la que mejor encaje con tu setup:

  • Opción A — Declarative Pipeline: copia el Jenkinsfile directamente 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:

IDTipoDescripción
gerion-api-urlSecret textURL del Gerion API Gateway
gerion-api-keySecret textAPI 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:

CampoValor
Nombregerion
Versión por defectomain
Retrieval methodModern SCM
SCMGit
Repository URLhttps://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ámetroDefectoDescripció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
timeout180Timeout 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
archiveArtifactstrueArchiva el fichero de salida si se configuró outputFile
// Ejemplo con todos los parámetros
gerionScan(
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 withCredentials en el JSL garantiza que la API key aparece enmascarada en los logs.