Claude Code ב-CI/CD, code review ב-24/7 בלי bottleneck
אם אתה מפתח בסטארטאפ בתל אביב ויש לך 3 מפתחים שמגישים 20 PRs ביום, ה-bottleneck הוא תמיד אותו דבר: מי בודק? Claude Code שמחובר ל-GitHub Actions (או GitLab/CircleCI) פותר את זה, כל PR מקבל review אוטומטי תוך דקה, security scan, ולעיתים אפילו תיקון אוטומטי. החיסכון: כ-$24 לחודש לצוות של 10 מפתחים שמבצעים merge ל-20 PRs ביום (לפי Bill Prin, Medium מרץ 2026).
עדכון חשוב לאפריל 2026: מי שעדיין מריץ npx @anthropic-ai/claude-code ישירות ב-YAML משתמש בדפוס מיושן. הדרך הקנונית עכשיו היא ה-Action הרשמית anthropics/claude-code-action@v1 שיצא ל-GA ב-26.8.2025. ה-@beta הישן שבור.
הדפוס הקנוני, claude-code-action@v1
ה-Action החדשה מאחדת הכל ל-2 פרמטרים: prompt ו-claude_args. ה-mode נקבע אוטומטית, ו-custom_instructionsmax_turnsmodelallowed_tools, כולם זזו פנימה ל-claude_args.
# .github/workflows/claude-review.yml
name: Claude Code Review
on:
pull_request:
types: [opened, ready_for_review, synchronize]
permissions:
contents: read
pull-requests: write
id-token: write # ל-OIDC במקום static key
jobs:
review:
runs-on: ubuntu-latest
if: github.actor != 'dependabot[bot]'
steps:
- name: Harden Runner
uses: step-security/harden-runner@v2
with:
egress-policy: audit
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate App Token
id: app-token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ vars.CLAUDE_APP_ID }}
private-key: ${{ secrets.CLAUDE_APP_PRIVATE_KEY }}
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
github_token: ${{ steps.app-token.outputs.token }}
prompt: "בדוק את ה-PR לאיכות קוד, נכונות, ואבטחה. נתח רק קבצי .ts/.tsx/.py שהשתנו. פרסם ממצאים כ-review comments ממוקדים, לא סוקרני. עברית."
claude_args: "--max-turns 5 --model claude-sonnet-4-6"
Security, חובה אחרי CVE-2026-35022
ב-30-31 במרץ 2026 נחשפה דליפת source map של @anthropic-ai/claude-code v2.1.88 ובעקבותיה CVE-2026-35022 (CVSS 9.8), command injection דרך משתני סביבה ו-apiKeyHelper ב-.claude/settings.json. אחרי האירוע הזה, אלה כללי ברזל:
- אסור hardcoded API key ב-YAML. תמיד
${{ secrets.ANTHROPIC_API_KEY }}. עדיף עוד יותר: OIDC עם Workload Identity Federation דרך Bedrock או Vertex, אפס מפתחות סטטיים. - Custom GitHub App token במקום
GITHUB_TOKENברירת מחדל. הסיבה הטכנית: pushes שנעשים עם ה-token הדיפולטי לא מפעילים את ה-CI שוב, אז Claude יכול לדחוף קוד שבור בלי שאף בדיקה תרוץ עליו. - harden-runner של StepSecurity בכל job שרץ על PR, בעיקר אם השתמשת ב-
pull_request_target. fork זדוני יכול להחדיר workflow file שדולף את ה-API key. - פין את ה-CLI ל-2.1.x ה-patched ואת ה-Action ל-
@v1(טאג של Anthropic, לא SHA אקראי). - בלי
apiKeyHelperב-.claude/settings.jsonעל runners של CI, זה וקטור התקיפה הראשי של ה-CVE.
לא רק GitHub, GitLab ו-CircleCI גם first-class
אם אתה לא על GitHub, יש פתרונות רשמיים:
- GitLab CI/CD: תיעוד רשמי ב-
code.claude.com/docs/en/gitlab-ci-cd(GA אוגוסט 2025). יש גם fork קהילתיRealMikeChong/claude-code-for-gitlabל-self-hosted. - CircleCI: tutorial רשמי מפברואר 2026 שמשתמש ב-MCP server של CircleCI כדי ש-Claude יקרא state של ה-pipeline ויסביר כשלים.
Claude Code 2.x, subagents + hooks + Ralph loop
הדפוס הישן של "prompt CLI ענק שעושה הכל" מת ב-2.0 (29.9.2025). היום בונים אחרת: subagents מתמחים (code-reviewersecurity-auditordoc-writer) ש-hooks מפעילים על אירועי repo. ה-Stop hook למשל מפעיל אוטומטית את ה-code-reviewer subagent על הקבצים שהשתנו לפני סיום ה-job. וה-Ralph loop (run-and-loop until tests pass) הוא דפוס מתועד שמחליף את ה-monolithic prompt: Claude רץ, בודק tests, מתקן, ובודק שוב, עד שהכל ירוק.
זה אומר ש-CI שלך לא צריך להיות פסקה ענקית של הוראות, הוא צריך להיות trigger קצר שמפעיל subagent מתמחה.
השוואת שלבי pipeline
| שלב | כלי | תפקיד Claude | חוסם merge? |
|---|---|---|---|
| Lint | ESLint / Flake8 | לא נדרש | כן |
| Tests | Jest / pytest | ניתוח כשלים (subagent) | כן |
| Code Review | claude-code-action@v1 | security, bugs, איכות | לא (advisory) |
| Release Notes | cron + Opus 4.7 | changelog יומי | לא |
עלות, Haiku זה ברירת המחדל הנכונה
Bill Prin מסכם ב-Medium: "diff של 400 שורות עולה בדרך כלל מתחת ל-$0.05 ל-review. צוות של 10 מהנדסים שעושה merge ל-20 PRs ביום מוציא בערך $0.80 ביום, בערך $24 לחודש." זה עם Sonnet. עם Haiku אתה מוריד את זה פי 5. הכלל הפשוט: Haiku ל-review ראשון, Sonnet רק אם ה-PR מתויג security, ו-Opus 4.7 (1M context) רק ל-audit של ריפו שלם או לכתיבת prose איכותית כמו release notes.
ועוד שלוש אסטרטגיות חשובות: סנן את ה-diff לקבצי קוד בלבד (לא lockfiles), הגדר תמיד --max-turns 5 כדי שה-agent לא יכנס ללולאה אינסופית, והרץ lint/tests/Claude במקביל ולא סדרתית.
ניתוח test failures אוטומטי
בנוסף ל-review, אחד ה-use cases הכי שימושיים הוא triage של tests שנכשלו. במקום שמפתח יקרא 200 שורות של stack trace בערב שישי, Claude עושה את זה תוך 30 שניות:
- name: Triage Test Failures
if: failure()
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: "נתח את test-results.json. עבור כל כשל: סיבה בעברית, הקובץ שצריך לבדוק, ותיקון של שורה אחת. פרסם כ-comment ב-PR."
claude_args: "--max-turns 3 --model claude-haiku-4-5"
שים לב ל-if: failure(), ה-job רץ רק אם ה-tests נכשלו, אז אתה לא מבזבז קריאות API לחינם.
שאלות נפוצות שצצות אצל מי שמטמיע
- איך למנוע מ-Claude לרוץ על draft PRs? השתמש ב-
on: pull_request: types: [ready_for_review, synchronize]. מתעלם מ-drafts אוטומטית. - איך מגבילים אותו לקבצים מסוימים? שני שלבים: ב-prompt תכתוב במפורש ("רק קבצי .ts"), וב-
claude_argsהשתמש ב---allowedToolsכדי לחסום Bash אם לא צריך אותו. בנוסף,CLAUDE.mdבשורש הריפו מגדיר scope. - HIPAA/SOC2? הרץ דרך Bedrock (
use_bedrock: "true"+ OIDC role) או Vertex AI. אין מפתחות סטטיים, יש audit log מלא. - מה ההבדל בין claude-code-action ל-claude-code-base-action? ה-base הוא low-level, בלי GitHub App glue. ה-full הוא opinionated עם handling מלא של PRs/issues. ל-95% מהמקרים, תשתמש ב-full.
- איך Claude יכול לדחוף קומיטים שיפעילו את ה-CI שוב? רק עם custom GitHub App token. ה-
GITHUB_TOKENהדיפולטי לא מפעיל workflows recursively, מסיבת אבטחה של GitHub.
טעויות נפוצות שראיתי בקהילה
הטעות הכי שכיחה ששמעתי בקהילה: "@claude לא מגיב על PRs מ-forks", זה לא bug, זו תכונת אבטחה של GitHub שחוסמת גישה ל-secrets מ-forks. ה-workaround הוא pull_request_target עם path filters קפדניים, אבל זה וקטור supply-chain מסוכן וצריך harden-runner. הטעות השנייה: לשלוח את כל ה-codebase ל-Claude בכל PR, token blowup ועלות מיותרת. תמיד סנן ל-git diff -- '*.ts' '*.tsx'. הטעות השלישית: לשכוח --max-turns ולגלות בסוף החודש שה-agent נכנס ללולאה ושרף $200 על PR אחד. תמיד --max-turns 5 ל-review, --max-turns 3 ל-triage.
ועוד תובנה חדה מ-Daniel Weinshenker (Medium מרץ 2026): "While Claude codes incredibly fast, it still hallucinates and makes mistakes... having Claude create PRs without verifying they don't break anything wasn't actually useful." המסקנה: Claude כ-reviewer מצוין, Claude כ-author דורש hooks של verification (Ralph loop) לפני merge.
