Skip to content

Implementation Summary: Git Secrets Scanning Integration

Issue

#21 - Add git-secrets to pipelines Priority: p0-critical Milestone: 1.3 - Security & Observability

Solution Implemented

We successfully integrated Gitleaks (a modern, comprehensive secrets detection tool) into the Fawkes platform at multiple layers to prevent hardcoded secrets from being committed and deployed.

Changes Made

1. Jenkins Pipeline Integration

Golden Path Pipeline (jenkins-shared-library/vars/goldenPathPipeline.groovy)

  • Added new Secrets Scan stage that runs in parallel with other security scans
  • Implemented runSecretsCheck() function that:
  • Executes Gitleaks scan on the entire repository
  • Generates JSON report for audit trail
  • Fails pipeline immediately if secrets detected
  • Provides clear error messages and remediation steps
  • Added Gitleaks container to pod template for Jenkins agents

Security Scan Library (jenkins-shared-library/vars/securityScan.groovy)

  • Added secretsScan() function for reusable secrets scanning
  • Integrated secrets scanning to run in parallel with:
  • Container scanning (Trivy)
  • Static analysis (SonarQube)
  • Dependency checking (OWASP)
  • Added failOnSecrets configuration option (default: true)

2. Documentation

Comprehensive Secrets Management Guide

File: docs/how-to/security/secrets-management.md (500+ lines)

Contents:

  • Overview of tools (Gitleaks, detect-secrets, detect-private-key)
  • How secrets detection works (pre-commit + pipeline)
  • Best practices (✅ DO / ❌ DON'T examples)
  • Configuration and customization
  • Handling detected secrets
  • Integration examples for Python, Node.js, Go, Java
  • Troubleshooting and FAQ

Updated Existing Documentation

  • docs/PRE-COMMIT.md: Enhanced security scanning section
  • docs/security.md: Added automated detection references
  • jenkins-shared-library/README.md: Added secrets scanning section
  • README.md: Updated to mention Gitleaks in security features

3. Testing

BDD Feature Tests

File: tests/bdd/features/secrets-scanning.feature

12 comprehensive scenarios covering:

  • Pre-commit hook prevention
  • Pipeline failure on detection
  • Success when no secrets present
  • False positive handling via allowlist
  • Multiple secret type detection
  • Parallel execution
  • Audit trail creation
  • Developer guidance
  • Custom rules configuration

Integration Tests

File: scripts/test-secrets-scanning-integration.sh

Validates:

  • Pre-commit configuration (4 tests)
  • Jenkins pipeline integration (4 tests)
  • Documentation completeness (4 tests)
  • BDD test coverage (3 tests)
  • Groovy syntax correctness (2 tests)

Result: 17/17 tests passing ✅

Acceptance Criteria Status

Criterion Status Implementation
git-secrets or TruffleHog integrated ✅ DONE Gitleaks integrated in pre-commit and CI/CD
Pipelines fail on detected secrets ✅ DONE Immediate failure with detailed error messages
Pre-commit hooks available ✅ DONE Configured in .pre-commit-config.yaml
Documentation for developers ✅ DONE Comprehensive 500+ line guide + updates

Architecture

Defense in Depth

┌─────────────────────────────────────────────────────┐
│ Layer 1: Developer Workstation                      │
│ - Pre-commit hooks (Gitleaks + detect-secrets)     │
│ - Immediate feedback before commit                  │
└─────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────┐
│ Layer 2: CI/CD Pipeline                             │
│ - Secrets Scan stage (Gitleaks)                    │
│ - Fails build on detection                          │
│ - Archives reports for audit                        │
└─────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────┐
│ Layer 3: Documentation & Training                   │
│ - Developer guides                                  │
│ - Best practices                                    │
│ - Example code                                      │
└─────────────────────────────────────────────────────┘

Pipeline Integration

Secrets Scan Stage
       │
       ├─ Parallel with:
       │  ├─ Container Scan (Trivy)
       │  ├─ Static Analysis (SonarQube)
       │  └─ Dependency Check (OWASP)
       │
       ├─ Uses: Gitleaks container
       │  └─ Image: zricethezav/gitleaks:latest
       │
       ├─ Scans: Entire repository
       │  └─ Config: .gitleaks.toml
       │
       └─ On Detection:
          ├─ Generate gitleaks-report.json
          ├─ Archive as Jenkins artifact
          ├─ Display error message with steps
          └─ Fail pipeline (exit code 1)

Key Features

  1. Zero-Tolerance Policy: Pipelines fail immediately on secret detection
  2. Comprehensive Coverage: Detects 100+ types of secrets (AWS, Azure, GCP, GitHub, etc.)
  3. Fast Feedback: Runs in parallel with other security scans
  4. Audit Trail: JSON reports archived for every scan
  5. Developer Friendly: Clear error messages with remediation steps
  6. Configurable: Supports allowlists for false positives
  7. Multi-Layer: Protection at both commit time and build time

Secret Types Detected

  • API Keys: AWS, Azure, GCP, GitHub, Slack, SendGrid, Stripe, etc.
  • Passwords: Database, service credentials, basic auth
  • Private Keys: SSH, SSL certificates, PGP keys, JWT secrets
  • Tokens: OAuth, session tokens, personal access tokens
  • Connection Strings: Database URLs with embedded credentials
  • Environment Variables: Hardcoded secrets in ENV declarations

Developer Experience

When Secrets Are Detected

Developers receive:

  1. Pre-commit Hook (Local):
❌ Gitleaks detected secrets:
   - AWS Access Key in config.yaml:12

Your commit has been blocked.
See: docs/how-to/security/secrets-management.md
  1. Pipeline Failure (CI/CD):
❌ SECRETS DETECTED IN CODE

Common secrets detected:
- API keys and tokens
- Passwords and credentials
- Private keys and certificates

Next steps:
1. Review gitleaks-report.json
2. Remove or encrypt sensitive data
3. Use environment variables
4. Update .gitleaks.toml for false positives

For help: docs/how-to/security/secrets-management.md

Configuration Example

@Library('fawkes-pipeline-library') _

goldenPathPipeline {
    appName = 'my-service'
    language = 'python'
    runSecurityScan = true  // Includes secrets scanning (default)
}

Files Changed

File Lines Type Description
jenkins-shared-library/vars/goldenPathPipeline.groovy +73 Code Added secrets scan stage
jenkins-shared-library/vars/securityScan.groovy +78 Code Added secretsScan function
docs/how-to/security/secrets-management.md +499 Docs Comprehensive guide
tests/bdd/features/secrets-scanning.feature +124 Test BDD scenarios
scripts/test-secrets-scanning-integration.sh +152 Test Integration tests
jenkins-shared-library/README.md +53 Docs Library documentation
docs/PRE-COMMIT.md +19 Docs Updated security section
docs/security.md +8 Docs Added detection info
README.md +2 Docs Mentioned Gitleaks

Total: 1008 lines added across 9 files

Testing Results

All tests pass successfully:

✓ 4 Pre-commit configuration tests
✓ 4 Jenkins pipeline integration tests
✓ 4 Documentation completeness tests
✓ 3 BDD test coverage tests
✓ 2 Groovy syntax validation tests
─────────────────────────────────
✓ 17/17 tests PASSED

Next Steps for Deployment

  1. Merge this PR to integrate changes
  2. Update Jenkins shared library reference in Jenkins Configuration as Code
  3. Test with a sample project:
  4. Add test secret to a file
  5. Run pipeline
  6. Verify it fails with proper error message
  7. Roll out to teams:
  8. Announce via Mattermost
  9. Link to documentation
  10. Provide examples

Benefits

  • Security: Prevents hardcoded secrets from reaching production
  • Compliance: Provides audit trail of all secret scans
  • Developer Experience: Fast feedback, clear error messages
  • Platform Maturity: Aligns with DORA best practices
  • Zero Cost: Uses open-source tools (Gitleaks)

References


Implementation Date: December 15, 2025 Implemented By: Copilot SWE Agent Status: ✅ COMPLETE - Ready for Review