Ir al contenido

Jenkins

AppArch no tiene plugin de Jenkins ni plantilla específica para Jenkins. En Jenkins se ejecuta el contenedor del collector con docker run, la misma imagen que en cualquier otra CI. La conexión Git en sí es una credencial normal (GitHub, GitLab, Bitbucket o Azure DevOps).

En Manage Jenkins → Credentials crea:

  • Un Secret text APPARCH_TOKEN: el token de runner del proyecto (consulta Registrar un proyecto).
  • Un Username with password apparch-hub: usuario = id de la instalación, contraseña = clave de la instalación. Es lo que descarga la imagen de hub.apparch.io; el token de proyecto no es una credencial del registro.

El agente necesita Docker.

pipeline {
agent any
environment {
APPARCH_TOKEN = credentials('APPARCH_TOKEN')
}
stages {
stage('AppArch') {
steps {
withCredentials([usernamePassword(credentialsId: 'apparch-hub', usernameVariable: 'HUB_USER', passwordVariable: 'HUB_KEY')]) {
sh 'echo "$HUB_KEY" | docker login hub.apparch.io -u "$HUB_USER" --password-stdin'
}
sh '''
PR_ARGS=""
if [ -n "$CHANGE_ID" ]; then
PR_ARGS="-e APPARCH_Collector__Provider__Type=gitlab \
-e APPARCH_Collector__Provider__ProjectId=group/project \
-e APPARCH_Collector__Provider__PullRequestId=$CHANGE_ID"
fi
docker run --rm -v "$WORKSPACE:/workspace:ro" \
-e APPARCH_Collector__Token="$APPARCH_TOKEN" \
-e APPARCH_Collector__ApiUrl="https://api.yourdomain.com" \
$PR_ARGS \
hub.apparch.io/collectors/dotnet:latest /workspace
'''
}
}
}
}

Jenkins no expone las variables de merge request del proveedor; el runner no puede detectar una PR por sí solo. El contexto se pasa de forma explícita:

VariableValor
APPARCH_Collector__Provider__Typegitlab, github, bitbucket o azuredevops
APPARCH_Collector__Provider__ProjectIdEl repositorio en el proveedor, p. ej. group/project
APPARCH_Collector__Provider__PullRequestIdEl número de PR / MR ($CHANGE_ID en un pipeline multibranch)

Opcionales: APPARCH_Collector__Provider__BaseUrl, __WebUrl, __BaseSha, __StartSha, __HeadSha, __Title, __Author.

  • Con estas variables, la ejecución es una revisión de PR (ArchPilot más un registro de ArchScan).
  • Sin ellas, es un análisis completo (ArchScan y ArchSecurity).

Añade --fail-on <nivel> después de /workspace (critical, error, warning o info), o define APPARCH_FAIL_ON. Si hay un hallazgo de ese nivel o superior, el collector termina con el código 4 después de enviar todos los resultados y Jenkins marca la etapa como fallida. Si no se define ninguno de los dos, se aplica el nivel fail-on configurado en el panel para el espacio de trabajo; si tampoco hay uno allí, los hallazgos nunca hacen fallar el paso.

Para otros sistemas de CI: Añadir el runner a la CI.