CodeGuard

Jenkins

CodeGuard als Stage in einem Jenkins-Pipeline.

Jenkins

Jenkinsfile (declarative pipeline):

pipeline {
    agent any

    environment {
        CODEGUARD_API_KEY = credentials('codeguard-api-key')
        CODEGUARD_VERSION = '1.4.0'
    }

    stages {
        stage('Install CodeGuard') {
            steps {
                sh '''
                    curl -sSL -H "Authorization: Bearer $CODEGUARD_API_KEY" \\
                        -o codeguard.zip \\
                        https://codeguard.bochmann-software.com/api/v1/cli/$CODEGUARD_VERSION/linux-x64
                    unzip -q codeguard.zip -d codeguard-bin
                    chmod +x codeguard-bin/codeguard
                '''
            }
        }

        stage('CodeGuard analyze') {
            steps {
                sh './codeguard-bin/codeguard analyze . --fail-on error --output sarif --output-file codeguard.sarif'
            }
            post {
                always {
                    archiveArtifacts artifacts: 'codeguard.sarif', allowEmptyArchive: true
                }
            }
        }
    }
}

API-Key beschaffen

  1. Im Portal unter API Keys einen Key erzeugen.
  2. In Jenkins: Manage Jenkins → Credentials → Add credentials, "Secret text" mit ID codeguard-api-key.
  3. Im Pipeline mit credentials('codeguard-api-key') referenzieren wie oben.

Warnings Next Generation Plugin

Wenn ihr das Warnings NG Plugin installiert habt, könnt ihr SARIF direkt anzeigen lassen:

post {
    always {
        recordIssues(
            tools: [sarif(pattern: 'codeguard.sarif', name: 'CodeGuard')]
        )
    }
}

Damit landen Findings im Build-Overview, im Trend-Chart und auf den PR-Seiten (wenn ihr ein Bitbucket-/GitHub-Plugin habt).

Caching

Mit dem Job Cacher Plugin:

options {
    cache(maxCacheSize: 200, caches: [
        [
            $class: 'ArbitraryFileCache',
            path: '~/.cache/codeguard'
        ]
    ])
}

Self-Hosted-Agents

Standard für Jenkins. Der Agent braucht einmal Netzzugriff auf codeguard.bochmann-software.com oder ihr legt das Binary direkt auf den Agent.

Multi-Branch-Pipelines

Funktioniert ohne Anpassungen. Jeder Branch baut sich seine Findings gegen den eigenen Stand der .codeguard/-Konfiguration.