راهاندازی CI/CD برای وردپرس در GitLab
در دنیای امروز که سرعت و دقت حرف اول را میزند، اتوماسیون فرایندهای توسعه نرمافزار به یک ضرورت تبدیل شده است. وردپرس، به عنوان محبوبترین سیستم مدیریت محتوا در جهان، نیز از این قاعده مستثنی نیست. پیادهسازی CI/CD (یکپارچهسازی و استقرار مداوم) برای پروژههای وردپرسی با استفاده از GitLab، میتواند انقلابی در نحوه توسعه، تست و استقرار وبسایتهای شما ایجاد کند.
این مقاله جامع، شما را با مفاهیم کلیدی CI/CD آشنا کرده و سپس گام به گام نحوه تنظیم یک پایپلاین قدرتمند را برای وردپرس در GitLab آموزش میدهد. با این راهنما، قادر خواهید بود فرایند استقرار تغییرات کد، افزونهها و پوستههای وردپرس خود را به صورت خودکار و بدون خطا انجام دهید و کیفیت و سرعت توسعه پروژه خود را به طور چشمگیری افزایش دهید.
در این مقاله به آموزش راهاندازی CI/CD برای وردپرس در GitLab: اتوماسیون تست و استقرار و بررسی سوالات شما از جمله مزایای پیادهسازی CI/CD برای پروژههای وردپرسی، اتوماسیون تست وردپرس با GitLab CI و چگونگی استقرار خودکار وردپرس در سرور ابری خواهم پرداخت.
برای داشتن مشاوره رایگان برای طراحی سایت و مدیریت سایت ورپرسی با شماره tel:02191693564 تماس بگیرید.

چرا CI/CD برای وردپرس ضروری است؟
توسعه سنتی وردپرس اغلب با چالشهایی همراه است: بهروزرسانیهای دستی، احتمال بالای خطای انسانی، مشکلات سازگاری افزونهها و پوستهها، و زمانبر بودن فرایند استقرار. این مشکلات میتوانند منجر به کاهش سرعت توسعه، خرابی وبسایت و تجربهی نامطلوب کاربر شوند.
CI/CD راهکاری قدرتمند برای غلبه بر این چالشها ارائه میدهد. با اتوماسیون مراحل مختلف چرخه عمر توسعه نرمافزار، CI/CD امکان تحویل سریعتر، مطمئنتر و با کیفیتتر پروژههای وردپرسی را فراهم میکند. این رویکرد نه تنها باعث کاهش خطاهای انسانی میشود، بلکه همکاری تیمی را نیز بهبود میبخشد و به توسعهدهندگان اجازه میدهد تا به جای انجام وظایف تکراری، بر روی نوآوری تمرکز کنند.
آشنایی با مفاهیم کلیدی CI/CD
برای پیادهسازی موفق CI/CD برای وردپرس، ابتدا باید با مفاهیم اصلی آن آشنا شویم:
یکپارچهسازی مداوم (Continuous Integration – CI)
CI فرایندی است که در آن توسعهدهندگان به طور مداوم تغییرات کد خود را در یک مخزن مشترک ادغام میکنند. پس از هر ادغام، یک ساخت خودکار آغاز میشود که شامل کامپایل کد (در صورت نیاز)، اجرای تستهای خودکار و اطمینان از سازگاری تغییرات است. هدف اصلی CI، شناسایی و رفع زودهنگام تداخلها و خطاهای کد است تا از پیچیدگی و زمانبر شدن مراحل بعدی جلوگیری شود.
در بستر وردپرس، CI میتواند شامل تست واحد برای کدهای سفارشی، بررسی سازگاری افزونهها و پوستهها با نسخههای جدید وردپرس، و تحلیل کد برای یافتن آسیبپذیریها باشد. این مرحله تضمین میکند که کدی که قرار است به محیطهای بالاتر منتقل شود، از کیفیت لازم برخوردار است.
استقرار مداوم (Continuous Deployment/Delivery – CD)
CD به معنای اتوماسیون فرایند تحویل کد از مرحله یکپارچهسازی تا استقرار در محیطهای مختلف (توسعه، تست، تولید) است. استقرار مداوم (Continuous Deployment) به این معنی است که هر تغییری که تستها را با موفقیت پشت سر گذاشته، به صورت خودکار در محیط تولید مستقر میشود.
تحویل مداوم (Continuous Delivery) کمی متفاوت است؛ در این حالت، کد آماده استقرار در هر لحظه در محیط تولید است، اما استقرار نهایی به صورت دستی و با تأیید یک انسان انجام میشود. این انتخاب بستگی به نیازها و سطح ریسکپذیری پروژه دارد. برای وردپرس، CD به معنای ارسال خودکار فایلهای بهروزرسانی شده به سرور و فعالسازی تغییرات است.
پایپلاین (Pipeline)
پایپلاین در CI/CD مجموعهای از مراحل (Stages) است که به ترتیب اجرا میشوند تا کد از مخزن به مرحله استقرار نهایی برسد. هر مرحله از یک یا چند کار (Job) تشکیل شده است. به عنوان مثال، یک پایپلاین معمولاً شامل مراحل “ساخت” (Build)، “تست” (Test) و “استقرار” (Deploy) است. موفقیت هر مرحله، شرط لازم برای شروع مرحله بعدی است.
برای وردپرس، پایپلاین میتواند شامل مراحلی مانند نصب وابستگیهای PHP یا Node.js، اجرای تستهای PHPUnit، و سپس انتقال فایلها به سرور وب باشد. این ساختار تضمین میکند که هیچ تغییری بدون گذراندن مراحل ضروری، به کاربران نهایی نمیرسد.
GitLab CI/CD Runner
GitLab Runner یک ابزار سبک وزن است که وظیفه اجرای کارها (Jobs) در پایپلاین CI/CD را بر عهده دارد. Runnerها میتوانند بر روی سرورهای مختلف نصب شوند و دستورات تعریف شده در فایل .gitlab-ci.yml
را اجرا کنند. این ابزار به GitLab اجازه میدهد تا فرایندهای CI/CD را بر روی زیرساختهای مختلف و متناسب با نیاز پروژه اجرا کند.

پیشنیازهای راهاندازی CI/CD برای وردپرس در GitLab
قبل از شروع تنظیم پایپلاین CI/CD، مطمئن شوید که پیشنیازهای زیر را فراهم کردهاید:
- مخزن GitLab برای پروژه وردپرس: تمام کدهای مربوط به وردپرس، شامل هسته (اگر سفارشیسازی شده)، پوستهها، و افزونههای سفارشی شما باید در یک مخزن Git در GitLab نگهداری شوند. فایلهای حساس مانند
wp-config.php
و پوشهwp-content/uploads
باید از Git خارج شوند. - دسترسی به سرور وب: شما به دسترسی SSH یا SFTP به سرور میزبانی وردپرس خود نیاز دارید. این دسترسی برای انتقال فایلها از GitLab به سرور در مرحله استقرار ضروری است. اطمینان حاصل کنید که اطلاعات ورود به سرور (نام کاربری، آدرس IP) را در اختیار دارید.
- کلید SSH: برای برقراری ارتباط امن بین GitLab Runner و سرور شما، نیاز به یک جفت کلید SSH (عمومی و خصوصی) دارید. کلید عمومی باید در فایل
authorized_keys
سرور شما قرار گیرد و کلید خصوصی به عنوان یک متغیر امن در GitLab تعریف شود. - آشنایی با ساختار وردپرس: درک صحیح از نحوه کار وردپرس، محل قرارگیری فایلها و نحوه بهروزرسانی آن برای تنظیم دقیق پایپلاین حیاتی است. همچنین، آشنایی با
wp-cli
میتواند به شما در اجرای دستورات پس از استقرار کمک کند. - دانش اولیه در مورد فایل
.gitlab-ci.yml
: این فایل، قلب تنظیمات CI/CD شماست. درک سینتکس و قابلیتهای آن برای تعریف مراحل پایپلاین ضروری است.
گام به گام: تنظیم پایپلاین CI/CD وردپرس در GitLab
در این بخش به مواردی از قبیل: راهاندازی CI/CD برای وردپرس در GitLab و استقرار خودکار وردپرس در سرور ابری و اتوماسیون تست وردپرس با GitLab CI خواهیم پرداخت.
۱. آمادهسازی پروژه وردپرس برای Git
اولین گام، سازماندهی صحیح پروژه وردپرس شما در یک مخزن Git است. این مرحله شامل تصمیمگیری در مورد اینکه چه چیزی باید در Git قرار گیرد و چه چیزی نباید.
- هسته وردپرس: اگر تغییرات اساسی در هسته وردپرس خود اعمال نمیکنید، بهتر است هسته را در Git قرار ندهید و در عوض، آن را به صورت جداگانه بر روی سرور نصب کنید. در این صورت، فقط
wp-content
(یا فقط پوستهها و افزونههای سفارشی) را در Git نگهداری کنید. اما اگر هسته را هم در مخزن دارید، حتماًwp-config.php
و پوشهwp-content/uploads
را نادیده بگیرید. .gitignore
: یک فایل.gitignore
در ریشه مخزن خود ایجاد کنید تا فایلها و پوشههایی که نباید در Git ردیابی شوند را مشخص کنید. مهمترین موارد شامل:wp-config.php
(حاوی اطلاعات حساس پایگاه داده و کلیدهای امنیتی است)wp-content/uploads/
(حاوی فایلهای رسانهای کاربران است که معمولاً حجیم هستند و نباید در کنترل نسخه باشند).env
(اگر از فایلهای متغیر محیطی استفاده میکنید)node_modules/
(برای پروژههایی که از ابزارهای فرانتاند استفاده میکنند)vendor/
(برای وابستگیهای Composer)
- ساختار مخزن: ساختار مخزن شما باید منعکسکننده نحوه استقرار پروژه باشد. میتوانید کل نصب وردپرس را در مخزن خود داشته باشید یا فقط کدهای سفارشی (پوستهها و افزونهها) را ردیابی کنید.
۲. تنظیمات GitLab و متغیرهای CI/CD
برای برقراری ارتباط امن و انتقال اطلاعات حساس، نیاز به تعریف متغیرها در GitLab دارید:
- اضافه کردن کلید خصوصی SSH: به پروژه خود در GitLab بروید، سپس به مسیر Settings > CI/CD > Variables بروید. یک متغیر جدید با نامی مانند
SSH_PRIVATE_KEY
ایجاد کنید. مقدار آن را با محتوای کلید خصوصی SSH خود (از-----BEGIN OPENSSH PRIVATE KEY-----
تا-----END OPENSSH PRIVATE KEY-----
) پر کنید. حتماً گزینه “Protect variable” و “Mask variable” را فعال کنید تا این کلید در لاگها نمایش داده نشود و فقط در branchهای محافظتشده قابل دسترسی باشد. - متغیرهای استقرار: متغیرهای دیگری مانند
DEPLOY_HOST
(آدرس IP یا دامنه سرور)،DEPLOY_USER
(نام کاربری SSH سرور) وDEPLOY_PATH
(مسیر استقرار وردپرس روی سرور) را نیز به همین روش اضافه کنید. این متغیرها به اسکریپتهای استقرار شما کمک میکنند تا محل صحیح را پیدا کنند. - تعریف محیطها: در بخش Environments در GitLab، میتوانید محیطهای مختلفی مانند “development”, “staging” و “production” را تعریف کنید. این کار به شما کمک میکند تا استقرارها را سازماندهی کرده و وضعیت هر محیط را ردیابی کنید.
۳. ایجاد فایل .gitlab-ci.yml
فایل .gitlab-ci.yml
قلب پایپلاین CI/CD شماست. این فایل باید در ریشه مخزن GitLab شما قرار گیرد و تمام مراحل، کارها و دستورات را تعریف کند. در اینجا یک نمونه کلی با توضیحات ارائه میشود:
stages:
- build
- test
- deploy
variables:
# متغیرهای محیطی که در داخل پایپ لاین استفاده می شوند
# اینها می توانند با متغیرهای تعریف شده در GitLab overriding شوند
WP_PATH: "$DEPLOY_PATH" # مسیر ریشه وردپرس روی سرور
before_script:
# تنظیمات اولیه قبل از اجرای هر job
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY") - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan $DEPLOY_HOST >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
build_assets:
stage: build
image: node:16 # یا هر ایمیج حاوی npm/yarn
script:
- echo "Building frontend assets..."
- cd wp-content/themes/your-theme-name # اگر پروژه شما شامل فایل های css/js سفارشی است
- npm install
- npm run build # یا yarn build
artifacts:
paths:
- wp-content/themes/your-theme-name/dist/ # مسیر فایل های ساخته شده
expire_in: 1 week
only:
- main
- develop
test_code:
stage: test
image: php:7.4-cli # یا نسخه PHP متناسب با پروژه شما
script:
- echo "Running PHPUnit tests..."
# - composer install # اگر از composer برای افزونه ها/پوسته ها استفاده می کنید
# - ./vendor/bin/phpunit # مسیر اجرای PHPUnit
- echo "No specific PHPUnit tests defined for this example."
allow_failure: true # اگر تست ها اختیاری هستند
only:
- main
- develop
deploy_staging:
stage: deploy
image: alpine/git # ایمیج سبک حاوی git و rsync
script:
- echo "Deploying to staging environment..."
- rsync -avzh --delete --exclude 'wp-config.php' --exclude 'wp-content/uploads/' --exclude '.git/' ./ $DEPLOY_USER@$DEPLOY_HOST:$WP_PATH
- echo "Deployment to staging complete."
# اجرای دستورات WP-CLI پس از استقرار
# - ssh $DEPLOY_USER@$DEPLOY_HOST "cd $WP_PATH && /usr/local/bin/wp cache flush"
# - ssh $DEPLOY_USER@$DEPLOY_HOST "cd $WP_PATH && /usr/local/bin/wp option update home 'https://staging.yourdomain.com'"
# - ssh $DEPLOY_USER@$DEPLOY_HOST "cd $WP_PATH && /usr/local/bin/wp option update siteurl 'https://staging.yourdomain.com'"
environment:
name: staging
url: https://staging.yourdomain.com
only:
- develop # این job فقط با push به branch develop اجرا می شود
deploy_production:
stage: deploy
image: alpine/git
script:
- echo "Deploying to production environment..."
- rsync -avzh --delete --exclude 'wp-config.php' --exclude 'wp-content/uploads/' --exclude '.git/' ./ $DEPLOY_USER@$DEPLOY_HOST:$WP_PATH
- echo "Deployment to production complete."
# اجرای دستورات WP-CLI پس از استقرار
# - ssh $DEPLOY_USER@$DEPLOY_HOST "cd $WP_PATH && /usr/local/bin/wp cache flush"
environment:
name: production
url: https://yourdomain.com
when: manual # این job نیاز به تایید دستی دارد
only:
- main # این job فقط با push به branch main اجرا می شود
توضیح بخشهای مهم فایل .gitlab-ci.yml
:
stages
: مراحل اصلی پایپلاین را تعریف میکند. (Build, Test, Deploy)variables
: متغیرهای محیطی که در داخل پایپلاین قابل دسترسی هستند.before_script
: دستوراتی که قبل از اجرای هر Job در پایپلاین اجرا میشوند. در اینجا برای تنظیم SSH Agent و اضافه کردن کلید خصوصی استفاده شده است.build_assets
(Job در مرحلهbuild
): این Job مسئول ساخت فایلهای CSS/JS از طریق NPM یا Yarn است. Artifacts اجازه میدهد تا خروجی این Job در Jobهای بعدی استفاده شود.test_code
(Job در مرحلهtest
): این Job برای اجرای تستهای خودکار (مانند PHPUnit) طراحی شده است. برای وردپرس، پیادهسازی تستهای جامع ممکن است پیچیده باشد، اما برای کدهای سفارشی شما بسیار مفید است.deploy_staging
وdeploy_production
(Job در مرحلهdeploy
): این Jobها ازrsync
برای همگامسازی فایلها با سرور استفاده میکنند.--exclude
برای نادیده گرفتن فایلهای حساس و حجیم مانندwp-config.php
وwp-content/uploads
ضروری است.environment
: برای ردیابی استقرار در محیطهای مختلف در GitLab UI.only
: مشخص میکند که این Job تنها در چه branchهایی اجرا شود (مثلاًdevelop
برای staging وmain
برای production).when: manual
: برای استقرار در محیط تولید، پیشنهاد میشود که این Job به صورت دستی تأیید شود تا از استقرار ناخواسته جلوگیری شود.
- دستورات
wp-cli
: پس از استقرار، ممکن است نیاز به اجرای دستوراتی مانند پاک کردن کش وردپرس، بهروزرسانی URLها یا اجرای بهروزرسانی پایگاه داده (wp db update
) داشته باشید. این کارها را میتوانید با دستورssh $DEPLOY_USER@$DEPLOY_HOST "cd $WP_PATH && /usr/local/bin/wp command"
انجام دهید.
شما میتوانید با اطمینان خاطر مدیریت سایت وردپرسی خود را به آسمان سرور بسپارید.
مدیریت پایگاه داده در فرایند CI/CD وردپرس
پایگاه داده وردپرس، پیچیدگی خاص خود را در فرایند CI/CD دارد. برخلاف کد، پایگاه داده به صورت معمول در سیستم کنترل نسخه (Git) نگهداری نمیشود و تغییرات آن اغلب از طریق پنل مدیریت وردپرس یا افزونهها ایجاد میشود.
استراتژیهای مختلفی برای مدیریت پایگاه داده در CI/CD وجود دارد:
- همگامسازی دستی: در بسیاری از موارد، بهروزرسانیهای ساختاری پایگاه داده (مانند نصب افزونههای جدید) به صورت دستی روی محیط استیجینگ و سپس تولید انجام میشود. تغییرات محتوایی (پستها، صفحات) معمولاً مستقیماً روی محیط تولید اعمال میشوند.
- استفاده از
wp-cli
: میتوان از دستوراتی مانندwp db export
وwp db import
برای انتقال پایگاه داده بین محیطها استفاده کرد. این روش برای محیطهای توسعه/تست مناسب است، اما برای تولید باید با احتیاط فراوان و برنامهریزی پشتیبانگیری قوی انجام شود. - افزونههای مهاجرت پایگاه داده: برخی افزونهها (مانند WP Migrate DB Pro) به همگامسازی پایگاه داده بین محیطها کمک میکنند، اما ممکن است نیاز به پیکربندی دستی داشته باشند.
مهم است که یک استراتژی روشن برای مدیریت پایگاه داده داشته باشید، زیرا استقرار خودکار کد بدون توجه به تغییرات پایگاه داده میتواند منجر به مشکلات جدی شود. در بسیاری از موارد، پایگاه داده به طور کامل در چرخه CI/CD خودکار نمیشود و نیاز به دخالت دستی یا نیمهخودکار دارد.
مزایای پیادهسازی CI/CD برای پروژههای وردپرسی
استفاده از CI/CD برای وردپرس مزایای چشمگیری به همراه دارد:
- افزایش سرعت توسعه: فرایندهای تکراری و زمانبر دستی حذف میشوند، به توسعهدهندگان اجازه میدهد سریعتر کد خود را منتشر کنند.
- کاهش خطاهای انسانی: اتوماسیون مراحل تست و استقرار، احتمال خطاهای ناشی از دخالت دستی را به حداقل میرساند.
- بهبود کیفیت کد: با اجرای مداوم تستها و بررسیهای کد، کیفیت و پایداری پروژه افزایش مییابد.
- همکاری تیمی مؤثرتر: توسعهدهندگان میتوانند تغییرات خود را با اطمینان بیشتری ادغام کنند، زیرا میدانند که پایپلاین CI/CD مشکلات را شناسایی خواهد کرد.
- استقرار مطمئن و قابل تکرار: هر استقرار از یک فرایند استاندارد و خودکار پیروی میکند که نتیجه آن قابل پیشبینی و قابل اعتماد است.
- تستهای خودکار: اطمینان از اینکه تغییرات جدید، عملکرد موجود وبسایت را مختل نمیکنند.
چالشها و نکات مهم در راهاندازی CI/CD برای وردپرس در GitLab
با وجود مزایای فراوان، پیادهسازی CI/CD برای وردپرس چالشهایی نیز دارد که باید به آنها توجه کرد:
- مدیریت فایلهای حجیم: پوشه
wp-content/uploads
میتواند بسیار حجیم شود. این پوشه هرگز نباید در Git ردیابی شود. باید یک استراتژی جداگانه برای پشتیبانگیری و همگامسازی آن بین محیطها (مثلاً با استفاده از rsync یا سرویسهای ابری) داشته باشید. - بهروزرسانی هسته، افزونهها و پوستهها: اگر این موارد را در مخزن خود نگهداری میکنید، باید فرایند بهروزرسانی آنها را نیز در پایپلاین در نظر بگیرید. در غیر این صورت، بهروزرسانیها باید به صورت دستی یا از طریق ابزارهای مدیریت وردپرس انجام شوند.
- مدیریت متغیرهای محیطی
wp-config.php
: اطلاعات حساس پایگاه داده و API Keys درwp-config.php
نباید به صورت مستقیم در Git قرار گیرند. از متغیرهای CI/CD در GitLab یا فایلهای.env
در سرور برای مدیریت این اطلاعات استفاده کنید. - امنیت SSH Keys و Credentials: اطمینان حاصل کنید که کلیدهای SSH و سایر اطلاعات احراز هویت به صورت امن در GitLab (با فعال کردن “Protect variable” و “Mask variable”) ذخیره شدهاند و فقط برای کاربران و Jobهای مجاز قابل دسترسی هستند.
- پیچیدگی تست در وردپرس: تست واحد برای کدهای سفارشی وردپرس امکانپذیر است، اما تستهای جامعتر (مانند تستهای UI یا تستهای یکپارچهسازی با افزونهها) میتوانند پیچیده باشند و نیاز به ابزارهای تخصصیتر و زمان بیشتری برای پیادهسازی دارند.
- مدیریت پایگاه داده: همانطور که قبلاً ذکر شد، مدیریت خودکار تغییرات پایگاه داده در وردپرس به طور کامل در CI/CD دشوار است و نیاز به استراتژیهای دقیق و محتاطانه دارد.
نتیجهگیری:
راهاندازی CI/CD برای وردپرس در GitLab، گامی بلند در جهت مدرنسازی فرایند توسعه و استقرار وبسایتهای وردپرسی است. با اتوماسیون مراحل تکراری، افزایش سرعت تحویل، بهبود کیفیت کد و کاهش خطاهای انسانی، تیمهای توسعه میتوانند بهرهوری خود را به میزان قابل توجهی افزایش دهند.
هرچند چالشهایی در مسیر پیادهسازی وجود دارد، اما با برنامهریزی دقیق، استفاده صحیح از قابلیتهای GitLab و توجه به نکات کلیدی مدیریت فایلها و پایگاه داده، میتوانید یک پایپلاین CI/CD قدرتمند و کارآمد برای پروژه وردپرس خود ایجاد کنید. با این رویکرد، وردپرس دیگر تنها یک CMS نیست، بلکه یک پلتفرم توسعه وب قدرتمند است که میتواند از مزایای کامل DevOps بهرهمند شود.
ازخدمات ویژه آسمان سرور میتوان به مشاوره و اجرای سئو: آنالیز سئو داخلی و خارجی، تولید محتوای سئو شده، بهینهسازی ساختار سایت و افزایش رتبه در نتایج گوگل اشاره کرد.
می توانید صفحه اینستاگرام آسمان سرور را دنبال کنید.
دیدگاه