بعید می دونم که کسی به عنوان یک sysadmin
یا devops
مشغول به کار باشد و با واژه CI/CD
و مفهوم آن آشنایی نداشته باشد. در واقع مفاهیمی که در دل devops
زاده شده اند برای توسعه و راه اندازی هرچه بهتر و سریعتر برنامه ها در بوده اند.
برای درک بهتر سرویس drone
لازم است تا با مفاهیمی آشنا باشیم. پس با این مفاهیم شروع می کنیم.
برنامه git
برنامه ای کاربردی و پر استفاده برای کنترل و مدیریت کدهای برنامه بین اعضاء یک تیم برنامه نویسی است.
واژه CI/CD
به فرایندی که با هماهنگی بین توسعه دهنده برنامه و مدیر سیستمی که قرار است برنامه روی ان اجرا شود، پیاده سازی می گردد. این فرایند کاملا سیستمی و بدون دخالت انسان انجام می شود.
معمولا این فرایند به گونه ای دیده می شود که گام های تصویر زیر را انجام دهد:
ابزار CI/CD
ابزارهای 'CI/CD' برای کمک به تیم توسعه و تیم زیرساخت برای طی فرایند توسعه برنامه، انتقا و اجرای نهایی آن در بستر مورد نظر می باشد. از جمله این ابزارها می توان موارد زیر را نام برد:
در بین ابزارهایی که در بالا ذکر شدند، در این نوشته قصد داریم تا درباره Drone CI
صحبت کنیم. یکی از ویژگی های این ابزار، انجام مراحل Ci
در قالب ایمیج های داکر می باشد. به طور مثال، ممکن برنامه شما از روند گیت مشخصی پیروی کنه که در آن زمانی پروژه باید به اجرای نهایی یا تجاری رود که توسعه دهنده روی برنچ مستر پوش و یک تگ یا نسخه بزند، در مرحله بعد باید کدهای برنامه build
شوند، سپس تست های مد نظر و لازم روی آن کدها اجرا شوند، در صورتی که مشکلی نبود آن نسخه نهایی روی سرور های نهایی یا تجاری ارسال، جایگزین نسخه قبلی و اجرا شوند.
پس همانطور که بیان شد، تمامی مراحل بالا در قالب یک یا چند کانتینر در داکر (خود drone
آن کانتینر ها را ایجاد، مدیریت می کند) اجرا خواهند شد
نصب drone
کار بسیار راحت و ساده ای می باشد. برای انجام آن کافی هست تا کانتینر آن را اجرا کنید. برای اجرا کافی هست فقط روی سروری که روی آن سرویس docker-engin
وجود داشته باشد، یک فایل docker-compose.yml
ایجاد و آن را اجرا نماید:
version: "3.5"
services:
drone-server:
image: drone:1
container_name: drone-server
ports:
- 8081:80
environment:
DRONE_SERVER_HOST: drone.ci
DRONE_SERVER_PROTO: http
DRONE_RPC_SECRET: 7cd19b43db8d8b9ffg55048c57ecf9fc
DRONE_GITLAB_CLIENT_SECRET: ${GITLAB_CLIENT_SECRET}
DRONE_GITLAB_CLIENT_ID: ${GITLAB_CLIENT_ID}
DRONE_GITLAB_SERVER: ${GITLAB_SERVER}
DRONE_DATABASE_DRIVER: "mysql"
DRONE_DATABASE_DATASOURCE: "usr_drone:123456321@tcp(127.0.0.1:3306)/drone?parseTime=true"
volumes:
- ./db/dronesrv:/data
depends_on:
- mysql_db
mysql_db:
image: mariadb:10.3
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: p@ssw0rd
MYSQL_DATABASE: drone
MYSQL_USER: usr_drone
MYSQL_PASSWORD: 123456321
volumes:
- ./db/dronesrv:/var/lib/mysql
نکته این که در این سناریو از دیتابیس mariadb
برای نگهداری اطلاعات drone
استفاده می شود. در نهایت با دستور زیر اجرا می شود:
docker-compose up -d
زمانی که سرور را راه اندازی می کنید، یک پنل در آدرس تنظیم شده، برای استفاده مهیا می گردد که از طریق آدرس تنظیمی در پارامترهای سرور قابل دسترس بوده و ریپوهایی که کاربر شما در گیت لب به آن ها دسترسی دارد، نمایش داده و یک سری امکانات مدیریت برای drone ci
را در اختیار شما قرار می دهد.
این سرویس صرفا از سرور به طور مستمر در حال سوال پرسیدن هست تا کارهای قابل انجام، را روی خودش دریافت و شروع به انجام آنها کند. agent
یا runner
دارای انواع مختلفی به ترتیب زیر، در drone
هستند:
در این سناریو ما از Docker runner
استفاده می کنیم. برای این مهم در یک فایل docker-compose.yml
موارد زیر را ذخیره و اجرا می کنیم.
version: "3.5" services: drone-agent: image: drone-runner-docker:1 container_name: dron-agent depends_on: - drone-server volumes: - /var/run/docker.sock:/var/run/docker.sock - ./dockerconfig.json:/root/.docker/config.json:ro ports: - 3000:3000 environment: DRONE_RPC_PROTO: drone.ci DRONE_RPC_HOST: http DRONE_RPC_SECRET: 7cd19b43db8d8b9ffg55048c57ecf9fc DRONE_RUNNER_CAPACITY: 5 DRONE_RUNNER_NAME: runn-drone
تا اینجا با هم یک سری مفاهیم اولیه CI/CD
و DevOps
آشنا شدیم و بعد از آن سرور drone
را در بستر Docker
برای Gitlab
راه اندازی کردیم و سپس اجرا کننده آن را نیز با Docker
و روی Docker
راه اندازی شد.