מדריך קלוד קוד בעברית

תיעוד 31

שימוש ב-Claude Code GitHub Actions עם ספקי ענן

הרצת Claude Code GitHub Actions דרך Amazon Bedrock, Google Cloud's Agent Platform, או Microsoft Foundry במקום דרך ה-API של Claude

Claude Code GitHub Actions קורא ל-API של Claude כברירת מחדל. כדי לנתב את ה-inference דרך חשבון הענן שלך במקום זאת, הגדר את קלט הספק (provider) של ה-Claude Code GitHub Action והגדר את הענן שלך לתת אמון בטוקן ה-OpenID Connect (OIDC) של ה-workflow. ה-workflow מבצע אימות באמצעות הטוקן הזה, כך שאינך שומר פרטי גישה ארוכי טווח לענן במאגר שלך.

דף זה מתבסס על הגדרת GitHub Actions. הוא מניח שאתה כבר מכיר את קובץ ה-workflow ואת שלב ה-anthropics/claude-code-action, ומכסה רק את מה שמשתנה בעבודה עם ספק ענן.

#בחר את הספק שלך

ה-Claude Code GitHub Action תומך בשלושה ספקים, ושלבי ההגדרה להלן נבדלים רק בתצורה בצד הענן. השתמש בספק שבו לארגון שלך כבר יש גישה למודלי Claude. אתה מציין ל-Claude Code GitHub Action באיזה ספק להשתמש באמצעות קלט יחיד בבלוק ה-with: של שלב ה-anthropics/claude-code-action:

  • Amazon Bedrock: use_bedrock: "true"
  • Google Cloud's Agent Platform: use_vertex: "true"
  • Microsoft Foundry: use_foundry: "true"

דוגמאות ה-workflow המלאות תחת הגדרת האינטגרציה כבר כוללות את הקלט עבור כל ספק.

#דרישות מוקדמות

לפני שתתחיל, אתה זקוק ל:

  • גישת ניהול (Admin) למאגר שבו ה-Claude Code GitHub Action רץ, כדי להתקין GitHub App ולהוסיף סודות (secrets)
  • הרשאה ליצור משאבי זהות בחשבון הענן שלך: תפקידי IAM וספקי זהות OIDC ב-AWS, משאבי Workload Identity Federation וחשבונות שירות (service accounts) ב-Google Cloud, או אפליקציות Microsoft Entra ב-Azure
  • גישה למודלי Claude אצל הספק שלך:
    • Amazon Bedrock: גישה מאושרת למודלי Claude. פרופילי cross-region inference, כגון מזהי המודלים שמתחילים ב-us. בדוגמאות שבדף זה, דורשים הרשאת גישה בכל אזור בקבוצת האזורים שלהם. ראה Claude Code ב-Amazon Bedrock
    • Google Cloud's Agent Platform: פרויקט שבו ה-Agent Platform API מופעל וקיימת גישה למודלי Claude. ראה Claude Code ב-Google Cloud's Agent Platform
    • Microsoft Foundry: משאב Foundry עם פריסה של מודל Claude. ראה Claude Code ב-Microsoft Foundry

#הגדרת האינטגרציה

מעבר לדרישות המוקדמות, עליך ליצור ארבעה דברים: זהות GitHub עבור ה-Claude Code GitHub Action, תצורת אמון בצד הענן, סודות המאגר, וקובץ ה-workflow. השלבים שלהלן עוברים על כל אחד מהם.

  1. בחירת זהות GitHub: ה-Claude Code GitHub Action דוחף קומיטים ומפרסם תגובות דרך זהות GitHub. ההגדרה המהירה מתקינה את ה-Claude GitHub App הרשמי לשם כך. עם ספק ענן, אתה בוחר את הזהות בעצמך:

    • Claude GitHub App הרשמי: התקן אותו במאגר, או דלג לשלב הבא אם הוא כבר מותקן
    • GitHub App מותאם אישית: צור אפליקציה משלך, כמתואר להלן, כאשר אתה מעוניין רק בשלוש ההרשאות שבהן ה-Claude Code GitHub Action משתמש, במקום החבילה המלאה של האפליקציה הרשמית
    • ה-GITHUB_TOKEN האוטומטי של GitHub: אין צורך ליצור או להתקין אפליקציה, אך GitHub אינו מפעיל את תהליכי ה-CI שלך עבור קומיטים שבוצעו באמצעותו

    דוגמאות ה-workflow בשלב הרביעי מבצעות אימות באמצעות אפליקציה מותאמת אישית. שלב זה מפרט גם מה לשנות עבור שתי האפשרויות האחרות.

    כדי ליצור אפליקציה מותאמת אישית, רשום GitHub App חדש עם webhooks מושבתים, מכיוון שאינטגרציה זו אינה משתמשת בהם. הענק לו שלוש הרשאות מאגר:

    • Contents: קריאה וכתיבה (read and write)
    • Issues: קריאה וכתיבה (read and write)
    • Pull requests: קריאה וכתיבה (read and write)

    לאחר רישום האפליקציה, צור מפתח פרטי (private key) ושמור את קובץ ה-.pem שהורד, רשום לפניך את ה-App ID מדף ההגדרות של האפליקציה, והתקן את האפליקציה במאגר שבו ה-Claude Code GitHub Action רץ. את המפתח ואת ה-ID תוסיף כסודות בשלב השלישי.

  2. הגדרת אימות ענן: הגדר את הענן שלך לתת אמון בטוקן ה-OIDC ש-GitHub מנפיק ל-workflow, כך שכל הרצה של ה-workflow תקבל פרטי אימות קצרי טווח לענן. הנקודות בכל ספק מסכמות מה יש ליצור, וכל סעיף מקשר למדריך של ספק הענן עצמו עבור השלבים ברמת הקונסולה.

    Amazon Bedrock: צור את תצורת האמון בחשבון ה-AWS שלך, בהתאם למדריך AWS ליצירת ספקי זהות OIDC:

    • הוסף ספק זהות GitHub OIDC עם כתובת URL של הספק https://token.actions.githubusercontent.com ו-audience של sts.amazonaws.com
    • צור תפקיד IAM שהספק הזה נותן בו אמון כזהות אינטרנט (web identity), וצרף את פוליסת ההפעלה התחומה מתוך תצורת IAM, המעניקה את bedrock:InvokeModel, bedrock:InvokeModelWithResponseStream, bedrock:ListInferenceProfiles, ו-bedrock:GetInferenceProfile, יחד עם שתי פעולות מנוי של aws-marketplace
    • הגבל את פוליסת האמון של התפקיד למאגר שלך עם תנאי subject כגון repo:your-org/your-repo:*. ראה את מדריך הקשחת OIDC של GitHub עבור מבנה ה-claim

    רשום לפניך את ה-ARN של התפקיד. תוסיף אותו כסוד בשלב הבא.

    Google Cloud's Agent Platform: צור את משאבי ה-federation בפרויקט ה-Google Cloud שלך, בהתאם לתיעוד Workload Identity Federation:

    • הפעל שלושה ממשקי API: IAM Credentials, Security Token Service (STS), ואת Agent Platform API, ששם השירות שלו הוא aiplatform.googleapis.com
    • צור Workload Identity Pool עם ספק GitHub OIDC שה-issuer שלו הוא https://token.actions.githubusercontent.com, והוסף תנאי attribute שמגביל את ה-pool למאגר שלך
    • צור חשבון שירות (service account) ייעודי עם התפקיד Vertex AI User בלבד, שהוא roles/aiplatform.user, ואפשר ל-pool להתחזות אליו (impersonate)

    רשום לפניך את שם המשאב המלא של הספק ואת כתובת האימייל של חשבון השירות. תוסיף אותם כסודות בשלב הבא.

    Microsoft Foundry: צור אפליקציית Microsoft Entra עם federated credential עבור המאגר שלך, בהתאם למדריך של Microsoft לאימות מתוך GitHub Actions:

    • רשום אפליקציית Microsoft Entra והוסף federated identity credential שנותן אמון בטוקנים ש-GitHub מנפיק למאגר שלך. אפשר להשתמש ב-user-assigned managed identity במקום באפליקציה. לשניהם יש את ה-client ID שתרשום להלן
    • הקצה לאפליקציה את התפקיד Azure AI User על גבי משאב ה-Foundry שלך. ראה תצורת Azure RBAC עבור תפקיד מותאם אישית מצומצם יותר

    רשום לפניך את ה-client ID של האפליקציה, את ה-tenant ID שלך, ואת ה-subscription ID שלך. תוסיף אותם כסודות בשלב הבא.

  3. הוספת סודות למאגר: במאגר שבו ה-Claude Code GitHub Action רץ, הוסף את הסודות עבור הספק שלך, בנוסף לשני סודות האפליקציה אם יצרת GitHub App מותאם אישית בשלב הראשון. ראה את המדריך של GitHub בנושא שימוש בסודות ב-GitHub Actions.

    סודנדרש עבורערך
    AWS_ROLE_TO_ASSUMEAmazon Bedrockה-ARN של תפקיד ה-IAM
    GCP_WORKLOAD_IDENTITY_PROVIDERGoogle Cloud's Agent Platformשם המשאב המלא של הספק
    GCP_SERVICE_ACCOUNTGoogle Cloud's Agent Platformכתובת האימייל של חשבון השירות
    AZURE_CLIENT_IDMicrosoft Foundryה-client ID של אפליקציית Entra
    AZURE_TENANT_IDMicrosoft Foundryה-tenant ID שלך ב-Microsoft Entra
    AZURE_SUBSCRIPTION_IDMicrosoft Foundryה-subscription ID שלך ב-Azure
    APP_IDGitHub App מותאם אישיתה-ID של ה-GitHub App
    APP_PRIVATE_KEYGitHub App מותאם אישיתהתוכן של קובץ המפתח הפרטי .pem
  4. יצירת קובץ ה-workflow: צור קובץ workflow עבור הספק שלך, כגון .github/workflows/claude.yml. כל דוגמה מגיבה לאזכורי @claude, מבצעת אימות מול GitHub באמצעות אפליקציה מותאמת אישית, וכוללת את ההרשאה id-token: write, ש-GitHub דורש כדי להנפיק את טוקן ה-OIDC שספק הענן שלך ממיר לפרטי אימות (credentials).

    אם בחרת בזהות GitHub שונה בשלב הראשון, התאם את הדוגמה:

    • Claude GitHub App הרשמי: מחק את השלב Generate GitHub App token ואת השורה github_token
    • הטוקן האוטומטי של GitHub: מחק את שלב יצירת הטוקן ושנה את שורת ה-github_token ל-github_token: ${{ secrets.GITHUB_TOKEN }}

    אזהרה: במאגרים ציבוריים, תגובה המכילה את ביטוי ההפעלה (trigger phrase) מכל משתמש מתחילה את ה-workflow הזה. שלבי ה-credentials רצים לפני שה-Claude Code GitHub Action בודק את הרשאת הכתיבה של כותב התגובה, כך שהפעולה דוחה משתמשים לא מורשים רק לאחר שה-workflow כבר יצר טוקן אפליקציה והתחבר לספק הענן שלך, דבר שמשאיר רשומות ב-audit log וצורך דקות של Actions. כדי להימנע מהרצות אלו, הוסף שלב שמאמת את הרשאת הכתיבה של כותב התגובה לפני שלבי ה-credentials.

    Amazon Bedrock: החלף את ערך ה-aws-region בערך שלך. שלב ה-credentials מייצא אותו כ-AWS_REGION עבור שאר ה-job.

    name: Claude PR Action
    
    permissions:
      contents: write
      pull-requests: write
      issues: write
      id-token: write
    
    on:
      issue_comment:
        types: [created]
      pull_request_review_comment:
        types: [created]
      issues:
        types: [opened]
    
    jobs:
      claude-pr:
        if: |
          (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
          (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
          (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
        runs-on: ubuntu-latest
        steps:
          - name: Checkout repository
            uses: actions/checkout@v6
    
          - name: Generate GitHub App token
            id: app-token
            uses: actions/create-github-app-token@v2
            with:
              app-id: ${{ secrets.APP_ID }}
              private-key: ${{ secrets.APP_PRIVATE_KEY }}
    
          - name: Configure AWS Credentials (OIDC)
            uses: aws-actions/configure-aws-credentials@v4
            with:
              role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
              aws-region: us-west-2
    
          - uses: anthropics/claude-code-action@v1
            with:
              github_token: ${{ steps.app-token.outputs.token }}
              use_bedrock: "true"
              claude_args: '--model us.anthropic.claude-sonnet-4-6'

    טיפ: מזהי מודלים ב-Bedrock כוללים קידומת פרופיל cross-region inference כגון us.. השתמש בקידומת המתאימה לקבוצת האזורים שבה הענקת גישה למודל.

    Google Cloud's Agent Platform: החלף את ערך ה-CLOUD_ML_REGION בערך שלך. אין צורך לקבוע את מזהה הפרויקט כערך קשיח (hardcode), מכיוון שה-workflow קורא אותו מהפלט של שלב ה-auth.

    name: Claude PR Action
    
    permissions:
      contents: write
      pull-requests: write
      issues: write
      id-token: write
    
    on:
      issue_comment:
        types: [created]
      pull_request_review_comment:
        types: [created]
      issues:
        types: [opened]
    
    jobs:
      claude-pr:
        if: |
          (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
          (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
          (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
        runs-on: ubuntu-latest
        steps:
          - name: Checkout repository
            uses: actions/checkout@v6
    
          - name: Generate GitHub App token
            id: app-token
            uses: actions/create-github-app-token@v2
            with:
              app-id: ${{ secrets.APP_ID }}
              private-key: ${{ secrets.APP_PRIVATE_KEY }}
    
          - name: Authenticate to Google Cloud
            id: auth
            uses: google-github-actions/auth@v2
            with:
              workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
              service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
    
          - uses: anthropics/claude-code-action@v1
            with:
              github_token: ${{ steps.app-token.outputs.token }}
              use_vertex: "true"
              claude_args: '--model claude-sonnet-5'
            env:
              ANTHROPIC_VERTEX_PROJECT_ID: ${{ steps.auth.outputs.project_id }}
              CLOUD_ML_REGION: us-east5

    Microsoft Foundry: החלף את your-resource-name בשם משאב ה-Foundry שלך. Claude Code בונה את כתובת ה-URL של ה-endpoint מתוכו. שלב ה-azure/login מתחבר באמצעות טוקן ה-OIDC של ה-workflow, ו-Claude Code אוסף את פרטי האימות דרך שרשרת האימות המוגדרת כברירת מחדל ב-Azure (default credential chain).

    name: Claude PR Action
    
    permissions:
      contents: write
      pull-requests: write
      issues: write
      id-token: write
    
    on:
      issue_comment:
        types: [created]
      pull_request_review_comment:
        types: [created]
      issues:
        types: [opened]
    
    jobs:
      claude-pr:
        if: |
          (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
          (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
          (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
        runs-on: ubuntu-latest
        steps:
          - name: Checkout repository
            uses: actions/checkout@v6
    
          - name: Generate GitHub App token
            id: app-token
            uses: actions/create-github-app-token@v2
            with:
              app-id: ${{ secrets.APP_ID }}
              private-key: ${{ secrets.APP_PRIVATE_KEY }}
    
          - name: Authenticate to Azure
            uses: azure/login@v2
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
          - uses: anthropics/claude-code-action@v1
            with:
              github_token: ${{ steps.app-token.outputs.token }}
              use_foundry: "true"
              claude_args: '--model claude-sonnet-5'
            env:
              ANTHROPIC_FOUNDRY_RESOURCE: your-resource-name

    טיפ: השתמש ב-ID של מודל שתואם לפריסת Claude במשאב ה-Foundry שלך. ראה Claude Code ב-Microsoft Foundry עבור הגדרת מודל והצמדת גרסאות (version pinning).

    בכל ספק, באפשרותך להגביל את אורך הריצה ואת העלות על ידי הוספת --max-turns לתוך claude_args. ראה ניהול עלויות.

  5. בדיקת ההגדרה: אזכר את @claude בתגובה על issue או PR, ולאחר מכן צפה בריצה בלשונית Actions של המאגר. Claude עונה בתגובה על אותו issue או PR.

#פתרון בעיות

ריצה שנכשלת נעצרת בדרך כלל באחד משני מקומות:

  • שגיאות אימות: לרוב מדובר בהגדרה שגויה של OIDC. ודא שה-workflow כולל את ההרשאה id-token: write, שתנאי המאגר בתצורת האמון תואם בדיוק למאגר שלך, וששמות הסודות ב-workflow שלך תואמים לאלה שהוספת
  • בעיות טריגר ו-CI: אלו מתנהגות באותו אופן כמו כאשר ה-Claude Code GitHub Action קורא ל-API של Claude. ראה את סעיף פתרון הבעיות בדף הראשי ואת ה-FAQ של Claude Code GitHub Action

#מה הלאה