
يشغّل Trivy كإجراء GitHub لفحص صورة حاوية Docker الخاصة بك بحثًا عن الثغرات الأمنية.
[![GitHub Release][release-img]][release] [![GitHub Marketplace][marketplace-img]][marketplace] [![License][license-img]][license]

name: build on: push: branches: - main pull_request: jobs: build: name: Build runs-on: ubuntu-24.04 steps: - name: Checkout code uses: actions/checkout@v4 - name: Build an image from Dockerfile run: docker build -t docker.io/my-organization/my-app:${{ github.sha }} . - name: Run Trivy vulnerability scanner uses: aquasecurity/[email protected] with: image-ref: 'docker.io/my-organization/my-app:${{ github.sha }}' format: 'table' exit-code: '1' ignore-unfixed: true vuln-type: 'os,library' severity: 'CRITICAL,HIGH'
### فحص خط أنابيب CI (مع إعداد Trivy)```yaml
name: build
on:
push:
branches:
- main
pull_request:
jobs:
build:
name: Build
runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner in fs mode
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
trivy-config: trivy.yaml
في هذه الحالة، trivy.yaml هو إعداد YAML يتم تضمينه كجزء من المستودع. تتوفر معلومات مفصلة على موقع Trivy الإلكتروني، لكن مثال على ذلك كما يلي:```yaml
format: json
exit-code: 1
severity: CRITICAL
secret:
config: config/trivy/secret.yaml
من الممكن تعريف جميع الخيارات في ملف `trivy.yaml`. يُترك تحديد الخيارات الفردية عبر الإجراء لأغراض التوافق مع الإصدارات السابقة. يلزم تعريف ما يلي لأنه لا يمكن تعريفه عبر ملف الإعدادات:
- `scan-ref`: إذا كنت تستخدم عمليات الفحص `fs, repo`.
- `image-ref`: إذا كنت تستخدم فحص `image`.
- `scan-type`: لتحديد نوع الفحص، مثل `image`, `fs`, `repo`، إلخ.
#### ترتيب الأولوية للخيارات
يستخدم Trivy [Viper](https://github.com/spf13/viper) الذي يحدد ترتيب أولويات معرّف للخيارات. الترتيب كالتالي:
- علامة GitHub Action
- متغير البيئة
- ملف الإعدادات
- الافتراضي
### ذاكرة التخزين المؤقت
يحتوي الإجراء على وظيفة مدمجة للتخزين المؤقت والاستعادة لـ [قاعدة بيانات الثغرات](https://github.com/aquasecurity/trivy-db) و[قاعدة بيانات جافا](https://github.com/aquasecurity/trivy-java-db) و[حزمة الفحوصات](https://github.com/aquasecurity/trivy-checks) إذا تم تنزيلها أثناء الفحص.
يتم تخزين ذاكرة التخزين المؤقت في دليل `$GITHUB_WORKSPACE/.cache/trivy` افتراضيًا.
يتم استعادة ذاكرة التخزين المؤقت قبل بدء الفحص وحفظها بعد انتهاء الفحص.
يستخدم [actions/cache](https://github.com/actions/cache) داخليًا ولكنه يتطلب إعدادات تكوين أقل.
مدخل `cache` اختياري، والتخزين المؤقت مفعّل افتراضيًا.
#### تعطيل التخزين المؤقت
إذا كنت تريد تعطيل التخزين المؤقت، اضبط مدخل `cache` على `false`، لكننا نوصي بإبقائه مفعّلاً لتجنب مشكلات الحد من المعدل.```yaml
- name: Run Trivy scanner without cache
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
cache: 'false'
يرجى ملاحظة أن هناك قيودًا على الوصول إلى التخزين المؤقت بين الفروع في GitHub Actions.
افتراضيًا، يمكن لسير العمل الوصول إلى التخزين المؤقت الذي تم إنشاؤه في الفرع الحالي أو الفرع الافتراضي (عادةً main أو master) واستعادته.
إذا كنت بحاجة إلى مشاركة التخزين المؤقت عبر الفروع، فقد تحتاج إلى إنشاء تخزين مؤقت في الفرع الافتراضي واستعادته في الفرع الحالي.
لتحسين سير العمل لديك، يمكنك إعداد مهمة مجدولة (cron job) لتحديث التخزين المؤقت في الفرع الافتراضي بانتظام. يتيح ذلك للفحوصات اللاحقة استخدام قاعدة البيانات المخزنة مؤقتًا دون تنزيلها مرة أخرى.```yaml
name: Update Trivy Cache
on: schedule: - cron: '0 0 * * *' # Run daily at midnight UTC workflow_dispatch: # Allow manual triggering
jobs: update-trivy-db: runs-on: ubuntu-latest steps: - name: Setup oras uses: oras-project/setup-oras@v1
- name: Get current date
id: date
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Download and extract the vulnerability DB
run: |
mkdir -p $GITHUB_WORKSPACE/.cache/trivy/db
oras pull ghcr.io/aquasecurity/trivy-db:2
tar -xzf db.tar.gz -C $GITHUB_WORKSPACE/.cache/trivy/db
rm db.tar.gz
- name: Download and extract the Java DB
run: |
mkdir -p $GITHUB_WORKSPACE/.cache/trivy/java-db
oras pull ghcr.io/aquasecurity/trivy-java-db:1
tar -xzf javadb.tar.gz -C $GITHUB_WORKSPACE/.cache/trivy/java-db
rm javadb.tar.gz
- name: Cache DBs
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/.cache/trivy
key: cache-trivy-${{ steps.date.outputs.date }}
عند تشغيل فحص، قم بتعيين متغيرات البيئة `TRIVY_SKIP_DB_UPDATE` و`TRIVY_SKIP_JAVA_DB_UPDATE` لتخطي عملية التنزيل.```yaml
- name: Run Trivy scanner without downloading DBs
uses: aquasecurity/[email protected]
with:
scan-type: 'image'
scan-ref: 'myimage'
env:
TRIVY_SKIP_DB_UPDATE: true
TRIVY_SKIP_JAVA_DB_UPDATE: true
افتراضيًا، يستدعي الإجراء aquasecurity/setup-trivy كخطوة أولى،
والذي يقوم بتثبيت إصدار trivy المحدد عبر الإدخال version. إذا كنت قد ثبّتّ trivy بالفعل بوسائل أخرى،
على سبيل المثال باستدعاء aquasecurity/setup-trivy مباشرة، أو كنت تستدعي هذا الإجراء عدة مرات، فيمكنك استخدام
الإدخال skip-setup-trivy لتعطيل هذه الخطوة.
name: build on: push: branches: - main pull_request: jobs: build: name: Build runs-on: ubuntu-24.04 steps: - name: Checkout code uses: actions/checkout@v4
- name: Manual Trivy Setup
uses: aquasecurity/[email protected]
with:
cache: true
version: v0.72.0