آشنایی با سرویس Wercker
من خیلی به اتوماسیون علاقهمند هستم. دوست دارم سرویسهای وب رو به کمک قلابها به هم وصل کنم و چیزهای جدید بسازم که خود به خود فعال بشوند و کاری رو به اتمام برسانند. سرویس Wercker بدرد اینکار میخورد.
بگذارید با مثالی آغاز بکنم. سرویس صفحات گیتهاب از وبسایتهای جکیل پشتیبانی میکند. یعنی اگر من سورس کد وبسایت مبتنی بر جکیل را روی گیتهاب هاست کنم، دیگر نیازی نیست که خودم بعد از هر تغییر یا مطلب جدید سایت را از نو بسازم و بارگذاری کنم. گیتهاب اینکار را برای من به شکل خودکار انجام میدهد. اما چون من وبلاگم فارسی است و نیز از تعدادی کتابخانه روبی استفاده کردهام که گیتهاب آنها را پشتیبانی نمیکند − مثلا برای تاریخ شمسی − بنابراین نمیتوانم از این امکان گیتهاب استفاده کنم. تا پیش از این مجبور بودم خودم وبسایت را روی لپتاپم بسازم و بعد خروجی را در گیتهاب بارگذاری کنم.
این کار خیلی خستهکننده بود.
از جایی که میدانستم گیتهاب Webhook یا قلابهای وبی دارد (از ترجمه بهتر استقبال میکنم) میخواستم یک برنامه کوچک بنویسم و روی سروری شخصی بارگذاری کنم تا همواره گوش بایستد و به پیامهای گیتهاب گوش کند. مثلا اگر کامیت جدیدی اتفاق افتاد بیاید و سورس را دانلود بکند و وبسایت را بسازد و در انتها خروجی را به کمک توکنی1 که خودم به او دادهام روی شاخه صحیح در گیتهاب بارگذاری کند.
در همین افکار بودم و خودم را برای اینکار آماده میکردم که با سرویس ورکر آشنا شدم که دقیقا همین کار را مجانی انجام میدهد. طرز کار هم خیلی شبیه به سایتهای مشابه مثل travis-ci یا heroku است. یعنی ما یک اکانت در سایت سرویس دهنده − اینجا ورکر − میسازیم و یک فایل تنظیمات هم در مخزن گیتهاب قرار میدهیم که حاوی تنظیمات ضروری است. به زبان ساده در این فایل تنظیمات به ورکر میگوییم هر وقت که گیتهاب تو را خبر کرد چه کاری باید انجام بدهی. در این فایل گامهای لازم را شرح میدهیم.
به طور کلی گامهای اساسی دو تا بیشتر نیستند. اولی گام ساخت خروجی است و دومی گام دیپلوی یا بارگزاری آن است. گام اول باید حاوی دستورات بیلد پروژه باشد. در گام دوم خروجی را برداشته و در مثال من روی گیتهاب کپی میکنیم.
این هم فایل تنظیمات ورکر سایت من است:
box: ruby
build:
steps:
# Install dependencies
- bundle-install
# Execute jeykyll doctor command to validate the
# site against a list of known issues.
- script:
name: jekyll doctor
code: bundle exec jekyll doctor
- script:
name: generate site
code: bundle exec jekyll build --trace --destination ./_site
- create-file:
name: generate robots.txt
filename: ./_site/robots.txt
content: |-
User-agent: *
Allow: /
Sitemap: http://mehdix.ir/sitemap.xml
deploy:
steps:
- lukevivier/gh-pages:
token: $GITHUB_TOKEN
basedir: _site
domain: mehdix.ir
یک حسن ورکر این است که میتوان گامها را با دیگران به اشتراک گذاشت. مثلا در مثال بالا من برای بارگذاری خروجی روی گیتهاب از اسکریپتی که دیگری نوشته است − lukevivier/gh-pages − استفاده کردهام. همانطور که پیشتر اشاره کردم ورکر هم از الگوهای پذیرفته شده در میان برنامههای مدرن توسعه وب پیروی میکند. از جمله دادن نشان2 برای نمایش آخرین وضعیت. مثلا وضعیت آخرین عملیات اتوماسیون من در نشان زیر پیداست − کلیک روی این نشان به صفحه پروژه روی ورکر منتهی میشود:
این مقدمه کوتاهی بود بر سرویس ورکر جهت اتوماسیون عملیاتهای تحت وب. اگر کار جالبی با ورکر انجام دادید خبر بدهید.
سلام ممنون از اطلاعات خوبت برای سر هم کردن جکیل فارسی. با استفاده از راهنمایی های شما و گشت و گذار تو وب الان سایتی که از سایت شما فورک کردم روی لوکالم کار می کنه ولی همون طور که گفتین روی گیت هاب کار نمی کنه فکر می کنم به همون دلیل عدم ساپورت پلاگین ها. یه خورده با ورکر کلنجار رفتم ولی موفق نشدم راهش بندازم. می خواستم اگر تونستی بهم کمک کنی: الان من یه اکانت ورکر دارم که توش برای ریپازیتوری گیت هابم یه ورک فلو تعریف کردم که از بیلد و دیپلوی تشکیل شده و فایل کانفیگم ورکرم هم که توی لوکالم هست شبیه برای شما درست کردم. حالا یه بخش هایی هست که من درست نمی فهمم: این گیت هاب توکن که توی قسمت دیپلوی نوشتی یه متغیری محیطی هست که توی ورکر تعریف می کنی و عملا یه جورایی پسورد هست برای وصل شدن به گیت هابت؟ آیا متغیر دیگه ای هم می خوای مثل اس اس اچ کی؟ (ببخشید من یه خورده تعطیلم!) و کلا چه بخشی از ست آپ شما برای ورکر رو باید تغییر بدم تا کارم راه بیفته؟ ممنون
خوشحالم که مطلب به دردت خورده. اول نکته کنکوری گیتهاب: اگر اسم ریپوزیتوری و یوزرنیمت یکی باشه گیتهاب سایت رو از روی برنچ مستر ریپازیتوریت بیلد میکنه. این رو چک کن. نکته دیگه هم در مورد توکن، در تنظیمات اکانت گیتهابت بخشی هست بنام Personal Access Tokens، اونجا میتونی توکن بسازی. توکن شبیه پسورده، با این تفاوت که برای هر برنامه میتونی یکی بسازی و بعدا هر کدوم رو خواستی میتونی غیرفعال کنی (که باعث از کار افتادن اون برنامه میشه که با اون توکن میخواد به اکانتت دست پیدا کنه). اس اس اچ کی رو فکر نکنم جایی لازم داشتی باشه، ولی مطمئن نیستم. نکات بالا رو چک کن اگر نشد آدرس ریپازیتوریت رو بذار نگاه میکنم.
سلام مجدد ممنون از پاسخ سریعت. من توکن رو درست کردم تو گیت هاب و سعی کردم توی ورک فلوی سایت ورکر هم ازش درست استفاده کنم به عنوان متغیر محیطی. ولی تستی که کردم جواب میده unable to access ‘https://inja token # hast@github.com/aasiaeet/cancer.git/’: توی ورکر احیانا نباید تنظیمات دیگه ای انجام بدم؟ این آدرس ریپوام هست: https://github.com/aasiaeet… ممنون از راهنماییت.
آقا ممنون از توضیحاتت بالاخره حل شد. مشکل این بود که توکنی که من تعریف می کردم تو گیت هاب دسترسی های لازم رو نداشت مثلا به خیال خودم گفتم کمترین دسترسی رو بدم برای امنیت! ولی وقتی همه دسترسی ها رو دادم دیپلوی انجام شد! باز هم متشکر keep up the good work!
خوبه که درست شد و ممنون که اطلاع دادی! :)
متاسفانه این پیامت رو خیلی دیر دیدم. اگر هنوز هم این مشکل رو داری اطلاع بده.
سلام من یه مشکل دارم درمورد origin master اگه کسی میتونه کمک کنه ممنون میشم
سلام، اگر سوالی داری لطفا مفصل بپرس و مشکلت رو شرح بده و نشون بده برای حل مشکلت چه کارهایی انجام دادی تا بشه بهت کمک کرد. مثلا این جملهی من میتونست پاسخ به مشکلت باشه بجای پرسیدن یک سوال دیگه.