Перейти к содержанию

Интеграция с CI/CD

Gixy легко интегрируется с CI/CD конвейерами для обнаружения ошибок конфигурации безопасности NGINX до того, как они попадут в продакшен.

Вывод в формате Checkstyle XML

Для интеграции с CI/CD используйте опцию --format checkstyle для генерации машиночитаемого XML-вывода:

gixy --format checkstyle /etc/nginx/nginx.conf > gixy-report.xml

Формат Checkstyle XML — это широко поддерживаемый стандарт для инструментов статического анализа, нативно поддерживаемый:

  • Jenkins (плагин Warnings Next Generation)
  • GitLab CI (отчёты Code Quality)
  • GitHub Actions (через reviewdog, super-linter)
  • Bitbucket Pipelines (Code Insights)
  • SonarQube (импорт внешних проблем)
  • Многими IDE (IntelliJ, Eclipse, VS Code)

Пример вывода

<?xml version="1.0" encoding="UTF-8"?>
<checkstyle version="8.0">
  <file name="/etc/nginx/nginx.conf">
    <error line="10" column="1" severity="error"
           message="[ssrf] SSRF vulnerability: reason"
           source="gixy.ssrf"/>
  </file>
</checkstyle>

GitHub Actions

name: NGINX Security Scan

on: [push, pull_request]

jobs:
  gixy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Gixy
        run: pip install gixy-ng

      - name: Run Gixy
        run: gixy --format checkstyle nginx/*.conf > gixy-report.xml
        continue-on-error: true

      - name: Upload Report
        uses: actions/upload-artifact@v4
        with:
          name: gixy-report
          path: gixy-report.xml

С использованием reviewdog

Для встроенных комментариев в PR используйте reviewdog:

- name: Run Gixy with reviewdog
  uses: reviewdog/action-setup@v1

- name: Gixy
  env:
    REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: |
    gixy --format checkstyle nginx/*.conf | \
      reviewdog -f=checkstyle -reporter=github-pr-review

GitLab CI

gixy:
  stage: test
  image: python:3.11-slim
  before_script:
    - pip install gixy-ng
  script:
    - gixy --format checkstyle nginx/*.conf > gl-code-quality-report.xml
  artifacts:
    reports:
      codequality: gl-code-quality-report.xml
    when: always

Jenkins

С использованием плагина Warnings Next Generation:

pipeline {
    agent any
    stages {
        stage('NGINX Security Scan') {
            steps {
                sh 'pip install gixy-ng'
                sh 'gixy --format checkstyle /etc/nginx/*.conf > gixy-report.xml || true'
            }
            post {
                always {
                    recordIssues(
                        tools: [checkStyle(pattern: 'gixy-report.xml')]
                    )
                }
            }
        }
    }
}

Docker

Для контейнеризованных конвейеров:

docker run --rm -v /path/to/nginx:/etc/nginx:ro \
  getpagespeed/gixy --format checkstyle /etc/nginx/nginx.conf

Коды выхода

Gixy использует коды выхода для указания результатов сканирования:

Код выхода Значение
0 Проблем не найдено
1 Найдены проблемы
2 Ошибка конфигурации

Используйте их в вашем CI/CD конвейере для прерывания сборки при обнаружении проблем безопасности:

gixy /etc/nginx/nginx.conf || exit 1

Pre-commit хук

Добавьте Gixy в вашу конфигурацию pre-commit:

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/dvershinin/gixy
    rev: v0.2.24
    hooks:
      - id: gixy
        files: \.conf$

Соответствие уровней серьёзности

Уровни серьёзности Gixy соответствуют уровням Checkstyle следующим образом:

Серьёзность Gixy Серьёзность Checkstyle
HIGH error
MEDIUM warning
LOW info
UNSPECIFIED info

Настройте ваш CI/CD инструмент для прерывания сборки при определённых уровнях серьёзности по необходимости.

Укрепляйте NGINX с поддерживаемыми RPM

Используйте NGINX Extras от GetPageSpeed для постоянно обновляемого NGINX и модулей на RHEL/CentOS/Alma/Rocky. Подробнее.