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

תיעוד 38

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

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

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

[!NOTE]

הדף הזה נשען על הגדרת 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"
  • Agent Platform של Google Cloud: use_vertex: "true"
  • Microsoft Foundry: use_foundry: "true"

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

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

לפני שמתחילים, צריך:

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

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

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

1. בחירת זהות GitHub

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

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

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

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

  • Contents: קריאה וכתיבה
  • Issues: קריאה וכתיבה
  • Pull requests: קריאה וכתיבה

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

2. הגדרת אימות ענן

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

Amazon Bedrock

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

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

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

Agent Platform של Google Cloud

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

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

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

Microsoft Foundry

צרו יישום Microsoft Entra עם אישור federated למאגר שלכם, לפי מדריך Microsoft לאימות מ-GitHub Actions:

  • רשמו יישום Microsoft Entra והוסיפו אישור זהות federated שסומך על אסימונים ש-GitHub מנפיק למאגר שלכם. זהות מנוהלת שהוקצתה למשתמש עובדת במקום יישום. לשניהם יש את ה-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_PROVIDERAgent Platform של Google Cloudשם המשאב המלא של הספק
GCP_SERVICE_ACCOUNTAgent Platform של Google Cloudכתובת הדוא"ל של חשבון השירות
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 שספק הענן שלכם מחליף באישורים.

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

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

[!WARNING]

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

Amazon Bedrock

החליפו את ערך aws-region בערך שלכם. שלב האישורים מייצא אותו כ-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'

[!TIP]

מזהי מודל של Bedrock כוללים קידומת של פרופיל הסקה בין אזורים כמו us.. השתמשו בקידומת של קבוצת האזורים שבה הענקתם גישה למודל.

Agent Platform של Google Cloud

החליפו את ערך CLOUD_ML_REGION בערך שלכם. אין צורך לקבע בקוד את מזהה הפרויקט, כי ה-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 בונה ממנו את כתובת ה-endpoint. שלב azure/login מתחבר עם אסימון ה-OIDC של ה-workflow, ו-Claude Code קולט את האישורים דרך שרשרת ברירת המחדל של האישורים של Azure.

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

[!TIP]

השתמשו במזהה מודל שתואם לפריסת Claude במשאב ה-Foundry שלכם. ראו Claude Code ב-Microsoft Foundry להגדרת מודל ולנעיצת גרסה.

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

5. בדיקת ההגדרה

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

#פתרון בעיות

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

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

#מה הלאה