Hướng dẫn tích hợp Snyk trong CI/CD: Jenkins, GitHub Actions và các nền tảng phổ biến

06 tháng 4, 2026·8 phút đọc

Việc tích hợp Snyk vào pipeline CI/CD giúp tự động phát hiện lỗ hổng bảo mật mọi lúc mọi nơi trong quá trình phát triển phần mềm. Bài viết hướng dẫn chi tiết cách setup Snyk trên các nền tảng CI/CD phổ biến như GitHub Actions, Jenkins, GitLab CI và Azure Pipelines, đồng thời giải thích cách sử dụng các lệnh snyk test và snyk monitor, cũng như xử lý sự cố thường gặp.

Hướng dẫn tích hợp Snyk trong CI/CD: Jenkins, GitHub Actions và các nền tảng phổ biến

Hướng dẫn tích hợp Snyk trong CI/CD: Jenkins, GitHub Actions và các nền tảng phổ biến

Tích hợp công cụ Snyk vào pipeline CI/CD là cách hiệu quả nhất để phát hiện và ngăn chặn các lỗ hổng bảo mật sớm trong quá trình phát triển và triển khai phần mềm. Việc thực hiện thủ công những bước quét bảo mật thường không đảm bảo, dễ bị bỏ sót do con người hoặc giới hạn thời gian. Với Snyk, các bước quét được chạy tự động mỗi khi có pull request, build hoặc deployment, đảm bảo mọi thay đổi mã nguồn đều được kiểm tra kỹ lưỡng.

Bài viết này sẽ hướng dẫn cách tích hợp Snyk vào các nền tảng CI/CD phổ biến hiện nay như GitHub Actions, Jenkins, GitLab CI, Azure Pipelines, đồng thời giải thích khi nào sử dụng lệnh snyk test để kiểm tra và snyk monitor để theo dõi trạng thái bảo mật dự án. Ngoài ra, còn có hướng dẫn quét ảnh container và xử lý sự cố thường gặp khi dùng Snyk trong CI/CD.

Những chuẩn bị cơ bản trước khi tích hợp Snyk vào pipeline CI/CD

Trước khi bắt đầu, bạn cần chuẩn bị:

  • Tài khoản và API token của Snyk: Đăng ký tài khoản tại app.snyk.io và tạo API token trong phần cài đặt tài khoản. Token này dùng để xác thực CLI của Snyk trong môi trường CI/CD.
  • Snyk CLI đã được cài đặt trong môi trường CI: Bạn có thể cài qua npm (npm install -g snyk), tải bản binary độc lập hoặc dùng image Docker chính thức của Snyk đã gắn sẵn CLI.
  • Biến môi trường SNYK_TOKEN trong CI: Mỗi nền tảng CI có cách lưu trữ biến bí mật riêng. Hãy lưu API token làm biến bí mật và gọi nó thông qua biến môi trường SNYK_TOKEN trong pipeline.

Nếu bạn đã dùng Snyk bản local hoặc qua tích hợp GitHub, token hiện tại có thể dùng cho pipeline CI/CD.

Hiểu về hai lệnh snyk testsnyk monitor

snyk test – Bước chốt bảo mật trên pipeline

Lệnh này quét nhanh và trả về mã thoát (exit code):

  • 0: Không phát hiện lỗ hổng ở mức độ nghiêm trọng đã định, pipeline tiếp tục chạy.
  • 1: Có lỗ hổng phát hiện, pipeline dừng và block merge hoặc deploy.
  • 2: Quá trình quét lỗi do vấn đề xác thực, mạng hoặc cấu hình.

Đây chính là cánh cổng kiểm soát, dùng để chặn các pull request mang lỗ hổng bảo mật.

snyk monitor – Theo dõi trạng thái bảo mật trong thực tế

Lệnh này không trả về pass/fail, thay vào đó nó upload snapshot cấu trúc phụ thuộc dự án lên dashboard Snyk. Snyk theo dõi liên tục các lỗ hổng mới được công bố ảnh hưởng đến dự án và gửi cảnh báo cho bạn dù khi chạy snyk test trước đó chưa phát hiện.

Dùng lệnh này sau khi deploy thành công để theo dõi đúng trạng thái bảo mật của môi trường production.

Mô hình tích hợp được khuyên dùng

  • Với mỗi pull request: chạy snyk test để chặn mã không an toàn.
  • Khi merge vào nhánh chính (main): chạy snyk test xác nhận lại, rồi chạy snyk monitor để cập nhật dashboard.

Hướng dẫn tích hợp Snyk trên các nền tảng CI/CD phổ biến

GitHub Actions

GitHub Actions là nền tảng CI phổ biến, Snyk cung cấp nhiều action chính thức hỗ trợ nhanh chóng:

  • Tạo file workflow .github/workflows/snyk.yml.
name: Snyk Security Scan

on:
  pull_request:
    branches: [main, develop]
  push:
    branches: [main]

jobs:
  snyk-test:
    name: Snyk Open Source
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Snyk to check for vulnerabilities
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          args: --severity-threshold=high
  • Thay action tương ứng với ngôn ngữ bạn dùng (Node.js, Python, Java, Docker...).
  • Thêm job cho SAST scan với Snyk Code nếu muốn quét mã nguồn.

Jenkins

Jenkins hỗ trợ qua plugin Snyk Security hoặc chạy trực tiếp CLI:

  • Với plugin: cài plugin từ quản lý plugin, thêm credential API token, cấu hình tool CLI tự động.
  • Jenkinsfile mẫu dùng plugin:
pipeline {
    agent any
    tools { snyk 'snyk-latest' }
    environment {
        SNYK_TOKEN = credentials('snyk-api-token')
    }
    stages {
        stage('Checkout') { steps { checkout scm } }
        stage('Install Dependencies') { steps { sh 'npm ci' } }
        stage('Snyk Security Scan') {
            steps {
                snykSecurity(
                    snykInstallation: 'snyk-latest',
                    snykTokenId: 'snyk-api-token',
                    severity: 'high',
                    failOnIssues: true
                )
            }
        }
        stage('Snyk Monitor') {
            when { branch 'main' }
            steps { sh 'snyk monitor' }
        }
    }
    post { always { archiveArtifacts artifacts: '**/snyk_report.html', allowEmptyArchive: true } }
}
  • Với CLI: cài trực tiếp CLI qua npm trong pipeline rồi chạy các câu lệnh snyk test, snyk code test, và snyk monitor.

GitLab CI

  • Lưu token vào biến CI/CD SNYK_TOKEN.
  • .gitlab-ci.yml mẫu:
stages:
  - test
  - security
  - monitor

snyk-dependency-scan:
  stage: security
  image: snyk/snyk-cli:npm
  script:
    - snyk test --severity-threshold=high
  only:
    - merge_requests
    - main
  allow_failure: false

snyk-code-scan:
  stage: security
  image: snyk/snyk-cli:npm
  script:
    - snyk code test --severity-threshold=high
  only:
    - merge_requests
    - main
  allow_failure: false

snyk-monitor:
  stage: monitor
  image: snyk/snyk-cli:npm
  script:
    - snyk monitor
  only:
    - main
  • Với GitLab Ultimate, có thể xuất kết quả Snyk ra định dạng báo cáo bảo mật của GitLab để hiển thị trong merge request.

Azure Pipelines

  • Cài đặt extension Snyk Security Scan hoặc chạy CLI trực tiếp.
  • Mẫu pipeline YAML:
trigger:
  branches:
    include: [main]

pr:
  branches:
    include: [main]

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '20.x'

- script: npm ci
  displayName: 'Install dependencies'

- task: SnykSecurityScan@1
  inputs:
    serviceConnectionEndpoint: 'SnykConnection'
    testType: 'app'
    severityThreshold: 'high'
    failOnIssues: true
    monitorWhen: 'always'

Tinh chỉnh khi pipeline fail do phát hiện lỗ hổng

  • Dùng flag --severity-threshold để chỉ fail pipeline khi phát hiện lỗ hổng có mức nghiêm trọng từ mức đã định (ví dụ: high, critical).
  • Áp dụng file .snyk để bỏ qua những lỗ hổng không ảnh hưởng hoặc không thể khai thác với lý do rõ ràng và ngày hết hạn.
  • Với dự án tồn đọng nhiều lỗ hổng, áp dụng triển khai dần dần: giai đoạn đầu chỉ xem báo cáo, sau đó mới siết chặt fail pipeline.

Quét ảnh container trong CI/CD

  • Xây dựng ảnh Docker trong bước trước.
  • Quét ảnh bằng lệnh:
snyk container test myapp:tag --file=Dockerfile --severity-threshold=high
  • Cờ --file=Dockerfile cho phép Snyk gợi ý nâng cấp base image.
  • Có thể theo dõi ảnh đã deploy bằng snyk container monitor.
  • Github Actions, Jenkins, GitLab đều có ví dụ cấu hình cho quét container.

Các mẫu nâng cao và tối ưu

  • Chạy song song các job quét khác nhau (dependency, SAST, Infrastructure as Code) để giảm thời gian pipeline.
  • Cache gói npm khi cài Snyk CLI qua npm để tăng tốc.
  • Hỗ trợ quét đa dự án trong monorepo với biến môi trường --project-name.

Lựa chọn thay thế cho Snyk trong CI/CD

Ngoài Snyk, bạn cũng có thể cân nhắc các công cụ như:

  • Trivy: mã nguồn mở, hỗ trợ quét container lẫn dependency.
  • Semgrep: SAST với tier miễn phí lớn, dễ tích hợp CI.
  • GitHub Advanced Security: CodeQL và Dependabot tích hợp sẵn.
  • CodeAnt AI: kết hợp SAST và đánh giá code bằng AI trong một bước pipeline.

Xử lý sự cố phổ biến khi dùng Snyk trong CI/CD

  • Lỗi xác thực: kiểm tra đúng biến môi trường token, không bị thiếu hoặc sai tên.
  • Không tìm thấy file manifest: đảm bảo checkout mã nguồn và đúng thư mục.
  • Kết quả quét khác nhau giữa local và CI: kiểm tra cài đặt lock file và cách cài dependencies.
  • Upload SARIF thất bại: do thiếu GitHub Advanced Security cho repo riêng tư, có thể tạm bỏ bước upload.

Tổng kết

Việc tích hợp Snyk trong CI/CD giúp tự động hóa kiểm tra lỗ hổng bảo mật ngay từ khâu phát triển, giảm rủi ro bị lỗi bảo mật “lọt” vào môi trường production. Quy trình chung là cài Snyk CLI, cấu hình biến SNYK_TOKEN, dùng snyk test để chặn build khi có lỗ hổng nghiêm trọng và dùng snyk monitor theo dõi trạng thái bảo mật dự án trong thời gian thực.

Bắt đầu với mức độ nghiêm trọng cao (--severity-threshold=high) là hợp lý để cân bằng an toàn và không gây quá tải cho developer. Ngoài dependency scan, nên bổ sung SAST qua Snyk Code và quét container nếu bạn sử dụng Docker. Quản lý ngoại lệ bằng file .snyk rõ ràng, có lý do và thời hạn để duy trì an toàn về lâu dài.

Phần lớn đội phát triển trong nước hiện có thể áp dụng dễ dàng với các hướng dẫn trên, giúp nâng cao bảo mật phần mềm và tuân thủ tốt hơn các chuẩn mực an toàn.


Ảnh minh họa giao diện Snyk trên CI/CDẢnh minh họa giao diện Snyk trên CI/CD

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗