مراجعة الرموز البرمجية وتحليل الأمان باستخدام Gemini CLI مع الإضافات

1. 📖 مقدمة

194a7f6f1a93b614.png

في هذا الدرس التطبيقي حول الترميز، ستتعرّف على أساسيات Gemini CLI وتستفيد من إضافة مراجعة الرموز البرمجية وتحليل الأمان في سير عمل تطوير البرامج.

ما ستتعلمه

  • كيفية إعداد Gemini CLI
  • كيفية ضبط Gemini CLI
  • كيفية تثبيت إضافة Gemini CLI
  • كيفية استخدام إضافة Gemini CLI لمراجعة الرموز البرمجية وتحليل الأمان
  • كيفية ضبط MCP لـ Gemini CLI
  • كيفية فحص Gemini CLI في عملية الدمج المتواصل والتسليم المتواصل

المتطلبات

  • متصفّح الويب Chrome
  • حساب Gmail
  • مشروع على السحابة الإلكترونية مع تفعيل حساب الفوترة

2. 🚀 إعداد بيئة تطوير ورشة العمل

الخطوة 1: اختيار "المشروع النشط" في Cloud Console

في Google Cloud Console، في صفحة اختيار المشروع، اختَر أو أنشِئ مشروعًا على Google Cloud (راجِع القسم العلوي الأيمن من وحدة التحكّم).

3a143645e891087.png

انقر على هذا الرمز، وستظهر لك قائمة بجميع مشاريعك كما في المثال التالي:

59e03077d1ba2039.png

القيمة الموضّحة في المربّع الأحمر هي معرّف المشروع وسيتم استخدام هذه القيمة في جميع أنحاء البرنامج التعليمي.

تأكَّد من تفعيل الفوترة لمشروعك على Cloud. للتأكّد من ذلك، انقر على رمز الهامبرغر ☰ في الشريط العلوي الأيمن الذي يعرض قائمة التنقّل وابحث عن قائمة "الفوترة".

973396bb9d9c3523.png

837e03fb7edafdc4.png

إذا ظهر لك "حساب فوترة تجريبي في Google Cloud Platform" ضمن العنوان الفوترة / نظرة عامة ( الجزء العلوي الأيسر من Cloud Console )، يكون مشروعك جاهزًا للاستخدام في هذا البرنامج التعليمي. إذا لم يكن كذلك، ارجع إلى بداية هذا البرنامج التعليمي واستردّ قيمة حساب الفوترة التجريبي.

7f607aa026552bf5.png

الخطوة 2: التعرّف على Cloud Shell

ستستخدم Cloud Shell في معظم أجزاء البرامج التعليمية، لذا انقر على "تفعيل Cloud Shell" في أعلى وحدة تحكّم Google Cloud. إذا طُلب منك التفويض، انقر على تفويض.

1829c3759227c19b.png

b8fe7df5c3c2b919.png

بعد الاتصال بـ Cloud Shell، علينا التحقّق مما إذا كان قد تمّت مصادقة الصدفة ( أو الوحدة الطرفية) باستخدام حسابنا.

gcloud auth list

إذا ظهر لك حساب Gmail الشخصي كما في مثال الناتج أدناه، يعني ذلك أنّ كل شيء على ما يرام.

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

إذا لم يكن كذلك، جرِّب إعادة تحميل المتصفّح وتأكَّد من النقر على تفويض عند مطالبتك بذلك ( قد يتمّ مقاطعة العملية بسبب مشكلة في الاتصال).

بعد ذلك، نحتاج أيضًا إلى التحقّق مما إذا كان قد تمّت تهيئة الصدفة مسبقًا باستخدام معرّف المشروع الصحيح الذي لديك. إذا رأيت قيمة داخل ( ) قبل رمز $ في الوحدة الطرفية ( في لقطة الشاشة أدناه، القيمة هي "your-workshop-project")، تشير هذه القيمة إلى المشروع الذي تمّت تهيئته لجلسة الصدفة النشطة.

25e65d7ad1d62de0.png

إذا كانت القيمة المعروضة صحيحة، يمكنك تخطّي الأمر التالي. ومع ذلك، إذا كان غير صحيح أو غير متوفّر، شغِّل الأمر التالي

gcloud config set project <YOUR_PROJECT_ID>

الخطوة 3: التعرّف على "محرّر Cloud Shell" وإعداد دليل عمل التطبيق

الآن، يمكننا إعداد محرّر الرموز البرمجية لتنفيذ بعض مهام الترميز. سنستخدم "محرّر Cloud Shell" لهذا الغرض.

انقر على الزر فتح المحرِّر، وسيؤدي ذلك إلى فتح b16d56e4979ec951.png في "محرِّر Cloud Shell".

ستظهر لك الآن واجهة Cloud Shell Editor كما هو موضّح أدناه

74e9e030342164b6.png

الآن، استنسِخ مستودع العرض التوضيحي الذي سنتفاعل معه. أولاً، علينا فتح الوحدة الطرفية للمحرّر. يمكنك إجراء ذلك من خلال النقر على Terminal -> New Terminal في شريط القوائم، أو استخدام Ctrl + Shift + C، وسيؤدي ذلك إلى فتح نافذة طرفية في الجزء السفلي من المتصفح.

95e31ec63a88890d.png

بعد ذلك، شغِّل الأمر التالي في الوحدة الطرفية

git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo

بعد ذلك، انتقِل إلى القسم العلوي من "محرّر Cloud Shell" وانقر على ملف->فتح مجلد (File->Open Folder)، وابحث عن دليل اسم المستخدم وابحث عن دليل المستودع الذي تم استنساخه code-analysis-demo، ثم انقر على الزر "حسنًا" (OK). سيؤدي ذلك إلى جعل الدليل الذي تم اختياره هو دليل العمل الرئيسي. في هذا المثال، اسم المستخدم هو alvinprayuda، وبالتالي يظهر مسار الدليل أدناه

ee00d484ff2f8351.png

194f63ef6de51b9.png

يجب أن يبدو دليل العمل في "محرّر Cloud Shell" الآن على النحو التالي

2d53c6161b553e68.png

يمكننا الآن الانتقال إلى المرحلة التالية

3- 🚀 الإعدادات وعمليات الضبط

إذا أردت تثبيت Gemini CLI في نظامك المحلي، يمكنك اتّباع الخطوات التالية:

  1. تأكَّد من أنّ نظامك يتضمّن الإصدار 20 أو إصدارًا أحدث من Node.
  2. فعِّل Gemini CLI من خلال إحدى الطريقتَين التاليتَين:
  • تثبيته كحزمة عامة
# Install as an executor

npm install -g @google/gemini-cli

# then run it from terminal
gemini
  • أو شغِّله مباشرةً من المصدر للحصول دائمًا على أحدث إصدار
npx https://github.com/google-gemini/gemini-cli

عند تشغيله للمرة الأولى، سيُطلب منك الإجابة عن عدة أسئلة. إذا شغّلتها من بيئة تطوير متكاملة (مثل VSCode)، سيُطرح عليك السؤال التالي

7f0f7d5091df7abb.png

بعد ذلك، سيطلب منك تحديد عدة خيارات للمصادقة.

7ce5c6574f249304.png

هناك العديد من الخيارات:

  • إذا اخترت تسجيل الدخول باستخدام حساب Google، سيتم فتح صفحة مصادقة Google في المتصفّح، وما عليك سوى قبولها.
  • إذا كنت تفضّل استخدام مفتاح Gemini API، عليك إنشاء مفتاح في صفحة AI Studio، ثم إنشاء ملف .env في دليل العمل مع ضبط المتغيّر GEMINI_API_KEY ( أو تنفيذ الأمر export GEMINI_API_KEY="your-api-key" في سطر الأوامر).
  • إذا اخترت استخدام Vertex AI، ستحتاج إلى مشروع مثل الذي أعددته سابقًا وإنشاء ملف .env وضبط GOOGLE_CLOUD_PROJECT وGOOGLE_CLOUD_LOCATION.

إذا أردت تغيير طرق المصادقة هذه، يمكنك تنفيذ الأمر /auth من Gemini CLI أو تعديل ملف الإعداد. إذا أردت تعديل ملف الإعداد مباشرةً، يجب أن يكون في $HOME/.gemini/settings.json على نظام التشغيل Linux . سيظهر لك نوع security وauth ويمكنك تعديله

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
    }
  }
}

72300c1f781857c8.png

4. ‫🚀 الأوامر الأساسية والأدوات المضمّنة

لنستكشف الآن Gemini CLI لمعرفة المزيد عنه. إذا كنت تبحث عن بعض الأوامر الأساسية التي يمكن استخدامها، يمكنك كتابة /help لعرض جميع الأوامر المتاحة.

800d1b06a5ad9f9c.png

/help

ستظهر لك نتيجة مثل هذه f46a75c6bb177a2b.png

‫Gemini CLI هو وكيل مستند إلى الذكاء الاصطناعي، وبالتالي سيتضمّن أدوات مجهّزة لحلّ المهمة التي يقدّمها المستخدم. للاطّلاع على الأدوات المضمّنة فيه، شغِّل الأمر /tools

17a6d7fcf06df563.png

/tools

ستظهر لك نتيجة مشابهة لما يلي

7d22b38a387f45d0.png

يمكنك ملاحظة أنّ Gemini CLI يتضمّن العديد من الإمكانات، مثل القراءة والكتابة في الملفات والبحث على الويب وغير ذلك. تتطلّب العديد من هذه الأدوات موافقة المستخدم تلقائيًا بسبب المخاطر المحتملة

لنطّلِع الآن على طريقة عملها، جرِّب تشغيل هذه الطلبات في Gemini CLI

15e2d863a4eb8df4.png

Find top 10 OWASP security issue and write it down to owasp.md

ستلاحظ أنّه سيتم استدعاء الأداة GoogleSearch، ثم سيتم كتابة النتيجة باستخدام الأداة WriteFile. وإذا كنت تستخدم بيئة تطوير متكاملة، سيظهر لك الاقتراح على شكل اختلاف وخيار عرض لتحديد ما إذا كنت تريد قبول الاقتراحات أو رفضها. يمكنك هنا ملاحظة أنّ Gemini CLI يطلب منك الإذن بكتابة الملف

8163f43b05ca59a3.png

5- 🚀 الإضافات

لتحسين نتائج مهمة معيّنة باستخدام وكيل مستند إلى الذكاء الاصطناعي، يجب معرفة كيفية صياغة طلب بشكل صحيح، وإدارة هندسة السياق بشكل صحيح من خلال دمج الأدوات المناسبة وما إلى ذلك.

"إضافات Gemini CLI" هي حِزم مسبقة التجهيز وسهلة التثبيت من الطلبات وعمليات الدمج التي يمكن ربطها بأدوات خارجية. يحتوي كلّ إضافة على "دليل" مدمج حول كيفية استخدام الأدوات بفعالية، ويمكن أن يتألف من المكوّنات التالية:

  • أوامر تبدأ بشرطة مائلة مخصّصة
  • إعدادات MCP
  • ملفات السياق

6da12f33463ac755.png

تثبيت إضافات الأمان

على سبيل المثال، في هذا البرنامج التعليمي، سنتعرّف على كيفية تثبيت الإضافتَين code-review وsecurity.

نفِّذ الأمر التالي لتثبيت إضافات security من الوحدة الطرفية

gemini extensions install https://github.com/gemini-cli-extensions/security

ستظهر الأسئلة التالية، ما عليك سوى الضغط على Enter للموافقة

Installing extension "gemini-cli-security".
**Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.**
This extension will run the following MCP servers:
  * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js
This extension will append info to your gemini.md context using GEMINI.md
Do you want to continue? [Y/n]:
Extension "gemini-cli-security" installed successfully and enabled.

تثبيت إضافات مراجعة الرموز

بعد ذلك، لنثبّت الإضافة code-review من خلال تنفيذ الأمر أدناه

gemini extensions install https://github.com/gemini-cli-extensions/code-review

بعد الانتهاء، شغِّل Gemini CLI مرة أخرى

gemini

وتشغيل الأمر /extensions، ستلاحظ أنّه تم تثبيت هاتين الإضافتين من قبل.

88a86a0dc42fc510.png

/extensions

حسنًا، لننفّذ الآن عملية عملية على مستودع النماذج الذي استنسخته سابقًا

6. ‫🚀 تطبيق إضافة "وضع التفاعل" - تحليل أمان الرموز البرمجية

إضافة Security هي إضافة مفتوحة المصدر لـ Gemini CLI، وهي مصمَّمة لتحسين أمان المستودع. تضيف الإضافة أمرًا جديدًا إلى Gemini CLI يحلّل تغييرات الرمز البرمجي لتحديد مجموعة متنوّعة من المخاطر والثغرات الأمنية.

لنجهّز الآن مستودع العرض التوضيحي أولاً، وننفّذ الأمر التالي للانتقال إلى الفرع الذي تم فيه تطبيق التغييرات التي تنطوي على مخاطر أمنية

git checkout refactor/analysis-demo

بعد ذلك، شغِّل Gemini CLI في الوحدة الطرفية

gemini

بعد ذلك، لنشغّل الإضافات

e3fcf630238f9b2e.png

/security:analyze

سيؤدي ذلك إلى بدء عملية طويلة الأمد، وستتلقّى خلالها عدة طلبات للحصول على إذنك بتنفيذ عملية معيّنة، مثل mkdir كما هو موضّح أدناه.

10d6ad2ef91b5acf.png

هذه آلية وقائية لضمان معرفة المستخدمين بالإجراءات التي سينفّذها Gemini CLI. بالنسبة إلى بقية البرنامج التعليمي، يمكنك السماح له دائمًا ( الخيار 2).

سيؤدي هذا الامتداد إلى بدء عملية تستغرق وقتًا طويلاً، ويمكنك الاطّلاع على ملف تخطيط تم إنشاؤه داخل الدليل .gemini_security، كما يمكنك الاطّلاع على قائمة التحقّق التي توضّح ما إذا كانت العملية قد اكتملت أم لا. كما هو موضّح في المثال التالي:

543035cb65d27804.png

سيستغرق إكمال المهام بعض الوقت، وخلال الانتظار، يمكننا التحقّق من مصدر هذه الإضافات في مستودع Github . يعرض عنوان URL هذا الطلب المستخدَم لتنفيذ كل عمليات فحص الأمان هذه

73f4966870bc9ddf.png

كما هو موضّح، لإجراء هذا الفحص، يتم تحليل الطلب باستخدام واجهة سطر الأوامر في Gemini لإجراء فحص على مرحلتين، وهما مرحلة الاستطلاع ومرحلة التحقيق الأكثر تفصيلاً.

إذا ظهرت لك الرسالة التالية في واجهة سطر الأوامر في Gemini، يمكنك اختيار الخيار 2 لإيقاف ميزة رصد الحلقات المتكررة.

a0af5e15627afa83.png

بعد ذلك، اطلب من Gemini CLI المتابعة.

611a7ed0fb6fc44b.png

continue

هذه آلية لتجنُّب حلقات لا نهائية وغير منتجة لاستدعاء الأدوات، وسنواصل تحسينها بمرور الوقت.

بعد الانتهاء، سيتم عرض التقرير في الوحدة الطرفية التفاعلية، ولتسهيل ذلك، لنطلب من Gemini CLI كتابته في security-analysis.md

b4cbad3aaeaa8dce.png

write the result to security-analysis.md file

يمكنك الآن فحص النتيجة المكتوبة في الملف

7. 🚀 وضع عدم التفاعل - تطبيق إضافة مراجعة الرمز البرمجي

تضيف الإضافة code-review أمرًا جديدًا إلى Gemini CLI يحلّل تغييرات الرمز البرمجي لتحديد مجموعة متنوّعة من المشاكل المتعلّقة بجودة الرمز البرمجي.

يمكن تنفيذ هذه الإضافة في وضع Gemini CLI غير التفاعلي، ما يعني أنّه يمكن تنفيذ كل العملية بدون الحاجة إلى إدخال شل Gemini CLI. لتشغيل Gemini CLI في الوضع غير التفاعلي، يمكنك استخدام نمط الأوامر التالي

gemini "put your command here"

ومع ذلك، من المهم ملاحظة أنّه سيؤدي التشغيل في الوضع غير التفاعلي إلى إيقاف أي عملية أدوات تتطلّب إذن المستخدم، وبالتالي نحتاج إلى إضافة العلامة --yolo للموافقة تلقائيًا على جميع الإجراءات، ما يعني تفعيل جميع الأدوات أثناء الوضع غير التفاعلي.

لننفِّذ الإضافة code-review باستخدام الأمر التالي

gemini "/code-review" --yolo -e code-review > code-review.md

سيكتب هذا الأمر نتيجة إخراج Gemini CLI في الملف code-review.md. لاحظ العلامة -e هنا، فهذه العلامة تتحكّم في الإضافة التي سيتم تفعيلها أثناء الجلسة. هنا، نفعّل الإضافة code-review فقط ونوقف الإضافات الأخرى.

سيستغرق ذلك بعض الوقت، ولكن بعد الانتهاء، يمكنك الاطّلاع على نتيجة مشابهة لما هو موضّح أدناه مكتوبة في ملف Markdown.

Here are the results of the code review.

While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.

More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:

### 1. SQL Injection
*   **Severity**: High
*   **Location**: 
    *   `main.py:99` in `get_products_by_category`
    *   `main.py:146` in `search_products`
    *   `main.py:372` in `get_user_transactions`
    *   `main.py:438` in `adjust_inventory_by_query`
*   **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
*   **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.

### 2. Server-Side Request Forgery (SSRF)
*   **Severity**: High
*   **Location**: `main.py:265` in `fetch_url`
*   **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
*   **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.

### 3. Information Exposure
*   **Severity**: Medium
*   **Location**: `main.py:423` in `get_environment_variables`
*   **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
*   **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.

8. 🚀 التوافق مع بروتوكول سياق النموذج

الآن، وكما أوضحنا سابقًا في شرح الإضافة، يمكن أن تتصل أداة Gemini CLI بخوادم MCP، أي التطبيقات التي توفّر الأدوات والموارد من خلال Model Context Protocol. يتيح هذا الربط لواجهة سطر الأوامر في Gemini التفاعل مع الأنظمة الخارجية ومصادر البيانات من خلال استخدام خوادم MCP كجسور إلى بيئتك المحلية والخدمات الخارجية، مثل واجهات برمجة التطبيقات.

5f1cdd4be3e7b42a.png

إذا أردت إعداد خادم MCP الخاص بك، عليك تعديل ملف .gemini/settings.json وإضافة الإعدادات التالية :

{
    ...
    # Previous settings above if any
    "mcpServers": {
       "server_name": {
           # MCP server configurations here
       }
    }
}

في هذا البرنامج التعليمي، لنضبط إعدادات الربط بحسابنا على Github لنقل بيانات التقرير السابقة إلى Github

ضبط خادم MCP في Github

لننشئ أولاً ملف إعداد مشروع Gemini CLI. نفِّذ الأمر التالي

mkdir -p .gemini && touch .gemini/settings.json

بعد ذلك، افتح الملف .gemini/settings.json واملأه بالإعدادات التالية

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "your-personal-access-token"
            },
            "timeout": 5000
       }
  }
}

الآن، سنحتاج إلى رمز الدخول الشخصي الخاص بك على Github هنا، لذا تأكَّد من أنّ لديك حسابًا على Github.

سجِّل الدخول إلى حسابك على Github وانتقِل إلى الإعدادات.

dc57f047ca9a2b83.png

بعد ذلك، انتقِل للأسفل للعثور على إعدادات المطوّرين وانقر عليها.

59d9b700c41ca1b6.png

بعد ذلك، انقر على رموز الدخول الشخصية واختَر الرموز (القديمة).

e96fccd80872e480.png

30ac727da307602b.png

أدخِل اسم رمز الدخول الشخصي هنا وضَع علامة في مربّعات النطاقات repo.

ad167223fa231e3c.png

بعد ذلك، انتقِل للأسفل وانقر على الزر إنشاء رمز مميّز، وتأكَّد من

انقر على زر إنشاء رمز مميّز جديد واختَر إنشاء رمز مميّز جديد (الإصدار القديم). بعد ذلك، انسخ الرمز المميّز الذي تم إنشاؤه واكتبه في .gemini/settings.json

efd82711868093c0.png

لذلك، من المفترض أن يبدو ملف .gemini/settings.json على النحو التالي

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "ghp-xxxx"
            },
            "timeout": 5000
       }
  }
}

الآن، لنؤكّد عملية الربط. إدخال Gemini CLI من خلال تنفيذ هذا الأمر

gemini

بعد ذلك، شغِّل الأمر /mcp، وسيظهر لك أنّ Github MCP تم إعداده بشكلٍ صحيح.

a97c9a98f07dc87c.png

/mcp

بعد ذلك، لنختبر اتصال MCP هذا من خلال إرسال هذا الأمر

59bfd79aba7cc386.png

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review

يُرجى ملاحظة الرمزين @code-review.md و@security-analysis.md هنا، فهما الطريقة التي نشير بها إلى الملفات التي سيتم تمريرها إلى واجهة سطر الأوامر في Gemini. سيقرأ هذا الأمر محتوى الملفَين ويدفع تعليقًا إلى طلب السحب المرتبط بهذا الفرع باستخدام اتصال Github MCP. بعد ذلك، يمكنك التحقّق من ذلك في عنوان URL لطلب السحب.

864b859b56cfe9e7.png

9- ‫💡Gemini CLI في سير عمل التكامل المستمر/التسليم المستمر

إذا كنت من مستخدمي Github، يمكنك بسهولة تضمين Gemini CLI في مسار CI/CD من خلال استخدام run-gemini-cli Github Action. يعمل هذا المساعد كوكيل مستقل لتنفيذ مهام الترميز الروتينية المهمة، وكشريك عند الطلب يمكنك تفويض العمل إليه بسرعة.

يمكنك الاستفادة منه لإجراء مراجعات لطلبات الدمج وتصنيف المشاكل وتنفيذ تحليل الرموز البرمجية وتعديلها وغير ذلك باستخدام Gemini بشكل حواري مباشرةً داخل مستودعات GitHub

يمكن الاطّلاع على مثال على عملية الدمج هذه في طلب السحب هذا، حيث نستخدم إضافة Gemini CLI Security داخل برنامج التشغيل ونقدّم المراجعات عند إنشاء طلب السحب.

ad2a8e8d0a15e3f5.png

3cb40f104ce6a594.png

8edb7277fa6324b.png

ef48414c02a16dfa.png

10. 💡استكشاف إضافات Gemini CLI الأخرى

8a7939ee0328e6e2.png

يمكنك أيضًا استكشاف المزيد من الإضافات في https://geminicli.com/extensions . يمكنك الاطّلاع عليه للحصول على المزيد من الأدوات المفيدة.

11. ‫🧹 تنظيف

لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدرس العملي، اتّبِع الخطوات التالية:

  1. في Google Cloud Console، انتقِل إلى صفحة إدارة الموارد.
  2. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف.
  3. في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.