Her dağıtım hattı tekrarlayan görevler içerir: değişiklik günlüklerini doğrulamak, API'deki bozucu değişiklikleri kontrol etmek, sürüm notları oluşturmak ve çoklu hizmet geri alımlarını koordine etmek. Claude Code, bu manuel kontrol noktalarını doğrudan CI/CD ortamınızda çalışan otomatik, akıllı koruyuculara dönüştürür. Kırılgan bash betikleri yazmak yerine, kod tabanınızı, API sözleşmelerinizi ve dağıtım geçmişinizi anlayan bir akıl yürütme aracısı elde edersiniz.
Claude Code Neden CI/CD Hattınızda Olmalı?
Geleneksel CI/CD betikleri deterministiktir ancak akılsızdır. Sürüm artışları için grep, değişiklik tespiti için git diff ve API doğrulaması için statik regex çalıştırırlar. Ekibiniz bir monorepo'yu yeniden düzenlediğinde veya yeni bir mikro hizmet tanıttığında, bu betikler sessizce bozulur. Claude Code anlamsal anlayış getirir: bozucu bir değişikliğin ne olduğunu bilir, içe aktarma yollarından hizmet bağımlılıklarını çıkarabilir ve bağlamsal dağıtım planları oluşturur.
Entegrasyon deseni basittir: Claude Code'u hattınızda kapsayıcılı bir adım olarak çalıştırın, ortam değişkenleri aracılığıyla ona bağlam sağlayın ve doğrula, oluştur veya koordine et yeteneklerini yürütmesini sağlayın. Aracı, sonraki CI adımlarının üzerinde işlem yapabileceği yapılandırılmış JSON döndürür—derlemeyi başarısız kılma, bir canary dağıtımı tetikleme veya Slack'e bir uyarı gönderme gibi.
Geliştirici Ekibinizin maksimum üretkenlikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?
Apidog tüm taleplerinizi karşılar ve Postman'ı çok daha uygun bir fiyata değiştirir!
CI/CD Ortamlarında Claude Code Kurulumu
Kapsayıcı Yapılandırması
Claude Code'u minimum ek yük ile bir Docker kapsayıcısında çalıştırın:
# Dockerfile.claude-cicd
FROM node:20-alpine
# Install Claude Code CLI
RUN npm install -g @anthropic-ai/claude-code
# Set working directory
WORKDIR /workspace
# Copy project files
COPY . .
# Set environment variables for non-interactive mode
ENV ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY}"
ENV CLAUDE_CODE_CI_MODE=true
ENV CLAUDE_CODE_QUIET=true
# Default command runs a skill
ENTRYPOINT ["claude"]
Yerel olarak derleyin ve test edin:
docker build -f Dockerfile.claude-cicd -t claude-cicd .
docker run -e ANTHROPIC_API_KEY=sk-ant-... claude-cicd --help

GitHub Actions Entegrasyonu
Belirli doğrulama görevleri için Claude Code'u çağıran yeniden kullanılabilir bir iş akışı oluşturun:
# .github/workflows/claude-validation.yml
name: Claude Code Validation
on:
workflow_call:
inputs:
skill_name:
required: true
type: string
parameters:
required: false
type: string
default: '{}'
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Full history for change analysis
- name: Run Claude Code Skill
uses: docker://claude-cicd:latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
args: |
--skill "${{ inputs.skill_name }}" \
--params '${{ inputs.parameters }}' \
--output /workspace/claude-output.json
- name: Parse Claude Output
id: parse
run: |
echo "claude_result=$(cat /workspace/claude-output.json)" >> $GITHUB_OUTPUT
- name: Fail on Breaking Changes
if: fromJson(steps.parse.outputs.claude_result).hasBreakingChanges
run: |
echo "Breaking changes detected: ${{ fromJson(steps.parse.outputs.claude_result).details }}"
exit 1
Bu iş akışını ana CI hattınızdan çağırın:
# .github/workflows/ci.yml
jobs:
check-breaking-changes:
uses: ./.github/workflows/claude-validation.yml
with:
skill_name: "api-breaking-change-detector"
parameters: '{"baseBranch": "main", "changedFiles": "${{ needs.changes.outputs.changed_files }}"}'
GitLab CI Entegrasyonu
GitLab’ın `script` blokları, Claude Code çağrısını kolaylaştırır:
# .gitlab-ci.yml
stages:
- validate
- test
- deploy
claude:validate:api:
stage: validate
image: claude-cicd:latest
variables:
ANTHROPIC_API_KEY: $ANTHROPIC_API_KEY
script:
- claude --skill api-breaking-change-detector
--params "{\"baseBranch\": \"$CI_DEFAULT_BRANCH\", \"changedFiles\": \"$CI_COMMIT_CHANGED_FILES\"}"
--output claude-output.json
- |
if jq -e '.hasBreakingChanges' claude-output.json > /dev/null; then
echo "Breaking API changes detected: $(jq -r '.details' claude-output.json)"
exit 1
fi
artifacts:
reports:
dotenv: claude-output.env
paths:
- claude-output.json
`artifacts` bölümü, Claude'un çıktısını sonraki işler için yakalar ve koşullu dağıtım mantığını etkinleştirir.

CI/CD'ye Özgü Bir Claude Code Yeteneği Oluşturma
Hat Görevleri için Yetenek Yapısı
Bir CI/CD yeteneği üç bileşene ihtiyaç duyar:
- Değişiklik tespiti: git diff, commit mesajları veya birleştirme isteği farklılıklarını analiz edin
- Doğrulama mantığı: İş kurallarını uygulayın (API sürümü oluşturma, test kapsamı, güvenlik taraması)
- Eylem oluşturma: Hat komutları veya başarısızlık nedenleri üretin
Yetenek tanımını oluşturun:
mkdir -p ~/claude-skills/api-breaking-change-detector
cd ~/claude-skills/api-breaking-change-detector
SKILL.md Tanımı
---
name: api-breaking-change-detector
description: OpenAPI belirtimlerinde ve TypeScript türlerinde bozucu API değişikliklerini algılar
version: 1.0.0
author: CI/CD Ekibi
mcp:
transport: stdio
tools:
detect-openapi-changes:
description: İki OpenAPI belirtimini karşılaştırır ve bozucu değişiklikleri tanımlar
parameters:
baseSpec:
type: string
description: Temel OpenAPI YAML/JSON dosyası yolu
required: true
headSpec:
type: string
description: Başlangıç OpenAPI YAML/JSON dosyası yolu
required: true
strictMode:
type: boolean
description: İsteğe bağlıdan gerekliye dönüşen değişiklikleri bozucu olarak ele alın
default: true
detect-typescript-changes:
description: Bozucu değişiklikler için TypeScript arayüzlerini karşılaştırır
parameters:
baseFiles:
type: array
items: { type: string }
description: Temel TypeScript dosyaları için glob deseni
required: true
headFiles:
type: array
items: { type: string }
description: Başlangıç TypeScript dosyaları için glob deseni
required: true
---
# API Bozucu Değişiklik Dedektörü Yeteneği
Bu yetenek, tüketicileri bozabilecek değişiklikleri belirlemek için API sözleşmelerini ve tür tanımlarını analiz eder.
## Kullanım Örnekleri
### OpenAPI Karşılaştırması
```bash
# In CI pipeline
claude --skill api-breaking-change-detector
--tool detect-openapi-changes
--params '{"baseSpec": "openapi/base.yaml", "headSpec": "openapi/head.yaml"}'
TypeScript Karşılaştırması
claude --skill api-breaking-change-detector
--tool detect-typescript-changes
--params '{"baseFiles": ["src/types/v1/*.ts"], "headFiles": ["src/types/v2/*.ts"]}'
Dönüş Biçimi
{
"hasBreakingChanges": true,
"details": [
{
"type": "field_removed",
"location": "User.email",
"severity": "breaking"
}
],
"recommendations": [
"Alanın kaldırılmasını geri alın veya @deprecated işaretleyicisi ekleyin"
]
}
Uygulama Mantığı
`index.ts` oluşturun:
import { z } from 'zod';
import { parseOpenAPI } from './openapi-parser';
import { parseTypeScript } from './typescript-parser';
import { diffSchemas } from './diff-engine';
const OpenAPIParams = z.object({
baseSpec: z.string(),
headSpec: z.string(),
strictMode: z.boolean().default(true)
});
const TypeScriptParams = z.object({
baseFiles: z.array(z.string()),
headFiles: z.array(z.string())
});
export const tools = {
'detect-openapi-changes': async (params: unknown) => {
const { baseSpec, headSpec, strictMode } = OpenAPIParams.parse(params);
const base = await parseOpenAPI(baseSpec);
const head = await parseOpenAPI(headSpec);
const changes = diffSchemas(base, head, { strict: strictMode });
return {
hasBreakingChanges: changes.breaking.length > 0,
details: changes.breaking,
recommendations: generateRecommendations(changes)
};
},
'detect-typescript-changes': async (params: unknown) => {
const { baseFiles, headFiles } = TypeScriptParams.parse(params);
const base = await parseTypeScript(baseFiles);
const head = await parseTypeScript(headFiles);
const changes = diffSchemas(base, head);
return {
hasBreakingChanges: changes.breaking.length > 0,
details: changes.breaking,
recommendations: generateRecommendations(changes)
};
}
};
function generateRecommendations(changes: any) {
return changes.breaking.map((change: any) => {
switch (change.type) {
case 'field_removed':
return `Alan ${change.location} kaldırıldı. Önce @deprecated ekleyin, ardından sonraki ana sürümde kaldırın.`;
case 'type_changed':
return `${change.location} türü değiştirildi. Yeni türle yeni bir alan eklemeyi düşünün.`;
default:
return `Değişikliği inceleyin: ${JSON.stringify(change)}`;
}
});
}
Temel içgörü: Claude Code sadece metin döndürmez; CI sistemlerinin ayrıştırabileceği ve üzerinde işlem yapabileceği yapılandırılmış veri döndürür.
Claude Code ile Pratik CI/CD İş Akışları
İş Akışı 1: Akıllı Test Çalıştırıcı
Her commit'te tüm testleri çalıştırmak yerine, yalnızca değiştirilen dosyalardan etkilenen testleri çalıştırın.
# .github/workflows/intelligent-tests.yml
jobs:
determine-tests:
runs-on: ubuntu-latest
outputs:
test-matrix: ${{ steps.claude.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- id: claude
run: |
CHANGED_FILES=$(git diff --name-only HEAD~1)
echo "changed_files=$CHANGED_FILES" >> $GITHUB_OUTPUT
MATRIX=$(claude --skill test-selector \
--params "{\"changedFiles\": \"$CHANGED_FILES\", \"testPattern\": \"**/*.test.ts\"}" \
--output - | jq -c '.testMatrix')
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
run-tests:
needs: determine-tests
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.determine-tests.outputs.test-matrix) }}
steps:
- uses: actions/checkout@v4
- run: npm test ${{ matrix.testFile }}
`test-selector` yeteneği, içe aktarmaları eşlemek ve değiştirilen kodu hangi testlerin kapsadığını belirlemek için statik analiz kullanır.
İş Akışı 2: Otomatik Sürüm Notları Oluşturma
Standart commit mesajına dayalı değişiklik günlükleri bağlamı kaçırır. Claude Code, PR açıklamalarını, kod değişikliklerini ve sorun referanslarını analiz eder:
# .github/workflows/release.yml
jobs:
generate-notes:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate Release Notes
run: |
claude --skill release-notes-generator \
--params "{\"fromTag\": \"${{ github.event.inputs.fromTag }}\", \"toTag\": \"${{ github.event.inputs.toTag }}\"}" \
--output release-notes.md
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
body_path: release-notes.md
tag_name: ${{ github.event.inputs.toTag }}
Yetenek, geçiş kılavuzlarıyla birlikte açıklayıcı sürüm notları üretmek için commit mesajlarını, farklılıkları ve bağlantılı sorunları okur.
İş Akışı 3: Güvenlik Taraması Orkestrasyonu
Birden fazla güvenlik aracını çalıştırın ve Claude Code'un bulguları önceliklendirmesini sağlayın:
# .gitlab-ci.yml
security-scan:
stage: validate
script:
- trivy image --format json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA > trivy.json
- sonar-scanner -Dsonar.analysis.mode=preview > sonar.json
- claude --skill security-triage \
--params "{\"trivyReport\": \"trivy.json\", \"sonarReport\": \"sonar.json\"}" \
--output triage-result.json
- |
if jq -e '.criticalIssues > 0' triage-result.json; then
echo "Critical security issues found"
exit 1
fi
artifacts:
reports:
security: triage-result.json
Claude Code, bulguları ilişkilendirir, tekrarları ortadan kaldırır ve sömürülebilirlik durumuna göre önceliklendirir, böylece gürültüyü %80 azaltır.
İş Akışı 4: Kanarya Dağıtımı Koordinasyonu
Birden fazla hizmette kanarya dağıtımını koordine edin:
// skills/canary-deployment/index.ts
export const tools = {
'plan-canary': async (params: unknown) => {
const { services, trafficSplit } = params;
// Mevcut durum için hizmet ağını sorgula
const meshState = await $fetch('http://mesh-api.internal/state');
// Dağıtım sırasını oluştur
const plan = services.map(service => ({
service,
traffic: meshState[service].traffic * trafficSplit,
healthChecks: [
`/health/${service}`,
`/metrics/${service}/error-rate`
],
rollbackThreshold: 0.05 // %5 hata oranı geri almayı tetikler
}));
return { plan, estimatedDuration: `${services.length * 5} dakika` };
},
'execute-canary': async (params: unknown) => {
const { plan } = params;
for (const step of plan) {
await $fetch(`http://mesh-api.internal/traffic/${step.service}`, {
method: 'POST',
body: { traffic: step.traffic }
});
// Sağlık kontrollerini bekle
const healthy = await waitForHealth(step.healthChecks, 30);
if (!healthy) {
throw new Error(`Hizmet ${step.service} sağlık kontrollerinde başarısız oldu`);
}
}
return { success: true, servicesUpdated: plan.length };
}
};
CI hattı `plan-canary`'yi çağırır, planı inceler, ardından manuel onay kapılarıyla `execute-canary`'yi çağırır.
Gizli Bilgileri ve İzinleri Yönetme
Gizli Bilgi Yönetimi
API anahtarlarını yetenek koduna asla sabit kodlamayın. CI sistemi gizli bilgilerini kullanın:
# GitHub Actions
- name: Claude'u Gizli Bilgilerle Çalıştır
run: claude --skill deploy-skill
env:
DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
# Yetenekte
const deployToken = process.env.DEPLOY_TOKEN;
if (!deployToken) throw new Error('DEPLOY_TOKEN ayarlanmadı');
En Az Ayrıcalık
Claude Code'u minimum izinlerle çalıştırın. GitLab'da:
# .gitlab-ci.yml
claude-job:
script: ...
before_script:
- export ANTHROPIC_API_KEY=${CI_JOB_TOKEN_LIMITED}
variables:
GIT_STRATEGY: fetch # Push erişimi yok
CLAUDE_CODE_READONLY: true
Bu, Claude'un yanlışlıkla commit'leri göndermesini veya dalları silmesini önler.
İzleme ve Gözlemlenebilirlik
Claude Code Kararlarını Günlüğe Kaydetme
Denetim izleri için akıl yürütmeyi yakalayın:
// Yetenek uygulamasında
export const tools = {
'deploy-service': async (params) => {
const reasoning = [];
reasoning.push(`Commit ${params.commitHash} analiz ediliyor`);
const risk = await assessRisk(params.commitHash);
reasoning.push(`Risk seviyesi: ${risk.level}`);
if (risk.level === 'high') {
reasoning.push('Dağıtım engellendi: Yüksek risk tespit edildi');
return { approved: false, reasoning };
}
reasoning.push('Dağıtım onaylandı: Tüm kontroller geçti');
return { approved: true, reasoning };
}
};
Günlükleri gözlemlenebilirlik platformunuzda saklayın:
# Log to Loki/Elasticsearch
- run: |
claude --skill deploy-service ... | \
jq -c '{level: "info", message: "Claude decision", data: .}' | \
promtail --client.url=http://loki:3100/loki/api/v1/push
İzlenecek Metrikler
- Çağrı sayısı: Her yeteneğin ne sıklıkla çalıştığı
- Başarı oranı: Başarılı yürütmelerin yüzdesi
- Token kullanımı: CI işi başına maliyet
- Karar dağıtımı: Kaç derlemenin engellendiği ve kaçının onaylandığı
CI/CD Entegrasyonu Sorun Giderme
Sorun: Claude Code Donuyor
Neden: Etkileşimli istemleri bekliyor.
Düzeltme: `--quiet` ve `--non-interactive` bayraklarını kullanın:
claude --quiet --non-interactive --skill your-skill --params '{}'
Sorun: MCP Sunucusu Kapsayıcıda Başlatılamıyor
Neden: Eksik bağımlılıklar veya yanlış Node sürümü.
Düzeltme: Özel bir imaj oluşturun:
FROM node:20-alpine
WORKDIR /skill
COPY package*.json ./
RUN npm ci --only=production
COPY dist ./dist
CMD ["node", "dist/server.js"]
Sorun: Anthropic Tarafından Hız Sınırlaması
Neden: Paralel işlerde çok fazla API çağrısı.
Düzeltme: İstek kuyruğu uygulayın:
import PQueue from 'p-queue';
const queue = new PQueue({ concurrency: 1 });
export const tools = {
'safe-api-call': async (params) => {
return queue.add(async () => {
return await callAnthropicAPI(params);
});
}
};
Sorun: Yetenekler Bulunamadı
Neden: MCP yapılandırmasında göreli yollar.
Düzeltme: Mutlak yollar kullanın ve CI'da yetenekler deposunu çıkarın:
- uses: actions/checkout@v4
with:
repository: your-org/claude-skills
path: .claude-skills
- run: |
echo "{
\"mcpServers\": {
\"api-validator\": {
\"command\": \"node\",
\"args\": [\"$PWD/.claude-skills/api-validator/dist/index.js\"]
}
}
}" > ~/.config/claude-code/config.json
Sonuç
CI/CD hatlarındaki Claude Code, otomasyonu katı betiklerden kod tabanınızı, mimarilerinizi ve iş kurallarınızı anlayan akıllı aracılara kaydırır. Claude'u kapsayıcı hale getirerek, özel yetenekler tanımlayarak ve GitHub Actions veya GitLab CI ile entegre ederek, yeniden düzenlemeye uyum sağlayan, ince bozucu değişiklikleri yakalayan ve eyleme dönüştürülebilir içgörüler üreten hatlar oluşturursunuz. Tek bir yetenekle—API bozucu değişiklik tespiti—başlayın ve ekibiniz otomasyona güvendikçe genişletin. Yetenek geliştirmeye yapılan ön yatırım, azaltılmış manuel inceleme süresi ve daha az üretim olayı sayesinde kazanç sağlar.
Yetenekleriniz dahili API'lerle etkileşime girdiğinde, AI odaklı hatlarınızın kararsızlık kaynağı olmamasını sağlamak için bu sözleşmeleri Apidog ile doğrulayın.
