انتقل إلى المحتوى

الـ secrets في Actions

ملاحظة

تحتاج هذه الميزة إلى تفعيل Actions على الـ repository من SettingsAdvanced SettingsEnable Repository Actions، وإلى runner متاح يوفّره مدير الخدمة. إن لم يظهر تبويب Actions في الـ repository فالميزة غير متاحة بعد، وكل ما هنا ينطبق «إن كانت مفعّلة».

الـ secret قيمة حسّاسة — كلمة سر، أو access token، أو مفتاح خدمة خارجية — تحفظها مشفّرةً في ليڤانت غيت (LevantGit)، وتقرأها من الـ workflow بالتعبير ${{ secrets.NAME }} دون أن تكتبها في ملف YAML. لا تُقرأ قيمتها من الواجهة بعد الحفظ، وتُحجب من سجل التنفيذ إن طُبعت بالخطأ.

ما هو الـ secret؟

الـ secret قيمة نصية تحفظها في ليڤانت غيت (LevantGit) مشفّرةً، ولا تستطيع قراءتها من الواجهة بعد حفظها؛ يمكنك فقط تحديثها أو حذفها. عند تنفيذ الـ job تُمرَّر القيمة إلى الـ runner، وتُحجب تلقائيًا من السجل إن طُبعت بالخطأ (تظهر كنجوم ***). لا تكتب كلمات السر والـ tokens مباشرة في ملف YAML أبدًا؛ كل ما في الـ repository يراه كل من يملك حق القراءة.

مستويات الـ secrets

يمكنك إنشاء الـ secret في ثلاثة مستويات، وكل مستوى يحدّد أين يكون متاحًا:

المستوى أين تُنشئه من يراه
الـ repository SettingsActionsSecrets في الـ repository workflows هذا الـ repository فقط
الـ organization إعدادات الـ organization ← ActionsSecrets workflows كل repositories الـ organization
المستخدم Settings في حسابك ← ActionsSecrets workflows كل repositories الشخصية

اضغط Add Secret، واكتب الاسم والقيمة، ثم احفظ. لن تظهر القيمة مرة أخرى.

قواعد التسمية

  • يتكوّن الاسم من حروف لاتينية (a-z، A-Z) وأرقام (0-9) وشرطة سفلية (_) فقط، دون مسافات.
  • لا يبدأ بالسابقة GITHUB_ ولا GITEA_؛ هذه محجوزة للنظام.
  • لا يبدأ برقم.
  • الاسم غير حسّاس لحالة الأحرف: api_key وAPI_KEY هما الاسم نفسه.
  • يجب أن يكون فريدًا في مستواه: لا secretان بالاسم نفسه في الـ repository الواحد، ولا secretان بالاسم نفسه في الـ organization الواحدة.

استخدام الـ secret في الـ workflow

بعد إنشائه يصبح الـ secret متاحًا تلقائيًا في السياق secrets، وتصل إليه بالتعبير ${{ secrets.NAME }}. المثال التالي يمرّر secret باسم DEPLOY_TOKEN إلى step كـ environment variable:

name: Deploy
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy to server
        env:
          DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
        run: ./scripts/deploy.sh

نصيحة

الأفضل تمرير الـ secret عبر env: كما في المثال، لا كتابته داخل سطر run: مباشرة؛ فهذا يقلّل احتمال ظهوره في السجل أو في رسائل الخطأ.

ماذا لو تكرّر الاسم في مستويين؟

إن وُجد secret بالاسم نفسه في أكثر من مستوى، فالأولوية للمستوى الأقرب إلى الـ repository: secret الـ repository يتقدّم على secret الـ organization أو المستخدم. هكذا تستطيع وضع قيمة عامة على مستوى الـ organization، وتجاوزها في repository معيّن عند الحاجة.

نصائح أمان

  • أعطِ كل secret أقل صلاحية ممكنة: access token بنطاق محدود أفضل من كلمة سر حسابك.
  • اعتبر أن أي collaborator يملك حق الكتابة على الـ repository يستطيع، عمليًا، تعديل الـ workflow لاستخراج الـ secret. لا تضع في repository مشترك secrets لا تثق بكل كاتبيه بها.
  • بدّل (rotate) الـ secrets دوريًا، وبعد مغادرة أي collaborator.
  • تذكّر أن الـ runner يتلقّى القيمة كما هي؛ لا تستخدم runner لا تثق به.

ماذا بعد؟


هذه الصفحة مبنية على وثائق Gitea (رخصة MIT) بعد ترجمتها وتبسيطها.