
आपके Docker कंटेनर इमेज में भेद्यताओं की जाँच के लिए Trivy को GitHub action के रूप में चलाता है।
GitHub Action Trivy के लिए
[![GitHub Release][release-img]][release] [![GitHub Marketplace][marketplace-img]][marketplace] [![लाइसेंस][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 Config के साथ)```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` फ़ाइल में सभी विकल्पों को परिभाषित करना संभव है। एक्शन के माध्यम से व्यक्तिगत विकल्प निर्दिष्ट करना केवल पिछड़ी संगतता (backward compatibility) उद्देश्यों के लिए छोड़ा गया है। निम्नलिखित को परिभाषित करना आवश्यक है क्योंकि इन्हें कॉन्फ़िग फ़ाइल के साथ परिभाषित नहीं किया जा सकता है:
- `scan-ref`: यदि `fs, repo` स्कैन का उपयोग कर रहे हैं।
- `image-ref`: यदि `image` स्कैन का उपयोग कर रहे हैं।
- `scan-type`: स्कैन प्रकार को परिभाषित करने के लिए, जैसे `image`, `fs`, `repo`, आदि।
#### विकल्पों के लिए प्राथमिकता क्रम
Trivy [Viper](https://github.com/spf13/viper) का उपयोग करता है जिसमें विकल्पों के लिए एक निर्धारित प्राथमिकता क्रम होता है। क्रम इस प्रकार है:
- GitHub Action फ़्लैग
- पर्यावरण चर (Environment variable)
- कॉन्फ़िग फ़ाइल
- डिफ़ॉल्ट
### कैश (Cache)
एक्शन में [वल्नरेबिलिटी DB](https://github.com/aquasecurity/trivy-db), [जावा 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` इनपुट को `false` पर सेट करें, लेकिन हम अनुशंसा करते हैं कि रेट लिमिटिंग समस्याओं से बचने के लिए इसे सक्षम रखें।```yaml
- name: Run Trivy scanner without cache
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
cache: 'false'
कृपया ध्यान दें कि GitHub Actions में शाखाओं के बीच कैश एक्सेस पर प्रतिबंध हैं।
डिफ़ॉल्ट रूप से, एक वर्कफ़्लो वर्तमान शाखा या डिफ़ॉल्ट शाखा (आमतौर पर main या master) में बनाए गए कैश को एक्सेस और पुनर्स्थापित कर सकता है।
यदि आपको शाखाओं के बीच कैश साझा करने की आवश्यकता है, तो आपको डिफ़ॉल्ट शाखा में एक कैश बनाने और उसे वर्तमान शाखा में पुनर्स्थापित करने की आवश्यकता हो सकती है।
अपने वर्कफ़्लो को अनुकूलित करने के लिए, आप डिफ़ॉल्ट शाखा में नियमित रूप से कैश अपडेट करने के लिए एक क्रॉन जॉब सेट कर सकते हैं। यह बाद के स्कैन को इसे फिर से डाउनलोड किए बिना कैश किए गए DB का उपयोग करने की अनुमति देता है।```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 को कॉल करता है
जो version इनपुट द्वारा निर्दिष्ट trivy संस्करण को स्थापित करता है। यदि आपने पहले से ही trivy को अन्य
तरीकों से स्थापित किया है, जैसे कि aquasecurity/setup-trivy को सीधे कॉल करके, या इस एक्शन को कई बार चला रहे हैं, तो आप
skip-setup-trivy इनपुट का उपयोग करके इस चरण को अक्षम कर सकते हैं।