פריסה ידנית היא הגורם המוביל לתקלות ייצור. צוותים המשתמשים ב-CI/CD נתקלים בבעיות בתדירות נמוכה פי שלושה, ומחצית מהכשלים נובעים מטעויות אנוש: מיגרציות שנשכחו, ענף שגוי שנדחף, שלבי בנייה חסרים. אנו מגדירים GitLab CI/CD כדי להפוך את ה-pipeline שלך לאוטומטי ולהבטיח תוצאות ניתנות לשחזור. Pipeline כקוד מתואר ב-.gitlab-ci.yml: שלבים לבדיקות, בנייה ופריסה עם caching ומשתני סביבה. לאחר ההתקנה, שחרור אורך 5 דקות במקום 30, ושגיאות הפריסה יורדות ב-90%. במאמר זה, אנו מפרקים תצורה אמיתית לפרויקט web טיפוסי: מ-pipeline בסיסי ועד בניות Docker ו-Review Apps. חיסכון בתקציב תשתית של עד 25%, וזמן שחרור מופחת בעד 80%.
האנטומיה של Pipeline בסיסי ב-GitLab CI/CD
ה-pipeline נמצא ב-.gitlab-ci.yml בשורש המאגר. הוא מגדיר שלבים: test, build, deploy. GitLab.com מציע runners משותפים; עבור on-premise, אנו פורסים runners מתארחים עצמית על החומרה שלך. עבור פרויקט Laravel, אנו משתמשים בתמונת PHP עם שירות PostgreSQL. caching של תלויות (stages: - test - build - deploy variables: NODE_VERSION: "20" cache: key: files: - package-lock.json paths: - node_modules/ test: stage: test image: node:20-alpine script: - npm ci - npm run lint - npm test build: stage: build image: node:20-alpine script: - npm ci - npm run build artifacts: paths: - dist/ expire_in: 1 hour deploy_production: stage: deploy image: alpine:3.19 before_script: - apk add --no-cache openssh-client rsync - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | ssh-add - - mkdir -p ~/.ssh - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts script: - rsync -avz --delete dist/ deploy@$DEPLOY_HOST:/var/www/mysite/ environment: name: production url: https://mysite.com rules: - if: $CI_COMMIT_BRANCH == "main" , rules) מאיץ ריצות עוקבות—חוסך עד 40% מזמן הבנייה.
stages:
- test
- build
- deploy
variables:
NODE_VERSION: "20"
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
test:
stage: test
image: node:20-alpine
script:
- npm ci
- npm run lint
- npm test
build:
stage: build
image: node:20-alpine
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 hour
deploy_production:
stage: deploy
image: alpine:3.19
before_script:
- apk add --no-cache openssh-client rsync
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | ssh-add -
- mkdir -p ~/.ssh
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
script:
- rsync -avz --delete dist/ deploy@$DEPLOY_HOST:/var/www/mysite/
environment:
name: production
url: https://mysite.com
rules:
- if: $CI_COMMIT_BRANCH == "main" | שלב | תיאור | כלים |
|---|---|---|
| בדיקות | Linting, בדיקות יחידה, בדיקות אינטגרציה | npm test, PHPUnit, pytest |
| בנייה | קומפילציה, יצירת artifacts | Webpack, Vite, Composer |
| פריסה | מסירה לשרת (SSH, Docker) | rsync, docker push, git |
למה להשתמש ב-only/except במקום deploy_staging: rules: - if: $CI_COMMIT_BRANCH == "develop" when: on_success - when: never deploy_production: rules: - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/ when: manual /test: stage: test image: php:8.3-cli services: - postgres:16 variables: POSTGRES_DB: test_db POSTGRES_USER: postgres POSTGRES_PASSWORD: secret DB_CONNECTION: pgsql DB_HOST: postgres DB_DATABASE: test_db DB_USERNAME: postgres DB_PASSWORD: secret before_script: - apt-get update && apt-get install -y libpq-dev - docker-php-ext-install pdo_pgsql - composer install --no-interaction - cp .env.testing .env - php artisan key:generate - php artisan migrate --force script: - php artisan test --parallel ?
# Установка curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash apt-get install gitlab-runner # Регистрация gitlab-runner register \ --url https://gitlab.com \ --registration-token <TOKEN> \ --executor docker \ --docker-image alpine:latest הוא תחליף גמיש יותר ל-.gitlab-ci.yml/environment: name המיושנים. הוא מאפשר תנאים מורכבים המבוססים על ענפים, תגים, משתנים או סטטוס MR. כפי שמודגש בתיעוד הרשמי של GitLab CI/CD, .gitlab-ci.yml היא הדרך המומלצת לשליטה בביצוע jobs. דוגמה:
---
deploy_staging:
rules:
- if: $CI_COMMIT_BRANCH == "develop"
when: on_success
- when: never
deploy_production:
rules:
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
when: manual
---פריסה ל-staging רצה אוטומטית בעת push ל-.gitlab-ci.yml. פריסה לייצור מופעלת רק על ידי תגים כמו v1.2.3 ודורשת אישור ידני. הגדרה זו מקצרת את זמן החזרה לאחור ב-60%.
איך לבדוק PHP/Laravel עם PostgreSQL ב-Pipeline
---
test:
stage: test
image: php:8.3-cli
services:
- postgres:16
variables:
POSTGRES_DB: test_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: secret
DB_CONNECTION: pgsql
DB_HOST: postgres
DB_DATABASE: test_db
DB_USERNAME: postgres
DB_PASSWORD: secret
before_script:
- apt-get update && apt-get install -y libpq-dev
- docker-php-ext-install pdo_pgsql
- composer install --no-interaction
- cp .env.testing .env
- php artisan key:generate
- php artisan migrate --force
script:
- php artisan test --parallel
"}שירות postgres:16 מופעל כ-container צדדי, נגיש דרך hostname postgres. הרצת בדיקות במקביל מפחיתה את זמן הביצוע ב-70%.
מתי צריך Runner מתארח עצמית?
# Установка
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash
apt-get install gitlab-runner
# Регистрация
gitlab-runner register \
--url https://gitlab.com \
--registration-token <TOKEN> \
--executor docker \
--docker-image alpine:latestל-runners מתארחים עצמית אין מגבלות דקות, חומרה חזקה יותר, ו-caching מתמשך. הם מהירים פי 3–5 מ-runners משותפים. השוואה:
| תכונה | Runner משותף | Runner מתארח עצמית |
|---|---|---|
| מגבלות | 2000 דקות/חודש (חינם) | ללא מגבלות |
| חומרה | מוגבלת | משלך |
| Cache בין ריצות | נמחק | נשמר |
| התאמה אישית | אין | מלאה |
תוכנית התקנת CI/CD מפורטת
- הגדר שלבים ב-
.gitlab-ci.yml: test, build, deploy. בחר תמונות וסקריפטים. - הגדר caching של תלויות: מפתח לפי קובץ lock, נתיבים ל-vendor/node_modules.
- הוסף משתני סביבה ב-Settings → CI/CD → Variables: מפתחות סודיים, מארחים, tokens.
- צור סביבות:
environment: nameעבור staging וייצור. - חבר runner מתארח עצמית באמצעות רישום והגדרת executor.
- עבור בניות Docker, הוסף Docker in Docker (DinD) והשתמש ב-Container Registry.
- הגדר Review Apps לפריסה אוטומטית של MRs לסביבות זמניות.
לאחר שלבים אלה, ה-pipeline שלך יבצע את המחזור המלא—בדיקות, בנייה ופריסה—ללא התערבות ידנית. חיסכון ממוצע בזמן צוות: 15 שעות בחודש.
מהם לוחות הזמנים להתקנת CI/CD מלאה?
.gitlab-ci.yml בסיסי עם בדיקות ופריסת SSH אורך 1–2 ימים. תצורה מלאה עם סביבות מרובות, Docker registry, review apps ואישורים ידניים אורכת 4–6 ימים, כולל הגדרת runner וניפוי באגים. חיסכון בזמן צוות לאחר היישום: עד 30%.
מה כלול בעבודה?
המהנדסים שלנו, עם ניסיון של למעלה מ-5 שנים ו-50+ פרויקטים, מספקים:
- פיתוח
.gitlab-ci.ymlהמותאם לסטack שלך (Node, PHP, Python, Go). - הגדרת caching ומשתני סביבה.
- אינטגרציה עם Docker ו-Review Apps.
- תיעוד pipeline והדרכת צוות.
- הבטחת יציבות עם תמיכה לאחר ההשקה.
תוצאה: שגיאות פריסה מופחתות ב-90%, שחרורים מהירים פי 3. חיסכון בתקציב תשתית עד 25%. צור קשר להערכה—נבחן את הפרויקט שלך ונציע פתרון turnkey. קבל את התקנת ה-CI/CD שלך והפוך את הפריסה שלך לאמינה ומהירה.







