ProHoster > وبلاگ > اداره > نحوه اتصال GitLab و Pantheon و بهینه سازی گردش کار دروپال و وردپرس
نحوه اتصال GitLab و Pantheon و بهینه سازی گردش کار دروپال و وردپرس
خالق ابزارهای توسعهدهنده مهمان ما در Pantheon در مورد نحوه خودکارسازی پیادهسازی وردپرس با استفاده از GitLab CI/CD صحبت میکند.
В زیارتگاه من در روابط با توسعهدهندگان کار میکنم، بنابراین همیشه به دنبال راههای جدیدی برای کمک به توسعهدهندگان وردپرس و دروپال هستم تا مشکلات اتوماسیون را در جریان کار خود حل کنند. برای انجام این کار، من دوست دارم با ابزارهای جدید آزمایش کنم و آنها را با یکدیگر ترکیب کنم تا به طور موثر کار کنند.
من اغلب توسعه دهندگان را می بینم که با یک سرور مرحله بندی منفرد دست و پنجه نرم می کنند.
این بسیار لذت بخش است که منتظر بمانید تا نوبت شما برای استفاده از یک سرور میانی یا ارسال یک URL به مشتریان با این یادداشت: "اینجا را نگاه کنید، اما هنوز اینجا را نگاه نکنید."
محیط های Multidev - یکی از ابزارهای جالب Pantheon - این مشکل را حل می کند، زیرا با آنها می توانید محیط هایی برای شاخه های Git بنا به درخواست ایجاد کنید. هر محیط multidev URL و پایگاه داده مخصوص به خود را دارد، بنابراین توسعه دهندگان می توانند بی سر و صدا کار کنند، کیفیت را بررسی کنند و بدون اینکه روی انگشتان یکدیگر قرار بگیرند، تاییدیه دریافت کنند.
اما Pantheon ابزارهایی برای کنترل نسخه یا یکپارچه سازی و استقرار مداوم (CI/CD) ندارد. اما این یک پلت فرم انعطاف پذیر است که می توانید هر ابزاری را با آن ادغام کنید.
همچنین متوجه شدم که تیم ها از ابزارهای خاصی برای توسعه و از ابزارهای مختلف برای مونتاژ و استقرار استفاده می کنند.
به عنوان مثال، آنها ابزارهای مختلفی برای کنترل نسخه و CI/CD دارند. برای ویرایش کد و تشخیص مشکلات باید بین ابزارها جابجا شوید.
بر گیتلب مجموعه کاملی از ابزارهای توسعه وجود دارد: برای کنترل نسخه، بلیط، درخواست ادغام، خط لوله CI/CD بهترین در کلاس، یک رجیستری کانتینر، و هر چیز دیگری مانند آن. من هنوز با برنامهای برخورد نکردهام که اینقدر برای مدیریت گردش کار توسعه شما ارائه دهد.
من عاشق اتوماسیون هستم، بنابراین یاد گرفتم که چگونه Pantheon را به GitLab متصل کنم تا تعهدات به شاخه اصلی در GitLab در محیط اصلی توسعه در Pantheon مستقر شوند. و درخواستهای ادغام در GitLab میتوانند کد را در محیطهای چند توسعهدهنده در Pantheon ایجاد و مستقر کنند.
در این آموزش، نحوه راهاندازی ارتباط بین GitLab و Pantheon و بهینهسازی گردش کار وردپرس و دروپال را به شما آموزش میدهم.
البته که ممکن است، مخزن GitLab را آینه کنید، اما ما هر کاری را با دستان خود انجام خواهیم داد تا به آن بپردازیم GitLab CI و در آینده از این ابزار نه تنها برای استقرار استفاده کنید.
معرفی
برای این پست، باید بدانید که Pantheon هر سایت را به سه عنصر تقسیم می کند: کد، پایگاه داده و فایل ها.
کد شامل فایل های CMS مانند هسته وردپرس، پلاگین ها و تم ها می باشد. این فایل ها در مدیریت می شوند مخازن Git، میزبانی شده توسط Pantheon، به این معنی که می توانیم کد را از GitLab به Pantheon با Git مستقر کنیم.
فایلها در Pantheon فایلهای رسانهای هستند، یعنی تصاویری برای سایت. به طور معمول آنها توسط کاربران آپلود می شوند و Git آنها را نادیده می گیرد.
پروژه من در Pantheon و GitLab نام دارد pantheon-gitlab-blog-demo. نام پروژه باید منحصر به فرد باشد. در اینجا ما با یک سایت وردپرس کار خواهیم کرد. شما می توانید دروپال را مصرف کنید، اما باید برخی چیزها را تغییر دهید.
اگر دستتان برای تغییر چیزی خارش میکند، مثلاً پلاگینها را حذف یا اضافه کنید، صبور باشید. سایت هنوز به GitLab متصل نشده است و ما می خواهیم همه تغییرات کد از طریق GitLab انجام شود.
پس از نصب وردپرس، به داشبورد وب سایت Pantheon برگردید و حالت توسعه را به Git تغییر دهید.
commit اولیه در GitLab
اکنون باید کد اولیه وردپرس را از سایت Pantheon به GitLab منتقل کنید. برای انجام این کار، کد را از مخزن Git سایت Pantheon به صورت محلی کلون می کنیم و سپس آن را به مخزن GitLab ارسال می کنیم.
حالا بیایید تغییر کنیم git remote originبرای اشاره به GitLab به جای Pantheon. این میتواند انجام شود командой git remote.
بیایید به پروژه GitLab برویم و URL مخزن را از منوی کشویی Clone در صفحه جزئیات پروژه کپی کنیم. بیایید گزینه Clone with SSH را انتخاب کنیم، زیرا ما قبلاً کلید SSH را پیکربندی کرده ایم.
به طور پیش فرض git remote برای یک کپی محلی از مخزن کد - origin. این را می توان تغییر داد c git remote set-url origin [URL репозитория GitLab]، جایی که به جای براکت آدرس واقعی را وارد می کنیم.
بالاخره راه اندازی می کنیم git push origin master --forceبرای انتقال کد وردپرس از Pantheon به GitLab.
گزینه –force فقط یک بار مورد نیاز است. سپس در تیم ها git push در GitLab نخواهد بود.
تنظیم اعتبار و متغیرها
به یاد دارید که چگونه یک کلید SSH را به صورت محلی برای ورود به Pantheon و GitLab اضافه کردیم؟ رمز SSH می تواند برای مجوز دادن به GitLab و Pantheon استفاده شود.
اکنون دو مرحله اول را تکمیل می کنیم: بیایید یک جفت کلید SSH جدید به صورت محلی با ssh-keygen ایجاد کنیم و کلید خصوصی را به عنوان یک متغیر به پروژه اضافه کنیم..
بعد می پرسیم SSH_PRIVATE_KEY مانند متغیر محیطی GitLab CI/CD در تنظیمات پروژه
در مرحله سوم و چهارم یک فایل ایجاد می کنیم .gitlab-ci.yml با مطالبی مانند این:
بیایید هنوز فایل را commit نکنیم .gitlab-ci.yml، سپس باید چیز دیگری به آن اضافه کنید.
اکنون مرحله پنجم را انجام می دهیم و کلید عمومی را که در مرحله اول ایجاد کردید به سرویس هایی که نیاز به دسترسی به آنها در محیط ساخت دارید اضافه کنید.
در مورد ما، ما می خواهیم از GitLab به Pantheon دسترسی داشته باشیم. ما دستورالعمل های موجود در سند Pantheon را دنبال می کنیم اضافه کردن یک کلید SSH به Pantheon و این مرحله را انجام دهید.
به یاد داشته باشید: SSH خصوصی در GitLab است، SSH باز در Pantheon است.
بیایید چند متغیر محیطی دیگر را تنظیم کنیم. اولین مورد PANTHEON_SITE نام دارد. مقدار آن نام سایت Pantheon در دستگاه شما است.
نام روی ماشین در انتهای فرمان Clone with Git ذکر شده است. شما قبلاً سایت را به صورت محلی کلون کرده اید، بنابراین این نام دایرکتوری مخزن محلی خواهد بود.
بعد، اجازه دهید متغیر محیطی را تنظیم کنیم PANTHEON_GIT_URL. این URL مخزن Git برای سایت Pantheon است که قبلاً از آن استفاده کرده ایم.
فقط URL مخزن SSH را بدون وارد کنید git clone و نام سایت روی دستگاه در انتها.
فوو تمام شد، اکنون می توانیم پرونده خود را تمام کنیم .gitlab-ci.yml.
یک وظیفه استقرار ایجاد کنید
کاری که در ابتدا با GitLab CI انجام خواهیم داد بسیار شبیه به کاری است که در گذشته با مخازن Git انجام داده ایم. اما این بار، اجازه دهید مخزن Pantheon را به عنوان دومین منبع Git راه دور اضافه کنیم و سپس کد را از GitLab به Pantheon فشار دهیم.
برای انجام این کار، بیایید پیکربندی کنیم صحنهdeploy и وظیفهdeploy:dev، زیرا ما در محیط توسعه در Pantheon مستقر خواهیم شد. فایل حاصل .gitlab-ci.yml شبیه این خواهد بود:
متغیرها SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL باید آشنا به نظر برسد - ما این متغیرهای محیطی را زودتر تنظیم کردیم. با این متغیرها می توانیم از مقادیر موجود در فایل استفاده کنیم .gitlab-ci.yml بارها، و فقط باید در یک مکان به روز شوند.
در نهایت فایل را اضافه، commit و ارسال کنید .gitlab-ci.yml در GitLab
بررسی استقرار
اگر ما همه چیز را به درستی انجام دادیم، وظیفه deploy:dev با موفقیت در GitLab CI/CD اجرا می شود و یک commit ارسال می کند .gitlab-ci.yml در پانتئون بیایید نگاهی بیندازیم.
ارسال رشته های درخواست ادغام به Pantheon
در اینجا ما از ویژگی مورد علاقه من Pantheon استفاده خواهیم کرد multidev، که در آن می توانید محیط های اضافی Pantheon را برای شاخه های Git در صورت تقاضا ایجاد کنید.
دسترسی به multidev محدود است، بنابراین می توان از این بخش صرف نظر کرد. اما اگر دسترسی دارید، میتوانید با راهاندازی ایجاد خودکار محیطهای multidev در Pantheon از درخواستهای ادغام GitLab، بهرهوری را به طور جدی افزایش دهید.
ابتدا بیایید با استفاده از یک شاخه Git جدید به صورت محلی ایجاد کنیم git checkout -b multidev-support. حالا بیایید دوباره چیزی را تغییر دهیم .gitlab-ci.yml.
من دوست دارم شماره درخواست ادغام را در نام محیط Pantheon لحاظ کنم. به عنوان مثال، اولین درخواست ادغام است mr-1، دومین - mr-2 و غیره.
درخواست ادغام تغییر می کند، بنابراین ما باید به صورت پویا نام شاخه های Pantheon را تعیین کنیم. در GitLab آسان است - فقط باید از آن استفاده کنید متغیرهای محیطی از پیش تعریف شده.
می توانیم بگیریم $CI_MERGE_REQUEST_IIDبرای تعیین شماره درخواست ادغام بیایید همه اینها را همراه با متغیرهای محیطی جهانی که قبلاً مشخص کردیم اعمال کنیم و یک کار جدید deploy:multidev در انتهای فایل اضافه کنیم. .gitlab-ci.yml.
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Checkout the merge request source branch
- git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon git repository as an additional remote
- git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
only:
- merge_requests
مشابه وظیفه ما خواهد بود deploy:dev، فقط شعبه به پانتئون ارسال می شود نه به master.
ما فایل به روز شده را اضافه و متعهد کردیم .gitlab-ci.yml، و اکنون اجازه دهید یک شاخه جدید را با GitLab فشار دهیم git push -u origin multidev-support.
حالا بیایید یک درخواست ادغام جدید از شعبه ایجاد کنیم multidev-supportبا کلیک کردن ایجاد درخواست ادغام.
پس از ایجاد یک درخواست ادغام، به نحوه اجرای وظیفه CI/CD نگاه می کنیم deploy:multidev.
ببینید، یک موضوع جدید به پانتئون ارسال شده است. اما اگر به بخش multidev در داشبورد سایت Pantheon برویم، محیط جدید را در آنجا نخواهیم دید.
بیایید به بخش Git Branches نگاه کنیم.
در نتیجه، موضوع ما mr-1 به پانتئون رسید بیایید از یک شاخه یک محیط ایجاد کنیم mr-1.
ما یک محیط multidev ایجاد کردهایم، حالا بیایید به GitLab برگردیم و به بخش نگاه کنیم عملیات > محیطها. ورودیهایی را خواهیم دید dev и mr-1.
این به این دلیل است که ما یک ورودی اضافه کردیم environment با نام name и url به وظایف CI/CD. اگر روی آیکون محیط باز کلیک کنیم، به URL محیط multidev در Pantheon هدایت می شویم.
ایجاد multidev را خودکار کنید
در اصل، شما می توانید در اینجا توقف کنید و فقط به یاد داشته باشید که برای هر درخواست ادغام یک محیط multidev ایجاد کنید، اما این فرآیند می تواند خودکار باشد.
Pantheon یک ابزار خط فرمان دارد پایانه، جایی که می توانید به طور خودکار با پلتفرم کار کنید. Terminus به شما این امکان را می دهد که محیط های multidev را از خط فرمان ایجاد کنید - ایده آل برای GitLab CI.
برای آزمایش این به یک درخواست ادغام جدید نیاز داریم. بیایید با استفاده از یک شاخه جدید ایجاد کنیم git checkout -b auto-multidev-creation.
برای استفاده از Terminus در وظایف GitLab CI/CD، به یک توکن ماشین برای احراز هویت با Terminus و یک تصویر ظرف با Terminus نیاز دارید.
ایجاد توکن ماشین پانتئون، آن را در مکانی امن ذخیره کنید و به عنوان یک متغیر محیطی جهانی در GitLab با نام اضافه کنید PANTHEON_MACHINE_TOKEN.
اگر فراموش کردید که چگونه متغیرهای محیط GitLab را اضافه کنید، به جایی که تعریف کردیم برگردید PANTHEON_SITE.
ایجاد Dockerfile با Terminus
اگر از Docker استفاده نمی کنید یا فایل ها را دوست ندارید Dockerfile، تصویر من را بگیرید registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest و از این بخش رد شوید.
GitLab دارای یک رجیستری کانتینر است، جایی که می توانیم Dockerfile را برای پروژه خود بسازیم و قرار دهیم. بیایید یک Dockerfile با Terminus برای کار با Pantheon ایجاد کنیم.
Terminus یک ابزار خط فرمان PHP است، بنابراین بیایید با تصویر PHP شروع کنیم. من ترمینوس را از طریق Composer نصب می کنم، بنابراین استفاده خواهم کرد تصویر رسمی Docker Composer. ما ایجاد می کنیم Dockerfile در دایرکتوری مخزن محلی با محتوای زیر:
# Use the official Composer image as a parent image
FROM composer:1.8
# Update/upgrade apk
RUN apk update
RUN apk upgrade
# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus
# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"
دستورالعمل مونتاژ و ارسال تصاویر را از بخش دنبال کنید ساخت و فشار دادن تصاویر в اسناد ثبت کانتینربرای جمع آوری تصویر از Dockerfile و آن را به GitLab فشار دهید.
باز کردن بخش ثبت در پروژه GitLab اگر همه چیز طبق برنامه پیش برود، تصویر ما آنجا خواهد بود. پیوندی به تگ تصویر بنویسید - ما به آن برای فایل نیاز داریم .gitlab-ci.yml.
بخش script در مشکل deploy:multidev در حال رشد است، بنابراین اجازه دهید آن را به یک فایل جداگانه منتقل کنیم. یک فایل جدید ایجاد کنید private/multidev-deploy.sh:
#!/bin/bash
# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID
# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN
# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force
# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
# Stash a list of Pantheon multidev environments
PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"
while read -r multiDev; do
if [[ "${multiDev}" == "$1" ]]
then
return 0;
fi
done <<< "$PANTHEON_MULTIDEV_LIST"
return 1;
}
# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
# Create it with Terminus
echo "No multidev for $PANTHEON_ENV found, creating one..."
terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fi
اسکریپت در یک فهرست خصوصی و اجازه دسترسی به وب به پانتئون را نمی دهد. ما یک اسکریپت برای منطق multidev خود داریم. بیایید اکنون بخش را به روز کنیم deploy:multidev فایل .gitlab-ci.ymlبه طوری که به این صورت می شود:
ما باید مطمئن شویم که وظایف ما در تصویر سفارشی ایجاد شده انجام می شود، بنابراین بیایید یک تعریف اضافه کنیم image از URL رجیستری به .gitlab-ci.yml. در نتیجه، ما به یک فایل مانند این رسیدیم .gitlab-ci.yml:
اضافه کردن، تعهد و ارسال private/multidev-deploy.sh и .gitlab-ci.yml. اکنون به GitLab برمی گردیم و منتظر می مانیم تا کار CI/CD کامل شود. صبور باشید: ایجاد multidev ممکن است چند دقیقه طول بکشد.
سپس به لیست multidev در Pantheon نگاه می کنیم. ای معجزه! محیط Multidev mr-2 در حال حاضر اینجا
نتیجه
وقتی شروع به باز کردن درخواستهای ادغام و ایجاد محیطها به صورت خودکار کردیم، تیم من بسیار سرگرمکننده بود.
با ابزار قدرتمند GitLab و Pantheon می توانید GitLab را به صورت خودکار به Pantheon متصل کنید.
از آنجایی که ما از GitLab CI/CD استفاده می کنیم، گردش کار ما فضایی برای رشد خواهد داشت. در اینجا چند ایده برای شروع شما وجود دارد:
یک مرحله ساخت اضافه کنید.
اضافه کردن تست خودکار
برای اطمینان از رعایت استانداردهای کد، یک کار اضافه کنید.
ما در Pantheon در نسخه 2 خود کار خوبی انجام داده ایم پلاگین برای ابزارهای ساخت ترمینوس با پشتیبانی GitLab اگر نمیخواهید تنظیمات مربوط به هر پروژه را به زحمت بیندازید، این افزونه را امتحان کنید و به ما کمک کنید نسخه بتای v2 را آزمایش کنیم. برای تیم ترمینوس build:project:create شما فقط به یک توکن Pantheon و یک توکن GitLab نیاز دارید. او یکی از پروژههای نمونه را با Composer و تست خودکار پیادهسازی میکند، یک پروژه جدید در GitLab، یک سایت جدید Pantheon ایجاد میکند، و آنها را با استفاده از متغیرهای محیطی و کلیدهای SSH متصل میکند.
درباره نویسنده
اندرو تیلور ابزارهایی را برای توسعه دهندگان ایجاد می کند زیارتگاه.