نصب یک‌کلیک فعال نیست — نصب دستی آزاد

Woodpecker CI؛ CI/CD سبک با فایل YAML روی سرور خودتان

Woodpecker هر مرحلهٔ build و تست را داخل یک ایمیج Docker اجرا می‌کند و با Gitea‏، Forgejo‏، GitHub و GitLab کار می‌کند. نصب یک‌کلیک آن فعال نیست، چون Woodpecker بدون اتصال OAuth به مخزن کد شما کار نمی‌کند؛ با راهنمای همین صفحه آن را روی سرور ابری تهران راه بیندازید.

حساب دارید؟ وارد شوید

Woodpecker CI

نصب دستی روی سرور ابری

سرور لازم برای نصب دستی، از

۲٬۲۰۰تومان / ساعت

حدود ۱٬۶۰۶٬۰۰۰ تومان در ماه،بر پایهٔ ۷۳۰ ساعت

  • پلن standard پیشنهادی،  ۲ گیگابایت RAM برای server و agent
  • ورود با Gitea‏، GitHub یا GitLab،  برنامهٔ OAuth لازم است
  • پورت ۸۰۰۰ وب، ۹۰۰۰ agent،  HTTPS با reverse proxy
  • نصب دستی با Docker Compose،  راهنمای گام‌به‌گام همین صفحه

معرفی

CI سبک برای تیمی که کدش را خودش نگه می‌دارد

پس از هر push، تست‌ها اجرا و ایمیج‌ها ساخته می‌شوند و نتیجه کنار commit در مخزن کد نمایش داده می‌شود؛ با یک فایل YAML و بدون نگه‌داری یک سرور سنگین Java.

نصب یک‌کلیک Woodpecker فعال نیست، چون اتصال OAuth به مخزن کد شما باید دستی ساخته شود. یک سرور ابری با دسترسی root بسازید، Docker را نصب کنید و با راهنمای همین صفحه server و agent را با Docker Compose بالا بیاورید.

امکانات کلیدی

Woodpecker در یک نگاه

  • pipeline در YAML

    تعریف build و تست کنار کد، با شرط برای شاخه، tag و درخواست ادغام.

  • هر step یک ایمیج

    محیط build تمیز و تکرارپذیر؛ نسخهٔ زبان و ابزارها را ایمیج تعیین می‌کند.

  • agent‌های قابل افزودن

    با رشد تیم، agent تازه روی سرور دیگری اضافه کنید تا build‌ها موازی شوند.

۴ گام تا شروع

روش نصب گام‌به‌گام

  1. گام ۱: سرور و Docker

    یک سرور ابری Ubuntu بسازید و Docker و افزونهٔ Compose را نصب کنید. برای server و یک agent روی همان سرور، پلن standard با دو گیگابایت RAM نقطهٔ شروع مناسبی است.

  2. گام ۲: ساخت برنامهٔ OAuth در مخزن کد

    در Gitea‏، Forgejo‏، GitHub یا GitLab یک برنامهٔ OAuth بسازید که آدرس بازگشت آن مسیر authorize روی دامنهٔ Woodpecker باشد و شناسه و رمز آن را یادداشت کنید.

  3. گام ۳: فایل Compose و راه‌اندازی

    در /opt/woodpecker یک فایل Compose با دو سرویس server و agent بنویسید، آدرس عمومی، رمز مشترک agent و مشخصات OAuth را در متغیرها بگذارید و سرویس‌ها را بالا بیاورید.

  4. گام ۴: فعال کردن مخزن و اولین pipeline

    با حساب مخزن کد وارد Woodpecker شوید، مخزن را فعال کنید و یک فایل .woodpecker.yaml با چند step در ریشهٔ آن بگذارید؛ push بعدی pipeline را اجرا می‌کند.

راهنمای کامل

راهنمای کامل Woodpecker CI روی سرور ابری ایران‌کلاد

این راهنما برای تیم توسعه‌ای است که می‌خواهد تست و build را پس از هر push خودکار کند، بدون اینکه کد و secret‌ها به سرویس CI خارجی برود و بدون سنگینی Jenkins. توضیح می‌دهیم Woodpecker چطور کار می‌کند، نصب دستی‌اش روی سرور ابری چه مراحلی دارد، چه پلنی لازم است و چطور امن نگهش دارید. اگر هنوز مخزن کد روی سرور خودتان ندارید، از Gitea شروع کنید.

۹ بخش حدود ۶ دقیقه مطالعه

فهرست مطالب

Woodpecker CI چیست و از کجا آمده است؟

Woodpecker CI یک سرور یکپارچه‌سازی و تحویل پیوسته است که از نسخهٔ متن‌باز Drone منشعب شد، وقتی مسیر Drone به سمت مجوز تجاری رفت. جامعهٔ Woodpecker پروژه را مستقل ادامه داد و امروز با مجوز Apache 2.0 منتشر می‌شود. ایدهٔ اصلی ساده است: هر مرحلهٔ pipeline یک ایمیج Docker است و تعریف کل فرایند در یک فایل YAML کنار کد قرار می‌گیرد.

Woodpecker از دو بخش ساخته شده است. server رابط وب، API، اتصال به سرویس مخزن کد و صف کارها را نگه می‌دارد. agent روی یک سرور دارای Docker اجرا می‌شود، کارها را از server می‌گیرد و step‌ها را در ایمیج‌های مربوط اجرا می‌کند. این جدایی اجازه می‌دهد با رشد تیم agent اضافه کنید بدون اینکه server را تغییر دهید.

مخاطب Woodpecker تیم‌های کوچک و متوسطی هستند که Gitea‏، Forgejo یا GitLab را خودشان میزبانی می‌کنند و یک CI ساده، قابل فهم و کم‌هزینه می‌خواهند.

تیم‌ها Woodpecker را برای چه کارهایی به کار می‌برند؟

کارهای رایجی که در فایل .woodpecker.yaml تعریف می‌شوند:

  • اجرای تست‌ها پس از هر push و نمایش وضعیت کنار commit در Gitea یا GitHub
  • ساخت ایمیج Docker و push به رجیستری هنگام ساخت tag نسخهٔ جدید
  • بررسی درخواست ادغام با lint و تست پیش از تأیید
  • استقرار روی سرور تست با SSH یا rsync پس از ادغام در شاخهٔ اصلی
  • build ماتریسی برای چند نسخهٔ زبان یا سیستم‌عامل به‌صورت موازی
  • کارهای زمان‌بندی‌شده مثل به‌روزرسانی وابستگی‌ها یا اسکن امنیتی شبانه

بازگشت به فهرست مطالب

نصب دستی Woodpecker، گام‌به‌گام

مسیر زیر همان کاری است که اسکریپت آمادهٔ ما انجام می‌دهد، به‌علاوهٔ پیکربندی سرویس مخزن کد که اسکریپت به شما می‌سپارد. روی سرور ابری Ubuntu بسته‌های docker.io و docker-compose-v2 را نصب و سرویس Docker را فعال کنید. با openssl یک رشتهٔ تصادفی ۶۴ کاراکتری بسازید؛ این رمز مشترکی است که agent با آن به server معرفی می‌شود.

در سرویس مخزن کد یک برنامهٔ OAuth بسازید. در Gitea این کار از تنظیمات کاربر و بخش برنامه‌ها انجام می‌شود و آدرس بازگشت باید مسیر authorize روی آدرس عمومی Woodpecker باشد. سپس در /opt/woodpecker یک فایل Compose بنویسید: سرویس server با ایمیج woodpeckerci/woodpecker-server، پورت ۸۰۰۰ برای وب و ۹۰۰۰ برای agentها، متغیر آدرس عمومی، رمز agent، متغیرهای فعال‌سازی Gitea با آدرس و شناسه و رمز OAuth، و یک volume برای پوشهٔ /var/lib/woodpecker. سرویس agent با ایمیج woodpecker-agent، آدرس server روی پورت ۹۰۰۰، همان رمز و دسترسی به سوکت Docker.

با docker compose up -d سرویس‌ها را بالا بیاورید، پورت ۸۰۰۰ را در تب فایروال سرور باز کنید و با حساب مخزن کد وارد شوید. متغیر WOODPECKER_ADMIN را برابر نام کاربری خودتان بگذارید تا مدیر شوید.

موردمقدار پیشنهادینکته
اجراDocker Compose در /opt/woodpeckerserver و agent
رابط وبپورت ۸۰۰۰پشت nginx روی پورت ۸۰ برای دامنه
اتصال agentپورت ۹۰۰۰، gRPCفقط اگر agent بیرونی دارید باز شود
دیتابیسSQLite در /var/lib/woodpeckerبرای تیم کوچک کافی
کار هم‌زمانمثلاً ۴ workflow برای هر agentبر اساس RAM تنظیم شود
ثبت‌نامبستهفقط کاربران مجاز

بازگشت به فهرست مطالب

هزینه و انتخاب پلن

Woodpecker رایگان است و هزینه فقط اجارهٔ ساعتی سرور است. خود server و agent کمتر از چند صد مگابایت حافظه می‌گیرند، اما هر step یک ایمیج Docker تازه بالا می‌آورد و کامپایل یا نصب وابستگی‌ها RAM و دیسک می‌خواهد. پلن mini برای آزمایش و پروژه‌های اسکریپتی کوچک کافی است؛ برای تیم واقعی standard را پیشنهاد می‌کنیم و اگر پروژهٔ Java‏، Android یا Node بزرگ دارید plus.

دیسک را دست‌کم نگیرید: ایمیج‌های Docker و کش‌های build به‌سرعت جمع می‌شوند. یک کرون هفتگی برای پاک کردن ایمیج‌های بی‌استفاده بگذارید. برای مقایسهٔ هزینهٔ یک سرور بزرگ با چند agent کوچک از ماشین‌حساب هزینه کمک بگیرید.

پلنمنابعمناسب برایساعتی (تومان)تقریبی ماهانه (تومان)
mini۱ هسته، ۱ گیگ RAM، ۲۰ گیگ دیسکآزمایش و اسکریپت سبک۱٬۱۰۰۸۰۳٬۰۰۰
standard۲ هسته، ۲ گیگ RAM، ۴۰ گیگ دیسکتیم کوچک۲٬۲۰۰۱٬۶۰۶٬۰۰۰
plus۲ هسته، ۴ گیگ RAM، ۸۰ گیگ دیسکbuild سنگین یا هم‌زمان۳٬۵۰۰۲٬۵۵۵٬۰۰۰

بازگشت به فهرست مطالب

Woodpecker در برابر Jenkins و CI ابری

انتخاب ابزار CI بیشتر به اندازهٔ تیم و محل نگه‌داری کد بستگی دارد:

موضوعWoodpeckerJenkinsCI ابری خارجی
تعریف pipelineYAML کنار کدJenkinsfile یا رابط وبYAML کنار کد
محیط اجراایمیج Docker برای هر stepسرور یا agent‌های شماسرورهای سرویس‌دهنده
منابع serverبسیار کمزیاد، مبتنی بر Javaنامرتبط
افزونه‌هاایمیج‌های آماده، محدودتربسیار گستردهوابسته به سرویس
محل کد و secret‌هاسرور شماسرور شماخارج از کنترل شما

برای مقایسه صفحهٔ Jenkins را ببینید؛ نصب یک‌کلیک Jenkins امروز در صفحهٔ سفارش فعال است.

بازگشت به فهرست مطالب

اولین pipeline را چطور بنویسیم؟

در ریشهٔ مخزن فایلی به نام .woodpecker.yaml بسازید یا اگر چند workflow جدا می‌خواهید، پوشهٔ .woodpecker را با چند فایل YAML. ساده‌ترین شکل یک بخش steps است که هر step نام، ایمیج و فهرست دستورها دارد؛ مثلاً step تست با ایمیج golang و دستور go test. با بخش when تعیین می‌کنید هر step فقط روی شاخهٔ اصلی، روی tag یا روی درخواست ادغام اجرا شود.

برای سرویس‌های کمکی مثل دیتابیس تست، بخش services را اضافه کنید؛ Woodpecker آن‌ها را پیش از step‌ها بالا می‌آورد و با نام سرویس در دسترس می‌گذارد. secret‌ها را در تنظیمات مخزن تعریف و با from_secret به متغیر محیطی step وصل کنید. اگر stepی کند است، ایمیجی بسازید که وابستگی‌ها از پیش داخلش باشند تا هر بار دانلود نشوند.

بازگشت به فهرست مطالب

امنیت Woodpecker: ثبت‌نام، سوکت Docker و HTTPS

اسکریپت آمادهٔ ما ثبت‌نام آزاد را روشن می‌گذارد تا اولین ورود آسان باشد؛ این یعنی هر کسی که در سرویس مخزن کد حساب دارد می‌تواند وارد Woodpecker شود. پس از ورود خودتان، WOODPECKER_OPEN را false کنید یا با متغیر سازمان‌های مجاز، ورود را به اعضای سازمان خودتان محدود کنید.

agent به سوکت Docker دسترسی دارد و هر pipeline عملاً می‌تواند روی آن سرور هر کاری بکند. pipeline مخازن fork‌شده از افراد ناشناس را بدون تأیید اجرا نکنید؛ Woodpecker برای این حالت گزینهٔ نیاز به تأیید دارد. اگر چنین کدی را build می‌کنید، agent را روی سرور جدا بگذارید.

رابط وب روی پورت ۸۰۰۰ و با http کار می‌کند، در حالی که پروکسی لبه فقط به پورت ۸۰ سرور وصل می‌شود. nginx را روی سرور نصب کنید تا پورت ۸۰ را به ۸۰۰۰ برساند، زیردامنه را در DNS به سرور اشاره دهید و پروکسی را روشن کنید. آدرس عمومی Woodpecker و آدرس بازگشت OAuth را هم به همین دامنهٔ https تغییر دهید. پورت ۸۰۰۰ را پس از آن در فایروال ببندید.

بازگشت به فهرست مطالب

بکاپ و انتقال از Drone یا CI دیگر

دادهٔ Woodpecker، یعنی فهرست مخازن، secret‌ها و تاریخچهٔ اجرا، در پوشه‌ای است که به /var/lib/woodpecker سرویس server وصل کرده‌اید؛ با SQLite این یک فایل دیتابیس است. خود pipeline‌ها در مخزن کد هستند و بکاپ نمی‌خواهند. بکاپ کامل سرور را هر وقت خواستید از تب بکاپ پنل بسازید؛ بکاپ خودکار زمان‌بندی‌شده برای سرور ابری فعال نیست و فضای بکاپ ساعتی ۲ تومان به ازای هر گیگابایت حساب می‌شود. جزئیات در صفحهٔ پشتیبان‌گیری.

اگر از Drone می‌آیید، ساختار فایل‌ها بسیار شبیه است و بیشتر pipeline‌ها با تغییر نام فایل و چند کلید کار می‌کنند. از CI ابری خارجی هم انتقال ساده است: هر job را به یک step با ایمیج مناسب تبدیل کنید و secret‌ها را در Woodpecker دوباره بسازید.

بازگشت به فهرست مطالب

محدودیت‌ها را پیش از شروع بدانید

نصب یک‌کلیک Woodpecker فعلاً در صفحهٔ سفارش فعال نیست و راه‌اندازی امروز دستی است. Woodpecker برای ورود به یک سرویس مخزن کد وابسته است و بدون آن کار نمی‌کند؛ اگر کد را فقط روی کامپیوتر خودتان نگه می‌دارید، ابتدا Gitea را راه بیندازید.

Woodpecker به وسعت Jenkins افزونه ندارد و برای سناریوهای خاص، مثل build روی macOS یا ویندوز، به agent جداگانه با backend مناسب نیاز دارید. در شبکه‌هایی که دسترسی به Docker Hub کند یا محدود است، دریافت ایمیج‌ها می‌تواند build‌ها را کند کند؛ یک رجیستری میانی یا ایمیج‌های از پیش دریافت‌شده کمک می‌کند.

بازگشت به فهرست مطالب بازگشت به ابتدای راهنما

پرسش و پاسخ،  ۱۰ پرسش

سؤالات متداول

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

Woodpecker‏، Jenkins یا CI داخلی GitLab؛ کدام را انتخاب کنم؟
Woodpecker سبک است، pipeline را با YAML تعریف می‌کند و هر مرحله را در یک ایمیج Docker اجرا می‌کند؛ کنار Gitea یا Forgejo بهترین جفت را می‌سازد. Jenkins انعطاف و افزونه‌های بسیار بیشتری دارد اما نگه‌داری سنگین‌تری می‌خواهد. CI داخلی GitLab وقتی منطقی است که کد هم در GitLab باشد، چون جدا از آن معنا ندارد.
مدل اجرای pipeline در Woodpecker چگونه است؟
هر step یک ایمیج Docker و چند دستور دارد. مثلاً build در ایمیج node، تست کنار یک سرویس PostgreSQL موقت و استقرار در یک ایمیج سبک با SSH. همهٔ step‌ها یک پوشهٔ کاری مشترک دارند، پس خروجی build در مرحلهٔ بعد در دسترس است. step‌ها می‌توانند به هم وابسته باشند یا موازی اجرا شوند.
به کدام سرویس‌های مخزن کد وصل می‌شود؟
Woodpecker با Gitea‏، Forgejo‏، GitHub‏، GitLab و Bitbucket کار می‌کند. ورود کاربران از طریق همان سرویس انجام می‌شود و Woodpecker هنگام فعال کردن هر مخزن، webhook آن را خودکار می‌سازد. رویدادهای push‏، tag، درخواست ادغام و اجرای دستی می‌توانند pipeline را شروع کنند.
می‌توانم agent بیشتری اضافه کنم؟
بله. agent یک برنامهٔ کوچک است که روی هر سرور دارای Docker اجرا می‌شود و با رمز مشترک به پورت gRPC سرور Woodpecker وصل می‌شود. با برچسب‌گذاری agent‌ها می‌توانید مثلاً build‌های سنگین را فقط به سرور قوی‌تر بفرستید. هر agent سقفی برای تعداد workflow‌های هم‌زمان دارد که خودتان تعیین می‌کنید.
secret‌ها و افزونه‌ها چطور مدیریت می‌شوند؟
secret‌ها مثل رمز رجیستری یا کلید SSH در رابط وب برای هر مخزن یا سازمان تعریف می‌شوند و فقط در step‌هایی که اجازه دارند به‌صورت متغیر محیطی در دسترس‌اند. افزونه‌ها در Woodpecker خودشان ایمیج Docker هستند؛ برای ساخت و push ایمیج، ارسال اعلان یا استقرار، افزونهٔ آماده وجود دارد.
Woodpecker چقدر منابع مصرف می‌کند؟
خود server و agent سبک‌اند و با SQLite پیش‌فرض، چند صد مگابایت RAM کافی است. منابع واقعی را build‌ها مصرف می‌کنند: کامپایل یک پروژهٔ بزرگ Java یا Node، یا چند pipeline هم‌زمان، به RAM و CPU بیشتری نیاز دارد. به همین دلیل در عمل اندازهٔ سرور را بر اساس سنگین‌ترین build انتخاب می‌کنید.
چرا Woodpecker CI نصب یک‌کلیک ندارد؟
اسکریپت نصب Woodpecker آماده است، اما Woodpecker بدون یک برنامهٔ OAuth در Gitea‏، Forgejo‏، GitHub یا GitLab شما اجازهٔ ورود نمی‌دهد و این اتصال را نمی‌شود خودکار در مرحلهٔ سفارش ساخت؛ به همین دلیل در فهرست اپلیکیشن‌های صفحهٔ سفارش نیست. یک سرور ابری معمولی بسازید و با راهنمای همین صفحه Woodpecker را با Docker Compose نصب کنید؛ بیشترین زمان را ساخت برنامهٔ OAuth در مخزن کد می‌گیرد.
هزینهٔ اجرای Woodpecker چقدر است؟
Woodpecker متن‌باز و رایگان است و فقط سرور ابری را ساعتی می‌پردازید. برای server و یک agent روی همان سرور، پلن standard با ۲٬۲۰۰ تومان در ساعت شروع خوبی است؛ اگر build‌های سنگین دارید plus با ۳٬۵۰۰ تومان در ساعت مناسب‌تر است.
چرا Woodpecker پس از اجرا بالا نمی‌آید؟
شایع‌ترین علت این است که هیچ سرویس مخزن کدی پیکربندی نشده است؛ Woodpecker برای ورود کاربران به یک سرویس مثل Gitea یا GitHub نیاز دارد. متغیرهای مربوط به همان سرویس، یعنی فعال‌سازی، آدرس و شناسه و رمز OAuth را در بخش server فایل Compose بگذارید و سرویس را دوباره بالا بیاورید. لاگ سرویس server هم علت دقیق را نشان می‌دهد.
دسترسی agent به Docker خطرناک نیست؟
agent برای ساخت محیط هر step به سوکت Docker سرور دسترسی دارد و این در عمل معادل دسترسی root است. پس pipeline‌های مخازن ناشناس را اجرا نکنید، ثبت‌نام آزاد را ببندید و اگر کد غیرقابل اعتماد build می‌کنید، agent را روی سرور جدایی بگذارید که داده و سرویس مهمی روی آن نیست.

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

build‌های تیم را خودکار کنید

یک سرور ابری standard بسازید و Woodpecker را با راهنمای این صفحه کنار مخزن کدتان نصب کنید.