من خیلی به اتوماسیون علاقه‌مند هستم. دوست دارم سرویس‌های وب رو به کمک قلاب‌ها به هم وصل کنم و چیزهای جدید بسازم که خود به خود فعال بشوند و کاری رو به اتمام برسانند. سرویس 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