از اکشن های GitHub برای خودکارسازی CI/CD خود برای برنامه های React و Node.js در اوبونتو استفاده کنید.

معرفی:
یکپارچه سازی مداوم و استقرار مستمر (CI/CD) به جنبه های حیاتی توسعه نرم افزار مدرن تبدیل شده است. با خودکارسازی فرآیندهای ساخت، آزمایش و استقرار، توسعه دهندگان می توانند در زمان صرفه جویی کنند، خطاها را کاهش دهند و برنامه های کاربردی با کیفیت بالا را ارائه دهند. GitHub Actions، یک ویژگی قدرتمند ارائه شده توسط GitHub، به توسعه دهندگان اجازه می دهد تا به راحتی این فرآیندها را خودکار کنند. در این مقاله، نحوه راه اندازی GitHub Actions برای CI/CD برنامه های React و Node.js در محیط اوبونتو را بررسی خواهیم کرد.
پیش نیازها:
قبل از شروع به راه اندازی GitHub Actions، مطمئن شوید که موارد زیر را دارید:
- یک حساب GitHub با یک مخزن برای برنامه React یا Node.js شما.
- درک اولیه از گردش کار Git و GitHub.
- یک ماشین مبتنی بر اوبونتو یا یک ماشین مجازی برای اجرای خط لوله CI/CD.
تنظیم محیط:
- با ایجاد یک دایرکتوری جدید در دستگاه اوبونتو خود برای ذخیره فایل های لازم برای خط لوله CI/CD شروع کنید.
- Node.js و npm (Node Package Manager) را اگر قبلاً نصب نشده اند نصب کنید. با اجرای دستور زیر می توانید این کار را انجام دهید:
sudo apt update
sudo apt install nodejs npm
پیکربندی اقدامات GitHub:
- به مخزن GitHub خود بروید و بر روی تب “Actions” کلیک کنید.
- برای ایجاد یک فایل گردش کار جدید، روی دکمه «تنظیم گردش کار خودتان» کلیک کنید.
- یک نام برای فایل انتخاب کنید، مانند ci-cd.yml، و محتویات را به صورت زیر به روز کنید:
# This workflow is a Continuous Integration/Continuous Deployment (CI/CD) pipeline for deploying a Node.js backend application
# to a remote ubuntu server.
#
# Here are some comments to make it easier for everyone to use:
#
# 1. The workflow uses environment variables to set the application name, component name, and release path.
# Ensure that these are set correctly according to your application's configuration.
#
# 2. The workflow runs on a push to the main branch and can be manually triggered with inputs to specify the target environment.
#
# 3. It's important to note that this workflow uses several secrets that need to be set up
# in order for it to work properly. You will need to create the following secrets in your repository settings:
#
# 3.1. REMOTE_SERVER: the IP address or domain name of the remote server you are deploying to.
# 3.2. REMOTE_USER: the username you use to SSH into the remote server (root user is recommended).
# 3.3. REMOTE_KEY: the SSH private key you use to authenticate with the remote server.
# 3.4. ENV_FILE: the contents of your application's .env file. This should be a single-line string with each
# environment variable separated by spaces.
# 3.5. NGINX_CONFIG: the contents of your NGINX configuration file. This should be a multi-line string with each line
# separated by a newline character.
#
# Overall, this workflow provides a good starting point for deploying a Node.js backend application to a remote server using GitHub Actions.
# However, it should be customized according to your application's specific requirements.
name: 'CI/CD'
env:
APP_NAME: 'node'
COMPONENT_NAME: 'backend'
RELEASE_PATH: /root/node/backend
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# The first step checks out the code from the repository.
- name: Checkout code
uses: actions/checkout@v2
# The second step sets up Node.js with version 16.
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: 16
# The third step transfers the code to the remote server using the Secure Copy (SCP) protocol.
# The source directory is set to .,!./uploads, which excludes the uploads directory from being transferred.
# Ensure that this is set correctly according to your application's file structure.
- name: Transfer files to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.REMOTE_SERVER }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.REMOTE_KEY }}
rm: true
source: '.,!./uploads'
target: ${{ env.RELEASE_PATH }}/build
# The fourth step creates shared folders for the uploads directory and the node_modules directory and creates symbolic links
# to these folders in the current release directory. This helps to ensure that the uploads and node_modules directories
# persist across releases and are not overwritten.
- name: Create shared folders
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_SERVER }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.REMOTE_KEY }}
script: |
cd ${{ env.RELEASE_PATH }}
mkdir -p shared/uploads
mkdir -p shared/node_modules
ln -sfn ${{ env.RELEASE_PATH }}/shared/uploads ${{ env.RELEASE_PATH }}/build/uploads
ln -sfn ${{ env.RELEASE_PATH }}/shared/node_modules ${{ env.RELEASE_PATH }}/build/node_modules
# The fifth step copies configuration files to the remote server, including the .env file and an NGINX configuration file.
# The NGINX configuration file is used to proxy requests to the Node.js backend application.
# Ensure that this is set correctly according to your application and server's configuration.
- name: Copy config files
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_SERVER }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.REMOTE_KEY }}
script: |
echo '${{ secrets.ENV_FILE }}' > ${{ env.RELEASE_PATH }}/build/.env
echo '${{ vars.NGINX_CONFIG }}' > ${{ env.RELEASE_PATH }}/build/nginx.conf
sudo systemctl restart nginx
# The sixth step installs dependencies, builds the application.
- name: Install dependencies
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_SERVER }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.REMOTE_KEY }}
script: |
cd ${{ env.RELEASE_PATH }}/build
yarn install
yarn run build
# The seventh step starts it with PM2.
# PM2 is a process manager for Node.js applications that helps to ensure that the application runs continuously
# and can be easily managed. Ensure that this is set correctly according to your application's dependencies and build process.
- name: Start PM2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_SERVER }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.REMOTE_KEY }}
script: |
cd ${{ env.RELEASE_PATH }}/build
pm2 delete -s ${{ env.APP_NAME }} || :
pm2 start dist/index.js --name "${{ env.APP_NAME }}"
- در پیکربندی بالا، نمونه گردش کار را برای Node.js/Express تنظیم کردیم تا فشارها به
main
شاخه. - را
build
job مخزن را بررسی میکند، Node.js نسخه 16 را راهاندازی میکند، فایلها را به سرور منتقل میکند، وابستگیها را نصب میکند، ساخت و سرویس PM2 را راهاندازی مجدد میکند. - می توانید دستورات استقرار را در مراحل استقرار برنامه خود در ارائه دهنده میزبانی مانند Heroku، Netlify یا AWS اضافه یا تغییر دهید.
اجرای خط لوله CI/CD:
- متعهد شوید و فشار دهید
ci-cd.yml
فایل را در مخزن GitHub خود قرار دهید. - GitHub Actions به طور خودکار گردش کار جدید را شناسایی کرده و خط لوله CI/CD را شروع می کند.
- می توانید پیشرفت خط لوله را در تب “اقدامات” مخزن خود نظارت کنید.
- اگر هر گونه خطایی در مراحل ساخت یا آزمایش رخ دهد، GitHub Actions گزارش های دقیقی را برای کمک به شناسایی و حل مشکلات ارائه می دهد.
نتیجه:
GitHub Actions یک راه راحت برای خودکارسازی خط لوله CI/CD شما برای برنامه های React و Node.js ارائه می دهد. با استفاده از قدرت گردش کار، می توانید در زمان و تلاش خود صرفه جویی کنید و در عین حال کیفیت پایگاه کد خود را حفظ کنید. در این مقاله، نحوه تنظیم یک گردش کار پایه CI/CD با استفاده از GitHub Actions در محیط اوبونتو را بررسی کردیم. با خیال راحت گردش کار را مطابق با نیازهای خاص خود سفارشی کنید و از اکوسیستم غنی GitHub Actions برای بهبود بیشتر فرآیند توسعه خود استفاده کنید.
خودکارسازی مبارک!