۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

خودکارسازی CI/CD با GitHub Actions

معرفی سریع و ملایم GitHub Actions، چارچوب اصلی CI/CD برای GitHub.

معرفی سریع و ملایم GitHub Actions، چارچوب اصلی CI/CD برای GitHub.

خودکارسازی و ساده‌سازی چرخه عمر توسعه نرم‌افزار از طریق یکپارچه‌سازی مداوم و تحویل مداوم (CI/CD) امروزه سنگ بنای توسعه نرم‌افزار است. یکی از ساده‌ترین ابزارها برای CI/CD، GitHub Actions است، یک چارچوب گردش کار که در GitHub تعبیه شده است. این مقاله مقدمه ای ملایم و کاربردی برای استفاده از GitHub Actions ارائه می دهد.

شروع به کار با GitHub Actions

GitHub Actions یک پلت فرم CI/CD است که توسط GitHub توسعه یافته و نگهداری می شود. عملکردها در این چارچوب در فایل‌های YAML که در فهرست /workflows پروژه قرار گرفته‌اند، تعریف می‌شوند. هنگامی که شخصی به پروژه ورود می کند، GitHub به طور خودکار اقدامات تعریف شده را اجرا می کند.

واسط وب GitHub شامل پشتیبانی از GitHub Actions است که راهی سریع برای خیس کردن پاهای شما با این پلتفرم است. شما به یک حساب GitHub نیاز دارید که رایگان و آسان برای راه اندازی است.

هنگامی که یک حساب کاربری دارید، یک مخزن خالی ایجاد کنید. این جایی است که برخی از اقدامات را آزمایش خواهید کرد. از داشبورد اصلی، روی دکمه جدید در صفحه مخزن سمت چپ کلیک کنید. (همچنین می‌توانید با کلیک بر روی نماد حساب خود در گوشه سمت راست بالا و انتخاب مخزن‌های شما به صفحه مخزن خود بروید.) هنگام ایجاد مخزن، می‌توانید از هر نامی که به یاد دارید استفاده کنید (مال من infoworld-actions است). این تنها فیلد ضروری است.

یک گردش کار ساخت ساده

اکنون، GitHub شما را به مخزن می برد، جایی که باید متوجه تب Actions شوید. روی آن کلیک کنید. همانطور که در شکل ۱ نشان داده شده است، فهرستی از الگوهای از پیش ساخته شده را مشاهده خواهید کرد.

ga fig1

شکل ۱. گالری قالب GitHub Actions

برای شروع به کار ساده ای می پردازیم. روی دکمه پیکربندی در کارت Simple Workflow کلیک کنید. با این کار جزئیات الگو، همانطور که در شکل ۲ نشان داده شده است، باز می شود.

ga fig2

شکل ۲. جزئیات ساده گردش کار

توجه داشته باشید که الگو در حال ایجاد یک فایل در infoworld-actions/.github/workflows/blank.yml است. این دایرکتوری پیش فرض برای GitHub Actions است. شما می توانید نام فایل را هر چیزی نامگذاری کنید و می توانید بیش از یک فایل گردش کار داشته باشید. لیست ۱ بدنه یک عمل را نشان می دهد. هر زمان که شخصی به شعبه اصلی مراجعه می کند، این اقدام چند مرحله اساسی را انجام می دهد. این به اندازه کافی ساده است که به ما نگاه خوبی به خطوط کلی یک عمل بدهد.


# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the "main" branch
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v3

      # Runs a single command using the runners shell
      - name: Run a one-line script
        run: echo Hello, world!

      # Runs a set of commands using the runners shell
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.

علاوه بر نام گردش کار (که می تواند هر چیزی باشد)، یک ورودی در YAML وجود دارد. هر مورد در این لیست چیزی را تعریف می کند که اتفاق خواهد افتاد. در GitHub Actions، به اینها تریگر می گویند. در این مورد، دو محرک وجود دارد: push و pull_request. اینها به این معنی است: هنگامی که یک درخواست فشار یا کشش اتفاق می افتد، کاری انجام دهید. آرایه زیر مشخص می کند که چه شاخه هایی را تماشا کنیم. در این مورد، main.

FerretDB منبع باز «جایگزینی دراپ» را برای MongoDB ارائه می دهد

بعد از اینکه چه زمانی اتفاق می افتد را تعریف کردیم، چه اتفاق می افتد را تعریف می کنیم. این کار با ورودی jobs انجام می شود. هر کار یک تکه مجزا از کار است و به طور پیش فرض به صورت موازی اجرا می شود. (اگر نیاز دارید که آنها را به صورت همزمان اجرا کنید، می توانید بگویید که یک کار به دیگری بستگی دارد با قرار دادن کلمه کلیدی نیازها در کار و ارجاع به نام شغل دیگری. برای اطلاعات بیشتر در مورد استفاده از مشاغل در یک گردش کار.)

در این مورد، ما یک کار را تعریف کرده‌ایم، build، که از فیلد runs-on برای تعریف اینکه از چه نوع کانتینر Docker هنگام چرخش استفاده می‌کند استفاده می‌کند. ایجاد یک محیط زمان اجرا می توانید از هر تصویری که در Docker Hub یافت می شود استفاده کنید. در این مورد، ما از آخرین‌ترین ubuntu استفاده می‌کنیم.

درباره مشاغل

مراحل یک کار به صورت متوالی انجام می شود. در این مثال، اولین مرحله یک ورودی uses است که با یک اقدام داخلی تماس برقرار می کند، مانند این: actions/checkout@v3. کنش‌ها به شما امکان می‌دهند به عملکردی که از پیش ساخته شده است تکیه کنید. اینها می توانند داخلی باشند، مانند آنچه در این مثال می بینیم، یا به صورت سفارشی تعریف شوند. پیشوند actions/ به این معنی است که این اقدامی است که GitHub شامل آن می شود. در این مورد، این عمل checkout، نسخه ۳ است. این عملکرد شبیه یک اسکریپت در یک فایل NPM package.json است زیرا یک عملکرد جاوا اسکریپت است. (برای آشنایی با انواع کنش‌ها موجود در GitHub Actions.)

معرفی Redwood.js: توسعه سریع برنامه با React

بعد از اینکه کار از شاخه اصلی بررسی شد، دو مرحله را انجام می‌دهد که کار در ورودی run انجام می‌شود. هر دوی اینها کارهای اکو ساده ای هستند که هنگام اجرا محتوای متنی خود را خروجی می دهند.

فایل گردش کار را با کلیک کردن روی Commit Changes، افزودن یک پیام commit ساده، و کلیک مجدد روی Commit Changes متعهد کنید.

جریان کار را اجرا کنید

بیایید این گردش کار را در عمل تماشا کنیم. می‌توانیم با باز کردن مخزن و در برگه کد روی پیوند ایجاد فایل یا افزودن README.md یک بررسی سریع ایجاد کنیم. > دکمه. اکنون، می‌توانید یک فایل متنی ساده بسازید، همانطور که در شکل ۳ انجام داده‌ام، و آن را commit کنید. رابط کاربری وب GitHub به طور خودکار فایل جدید را ایجاد، اضافه، متعهد و فشار می دهد و با زدن تریگر فشاری که به تازگی ایجاد کرده ایم.

ga fig3

شکل ۳. یک فایل برای راه اندازی عمل اضافه کنید

می‌توانیم دوباره آن فعالیت را در برگه اقدامات مشاهده کنیم. همانطور که در شکل ۴ نشان داده شده است، وقتی برگه را باز می کنید، اکنون لیستی از گردش کار را مشاهده خواهید کرد.

ga fig4

شکل ۴. فهرستی از تمام گردش کار اجرا شده

اجرای فعلی برچسب “Create README.md” (یا هر فایلی که ایجاد کردید) است. برای مشاهده جزئیات اجرا روی آن کلیک کنید. می‌بینید که هر کار در گردش کار دارای جزئیاتی است که با بزرگ کردن پیکان قابل دسترسی است. همانطور که در شکل ۵ نشان داده شده است. این به شما امکان می دهد خروجی حاصل از بررسی پروژه و عبارت echo را که “Hello, world!” به کنسول.

ga fig5

شکل ۵. جزئیات یک گردش کار ساده

از GitHub Actions برای ایجاد یک برنامه React استفاده کنید

اکنون بیایید چیز بلندپروازانه‌تری را امتحان کنیم و یک برنامه React با الگوی create-react-app ایجاد کنیم. ما یک تست ساده در Jest و یک گردش کار تعریف می کنیم که وقتی پروژه تحت فشار قرار می گیرد، آزمایش را اجرا می کند. برای انجام این کار، از ابزار create-react-app از خط فرمان استفاده خواهیم کرد. شما باید Node، NPM و NPX را نصب کنید (فرمان npm i -g ngx است). از آنجا، همانطور که در لیست ۲ نشان داده شده است، می توانیم برنامه را شروع کنیم.


$ npx create-react-app infoworld-actions

Creating a new React app in /infoworld-actions.

برنامه جدید شامل یک تست واحد ساده در src/App.tests.js خواهد بود. پس از تولید، می توانید آزمایش را با: $npm test اجرا کنید و آزمون با موفقیت انجام می شود. آزمایش پیوند را در رابط کاربری پیش‌فرض با متن «learn react» بررسی می‌کند. اگر متن دکمه را در src/App.js به “Learn Kung Fu” تغییر دهیم، آزمون ناموفق خواهد بود.

نحوه استفاده از Rust با Python و Python با Rust

اکنون اجازه دهید فایل گردش کار را همانطور که در فهرست ۳ نشان داده شده است به .github/workflows/runtest.yml اضافه کنیم.


name: Run tests on push

on:
  push:
    branches: ["main"]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v1
        with:
          node-version: 16.13.1
      - run: npm install
      - run: npm test
    if: success()

اکنون، به GitHub برگردید و یک مخزن جدید راه اندازی کنید و URL آن را بگیرید.

در نهایت، این پروژه را به مخزنی که ایجاد کردیم مرتبط کنید و آن را فشار دهید، همانطور که در فهرست ۴ نشان داده شده است. در این مثال، من از یک نشانه دسترسی شخصی استفاده می‌کنم اما SSH به همان خوبی کار می‌کند. اگر از یک نشانه استفاده می‌کنید، به مجوزهای حوزه گردش کار نیاز دارد.


git add .
git commit -m "init"
git remote add origin https://<username>:<token>@github.com/<username>/<reponame>
git branch -M main
git push -u origin main

هنگامی که پروژه را فشار دادید، می‌توانید یک تغییر کوچک برای راه‌اندازی گردش کار و فشار مجدد ایجاد کنید، و همانطور که در شکل ۶ نشان داده شده است، فعالیت را در قسمت عملیات مخزن خواهید دید.

ga fig6

شکل ۶. فعالیت گردش کار جدید

می‌توانید برای جزئیات در جریان کار بررسی کنید، ببینید که پروژه را با موفقیت بررسی کرده است، Node.js را نصب کرده است، وابستگی‌ها را نصب کرده است، آزمایش‌ها را اجرا کنید و تست شکست خورده را به همراه جزئیات آن خروجی بگیرید، همانطور که در شکل نشان داده شده است. ۷.

ga fig7

شکل ۷. جزئیات اجرای آزمایشی

نتیجه گیری

این مقاله مقدمه‌ای سریع و آسان برای اصول GitHub Actions، از جمله موارد استفاده بسیار رایج “test upon checkin” و یک گردش کار ساده برای ایجاد و اجرای یک برنامه React بود. با GitHub Actions می‌توانید کارهای بیشتری انجام دهید، از جمله ادغام تغییرات در شاخه‌ها و فشار دادن بیلدهای تولید به محیط‌های میزبان. اگر قبلاً در GitHub کار می‌کنید و به راهی برای خودکارسازی فرآیندهای CI/CD خود نیاز دارید، GitHub Actions راه حلی است.