Generowanie pipeline
Twórz kompletne konfiguracje CI/CD z opisów
Nowoczesny rozwój oprogramowania wymaga zautomatyzowanych pipeline, które budują, testują i wdrażają kod niezawodnie. Ta lekcja pokazuje, jak możliwości AI Cursor mogą pomóc projektować, implementować i utrzymywać zaawansowane przepływy pracy CI/CD, które zazwyczaj wymagałyby ekspertyzy DevOps.
AI Cursor rozumie popularne platformy CI/CD, ich języki konfiguracji i najlepsze praktyki. Może generować konfiguracje pipeline, debugować awarie i sugerować optymalizacje oparte na potrzebach twojego projektu.
Generowanie pipeline
Twórz kompletne konfiguracje CI/CD z opisów
Automatyzacja testów
Generuj kompleksowe zestawy testów i strategie
Skrypty wdrażania
Buduj automatyzację wdrażania dla każdej platformy
Konfiguracja monitorowania
Konfiguruj monitorowanie pipeline i alertowanie
# Prompt agenta:"Utwórz workflow GitHub Actions dla aplikacji Node.js z:- Budowaniem i testowaniem na wielu wersjach Node- Raportowaniem pokrycia kodu- Budowaniem obrazów Docker- Wdrażaniem na AWS ECS- Powiadomieniami Slack"
# Prompt agenta:"Wygeneruj pipeline GitLab CI z:- Równoległym wykonywaniem testów- Cache warstw Docker- Wdrażaniem na Kubernetes- Konfiguracjami specyficznymi dla środowiska- Ręcznym zatwierdzaniem dla produkcji"
// Prompt agenta:"Utwórz Jenkinsfile z:- Deklaratywna składnia pipeline- Agenci Docker dla buildów- Kompatybilność z Blue Ocean- Użycie bibliotek współdzielonych- Powiadomienia po buildzie"
Zbudujmy gotowy do produkcji pipeline CI/CD dla aplikacji full-stack:
Utwórz strukturę workflow
@.github/workflowsUtwórz kompleksowy workflow GitHub Actions:- Wyzwalaj na push do main i PR- Uruchom linting, testowanie i sprawdzenia bezpieczeństwa- Buduj obrazy Docker z cache'owaniem- Wdrażaj na staging automatycznie- Wdrażaj na produkcję z zatwierdzeniem
Cursor generuje kompletny workflow
name: Pipeline CI/CD
on: push: branches: [main, develop] pull_request: branches: [main]
env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }}
jobs: lint-and-test: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x, 20.x]
steps: - uses: actions/checkout@v4
- name: Konfiguracja Node.js uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm'
- name: Instalacja zależności run: npm ci
- name: Uruchom linting run: npm run lint
- name: Uruchom testy run: npm test -- --coverage
- name: Prześlij pokrycie uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }}
Dodaj skanowanie bezpieczeństwa
security: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- name: Uruchom audyt bezpieczeństwa run: npm audit --production
- name: Uruchom skan SAST uses: github/super-linter@v5 env: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-and-push: needs: [lint-and-test, security] runs-on: ubuntu-latest permissions: contents: read packages: write
steps: - uses: actions/checkout@v4
- name: Konfiguracja Docker Buildx uses: docker/setup-buildx-action@v3
- name: Logowanie do rejestru kontenerów uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Wyciągnij metadane id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=branch type=ref,event=pr type=semver,pattern={{version}} type=sha,prefix={{branch}}-
- name: Buduj i wypchnij obraz Docker uses: docker/build-push-action@v5 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max
deploy-staging: needs: build-and-push runs-on: ubuntu-latest environment: staging
steps: - name: Konfiguracja poświadczeń AWS uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1
- name: Wdrażanie na ECS run: | aws ecs update-service \ --cluster staging-cluster \ --service my-app-service \ --force-new-deployment
deploy-k8s: needs: build-and-push runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4
- name: Konfiguracja kubectl uses: azure/setup-kubectl@v3
- name: Wdrażanie na Kubernetes run: | kubectl set image deployment/my-app \ my-app=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} kubectl rollout status deployment/my-app
Poproś Cursor o implementację złożonych strategii macierzowych:
Utwórz build macierzowy który testuje:- Wiele OS (Ubuntu, Windows, macOS)- Wiele wersji Node (16, 18, 20)- Wiele wersji bazy danych (PostgreSQL 12, 13, 14)- Pomiń niekompatybilne kombinacje
test-suite: runs-on: ubuntu-latest strategy: matrix: test-group: [unit, integration, e2e]
steps: - name: Uruchom testy ${{ matrix.test-group }} run: npm run test:${{ matrix.test-group }}
deploy-production: if: github.ref == 'refs/heads/main' && github.event_name == 'push' needs: [deploy-staging] environment: name: production url: https://app.example.com
steps: - name: Czekaj na zatwierdzenie uses: trstringer/manual-approval@v1 with: approvers: tech-lead,devops-team
Użyj Cursor do wygenerowania kompletnej strategii testowania:
Testy jednostkowe
Wygeneruj testy jednostkowe z:- Minimum 80% pokrycia kodu- Mock zewnętrznych zależności- Testuj przypadki brzegowe- Benchmarki wydajności
Testy integracji
Utwórz testy integracji:- Testuj endpointy API- Operacje bazodanowe- Integracje zewnętrznych serwisów- Użyj kontenerów testowych
Testy End-to-End
Implementuj testy E2E:- Użyj Playwright/Cypress- Testuj krytyczne przepływy użytkowników- Testowanie cross-browser- Testy regresji wizualnej
Implementuj wdrażanie blue-green w GitHub Actions:1. Wdróż na środowisko green2. Uruchom testy smoke3. Przełącz load balancer na green4. Zachowaj blue do rollback5. Wyczyść stare blue po sukcesie
canary-deploy: steps: - name: Wdróż canary run: | kubectl set image deployment/my-app-canary \ my-app=${{ env.NEW_IMAGE }}
- name: Monitoruj metryki run: | ./scripts/check-canary-metrics.sh
- name: Stopniowy rollout run: | for percent in 10 25 50 100; do kubectl patch deployment my-app \ -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":"'$percent'%"}}}}' sleep 300 ./scripts/check-health.sh || exit 1 done
Zintegruj flagi funkcji z CI/CD:- Użyj LaunchDarkly/Unleash- Wdrażaj kod z wyłączonymi flagami- Stopniowo włączaj funkcje- Monitoruj metryki per funkcja- Automatyczny rollback przy błędach
Implementuj cache’owanie
- name: Cache zależności uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
Użyj cache warstw Docker
- name: Buduj z cache uses: docker/build-push-action@v5 with: cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache,mode=max
Równolegalizuj niezależne zadania
jobs: test: # Uruchamia się natychmiast security-scan: # Uruchamia się równolegle z test build: needs: [test, security-scan] # Czeka na oba
Poproś Cursor o optymalizację kosztów CI/CD:
Optymalizuj GitHub Actions pod kątem kosztów:- Używaj większych runnerów tylko gdy potrzeba- Implementuj timeouty zadań- Pomijaj niezmienione komponenty- Użyj warunkowych workflow- Archiwizuj stare artefakty
- name: Wyślij metryki do DataDog if: always() run: | curl -X POST "https://api.datadoghq.com/api/v1/series" \ -H "Content-Type: application/json" \ -H "DD-API-KEY: ${{ secrets.DD_API_KEY }}" \ -d @- <<EOF { "series": [{ "metric": "ci.pipeline.duration", "points": [[${{ steps.timer.outputs.time }}, ${{ steps.timer.outputs.duration }}]], "tags": ["pipeline:${{ github.workflow }}", "status:${{ job.status }}"] }] } EOF
- name: Powiadom Slack if: failure() uses: slackapi/slack-github-action@v1 with: payload: | { "text": "Wdrażanie nie powiodło się!", "blocks": [{ "type": "section", "text": { "type": "mrkdwn", "text": "❌ *${{ github.workflow }}* nie powiódł się\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}" } }] } env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
- name: Wyślij powiadomienie email if: failure() uses: dawidd6/action-send-mail@v3 with: server_address: smtp.gmail.com server_port: 465 username: ${{ secrets.EMAIL_USERNAME }} password: ${{ secrets.EMAIL_PASSWORD }} subject: Build nie powiódł się - ${{ github.repository }} body: | Build nie powiódł się dla ${{ github.workflow }} Commit: ${{ github.sha }} Autor: ${{ github.actor }}
Implementuj bezpieczną obsługę sekretów:1. Użyj GitHub Secrets dla wrażliwych danych2. Regularnie rotuj sekrety3. Użyj OIDC dla autoryzacji chmury4. Implementuj dostęp z najmniejszymi uprawnieniami5. Audytuj użycie sekretów
- name: Wygeneruj SBOM uses: anchore/sbom-action@v0 with: output-file: sbom.spdx.json
- name: Podpisz obraz kontenera uses: sigstore/cosign-installer@v3 run: | cosign sign --yes \ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build.outputs.digest }}
Użyj Cursor do diagnozowania awarii pipeline:
Mój workflow GitHub Actions kończy się niepowodzeniem z "Error: Process completed with exit code 1"Pomóż mi debugować przez:1. Dodanie szczegółowego logowania2. Sprawdzenie zmiennych środowiskowych3. Walidację uprawnień plików4. Testowanie lokalnie z act
# Testuj GitHub Actions lokalnieact -j build --secret-file .env.secrets
# Debuguj określone zadanieact -j test --verbose
# Użyj określonego obrazu Dockeract -j deploy --platform ubuntu-latest=nektos/act-environments-ubuntu:18.04
Utwórz CI/CD dla monorepo z:- Wykrywaniem zmienionych pakietów- Uruchamianiem testów tylko dla dotkniętego kodu- Budowaniem i wdrażaniem zmienionych serwisów- Współdzielonym cache'owaniem zależności- Równoległym wykonywaniem per pakiet
ios-build: runs-on: macos-latest steps: - uses: actions/checkout@v4
- name: Konfiguracja Xcode uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: latest-stable
- name: Buduj i testuj run: | xcodebuild test \ -scheme MyApp \ -destination 'platform=iOS Simulator,name=iPhone 14'
- name: Prześlij do TestFlight run: | xcrun altool --upload-app \ -f MyApp.ipa \ -u ${{ secrets.APPLE_ID }} \ -p ${{ secrets.APP_PASSWORD }}
Zachowaj wszystkie konfiguracje pipeline w repozytorium dla śledzenia i możliwości rollback.
Użyj Cursor do tworzenia szablonów workflow wielokrotnego użytku i akcji kompozytowych.
Uporządkuj zadania, aby łapać awarie wcześnie i oszczędzać zasoby obliczeniowe.
Poproś Cursor o wygenerowanie dokumentacji dla złożonej logiki pipeline.
Śledź metryki pipeline, koszty i trendy wydajności.
Kluczowe metryki do śledzenia:
Po opanowaniu CI/CD z Cursor:
Pamiętaj: Cursor nie tylko pomaga pisać konfiguracje pipeline—pomaga zrozumieć wzorce CI/CD i najlepsze praktyki, które tworzą niezawodne, efektywne systemy dostarczania oprogramowania.