آشنایی با سرویس 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 برای نمایش آخرین وضعیت. مثلا وضعیت آخرین عملیات اتوماسیون من در نشان زیر پیداست − کلیک روی این نشان به صفحه پروژه روی ورکر منتهی می‌شود: wercker status

این مقدمه کوتاهی بود بر سرویس ورکر جهت اتوماسیون عملیات‌های تحت وب. اگر کار جالبی با ورکر انجام دادید خبر بدهید.

  1. Token 

  2. Badge 

سورس

دیدگاه‌ها

aasiaeet   ۲۹ تیر ۱۳۹۵   پاسخ 2792332784

سلام ممنون از اطلاعات خوبت برای سر هم کردن جکیل فارسی. با استفاده از راهنمایی های شما و گشت و گذار تو وب الان سایتی که از سایت شما فورک کردم روی لوکالم کار می کنه ولی همون طور که گفتین روی گیت هاب کار نمی کنه فکر می کنم به همون دلیل عدم ساپورت پلاگین ها. یه خورده با ورکر کلنجار رفتم ولی موفق نشدم راهش بندازم. می خواستم اگر تونستی بهم کمک کنی: الان من یه اکانت ورکر دارم که توش برای ریپازیتوری گیت هابم یه ورک فلو تعریف کردم که از بیلد و دیپلوی تشکیل شده و فایل کانفیگم ورکرم هم که توی لوکالم هست شبیه برای شما درست کردم. حالا یه بخش هایی هست که من درست نمی فهمم: این گیت هاب توکن که توی قسمت دیپلوی نوشتی یه متغیری محیطی هست که توی ورکر تعریف می کنی و عملا یه جورایی پسورد هست برای وصل شدن به گیت هابت؟ آیا متغیر دیگه ای هم می خوای مثل اس اس اچ کی؟ (ببخشید من یه خورده تعطیلم!) و کلا چه بخشی از ست آپ شما برای ورکر رو باید تغییر بدم تا کارم راه بیفته؟ ممنون

Mehdi Sadeghi   ۳۰ تیر ۱۳۹۵   پاسخ 2792816389

خوشحالم که مطلب به دردت خورده. اول نکته کنکوری گیت‌هاب: اگر اسم ریپوزیتوری و یوزرنیمت یکی باشه گیت‌هاب سایت رو از روی برنچ مستر ریپازیتوریت بیلد می‌کنه. این رو چک کن. نکته دیگه هم در مورد توکن، در تنظیمات اکانت گیت‌هابت بخشی هست بنام Personal Access Tokens، اونجا می‌تونی توکن بسازی. توکن شبیه پسورده، با این تفاوت که برای هر برنامه می‌تونی یکی بسازی و بعدا هر کدوم رو خواستی می‌تونی غیرفعال کنی (که باعث از کار افتادن اون برنامه می‌شه که با اون توکن می‌خواد به اکانتت دست پیدا کنه). اس اس اچ کی رو فکر نکنم جایی لازم داشتی باشه، ولی مطمئن نیستم. نکات بالا رو چک کن اگر نشد آدرس ریپازیتوریت رو بذار نگاه می‌کنم.

aasiaeet   ۳۱ تیر ۱۳۹۵   پاسخ 2795177669

سلام مجدد ممنون از پاسخ سریعت. من توکن رو درست کردم تو گیت هاب و سعی کردم توی ورک فلوی سایت ورکر هم ازش درست استفاده کنم به عنوان متغیر محیطی. ولی تستی که کردم جواب میده unable to access ‘https://inja token # hast@github.com/aasiaeet/cancer.git/’: توی ورکر احیانا نباید تنظیمات دیگه ای انجام بدم؟ این آدرس ریپوام هست: https://github.com/aasiaeet… ممنون از راهنماییت.

aasiaeet   ۰۴ مرداد ۱۳۹۵   پاسخ 2803190484

آقا ممنون از توضیحاتت بالاخره حل شد. مشکل این بود که توکنی که من تعریف می کردم تو گیت هاب دسترسی های لازم رو نداشت مثلا به خیال خودم گفتم کمترین دسترسی رو بدم برای امنیت! ولی وقتی همه دسترسی ها رو دادم دیپلوی انجام شد! باز هم متشکر keep up the good work!