Рубрики
Uncategorized

Как настроить конвейер CI / CD для приложения Node.js с действиями GitHub

Действия GitHub Действия GitHub — это инструмент / услуг, который можно использовать для тестирования, сборки и демо … Теги с узлом, GitHub, DevOps, JavaScript.

Действия GitHub

Действия GitHub Это инструмент/услуг, который можно использовать для тестирования, создания и развертывания вашего кода, создавая CI/CD-трубопровод. Это помогает автоматизировать ваш рабочий процесс, как другие инструменты/услуги, такие как Jenkins, gitlab ci, и Т. Д. Действия GitHub использует Ямл Как язык, чтобы написать рабочие места/шаги, которые необходимо выполнить на определенных событиях. Это может быть использовано для многих таких вещей, как развертывание веб-службы, создайте приложение контейнеров, опубликовать пакеты в реестры или автоматизировать приветствия новых пользователей в проекты с открытым исходным кодом. Самая большая функция в действиях GitHub для меня — это матрица сборки (в этом руководстве также я использую это для демонстрации цели). Это означает, что вы можете запустить ваш рабочий процесс, который одновременно проверяет несколько операционных систем и версий вашего времени выполнения. (В качестве примера вы можете запустить рабочий процесс на Windows, Mac и Linux с Nodejs 8.x и 10.x)

Что мы собираемся построить?

Мы собираемся построить простое приложение NODEJS и разместите его (в этом руководстве, я собираюсь использовать экземпляр на цифровой камень. Вы можете использовать все, что вы хотите). Это руководство покажет вам, как настроить и работать с действиями GitHub, чтобы развернуть приложение Nodejs на свой сервер. Всякий раз, когда вы меняете что-то в коде и нажимаете, GitHub будет стрелять событие и начнет делать то, что мы сказали. Здесь мы собираемся установить зависимости, запустите тест, который мы писали, если все тесты пройдены, действие GitHub будет развернуть приложение к серверу. Еще одна бонусная вещь, которую мы собираемся делать здесь, бегите Матрица сборки . Это означает, что мы проводим наши тесты на нескольких версиях Nodejs. (Вы также можете использовать несколько операционных систем). Это поможет нам подтвердить наше приложение работает на (несколько операционных систем) и нескольких версий NODEJS без проблем.

Создайте приложение Nodejs

Как первое в этом руководстве, мы собираемся создать приложение Nodejs локально. Здесь мы просто создаем простое приложение, которое отвечает «Hello World» текст. Во-первых, мы создадим наш репозиторий GitHUB. На приведенном ниже скриншоте покажут, как я это сделал. Вы можете изменить настройки, как вы хотите, например, для настройки Частная/публика Доступность вашего репозитория.

Теперь давайте клонировать репозиторий и перейти к нему:

git clone [git@github.com](mailto:git@github.com):/node-github-demo.git
cd node-github-demo

Затем запустите ниже команды для создания package.json Файл и добавьте необходимые зависимости и другое содержимое, а затем выполните следующую команду для установки зависимостей. Вот несколько описаний пакетов, которые мы используем.

npm init // fill the required things CLI asked
npm i express
npm i mocha supertest --save-dev
  • Экспресс : Узел Framework

  • моча : Тестовые рамки для NODEJS (вы можете выбрать другую структуру тестирования, если вы хотите, чтобы Жасмин, шума, ленту и т. Д.)

  • Супертест : Предоставить абстракцию высокого уровня для тестирования http

    Установка NPM

Хорошо, теперь все готово. Давайте создадим файл под названием index.js Чтобы написать код для создания экспресс-сервера и показать «Привет мир» текст как ответ «/» конечная точка.

    // importing express framework
    const express = require("express");

    const app = express();

    // Respond with "hello world" for requests that hit our root "/"
    app.get("/", function (req, res) {
     return res.send("Hello World");
    });

    // listen to port 7000 by default
    app.listen(process.env.PORT || 7000, () => {
      console.log("Server is running");
    });

    module.exports = app;

Теперь вы можете запустить вышеуказанный код, используя команду ниже. Затем посетите http://localhost: 7000 Чтобы увидеть вывод «Hello World».

node index.js

Писать тестовые случаи

Теперь мы собираемся написать тестовый случай, чтобы проверить наше «/» Ответ конечной точки равен «Hello World» Отказ Для этого давайте создадим папку под названием /test/ и создать файл под названием test.js внутри этого. Теперь давайте напишем тестовый код как ниже.

    const request = require("supertest");
    const app = require("../index");

    describe("GET /", () => {
      it("respond with Hello World", (done) => {
        request(app).get("/").expect("Hello World", done);
      })
    });

Чтобы запустить тесты, добавьте ниже содержимое для вашего package.json файл.

"scripts": {
    "test": "mocha ./test/* --exit"
}

Теперь просто запустите ниже команду, чтобы запустить тестовые случаи, которые вы написали, чтобы увидеть, передается ли он или нет.

npm test

Вот выход.

Теперь мы можем протолкнуть наши изменения в репозиторий GitHub, который мы создали. До этого создать .gitignore Файл и добавление файлов/папок необходимо игнорировать из репозитория Git. Вот мой пример **. Gitignore ** Файл, который я использовал в этом руководстве. Теперь давайте нажимаем файлы в Github.

git add .
git commit -m "node app with test cases"
git push origin master

Создайте наш сервер (Digitalocean)

Хорошо, теперь мы закончили писать наше приложение Nodejs и должны создать сервер, чтобы развернуть его, чтобы служить в мире. В этом случае, как я уже говорил ранее, я собираюсь использовать Digitalocean капля в этом руководстве. Ниже скриншотов покажет вам, что нужно заполнить, когда вы создаете капельку в Digitalocean И как это выглядит так, как вы создаете это. В этом руководстве я использую существующие капельку изображения Nodejs через Digitalocean М * arkeplace. . Вы можете сделать то же самое, навигацию на ** Create (из верхней панели) — > Капельки -> Marketplace *

Примечание. Когда вы создаете капли, выбрав опцию аутентификации AS SSH Key. , вам нужно добавить локальную машину SSH ключа в капельку. Чтобы сделать то, что сначала генерируют его, а затем скопируйте его и вставьте * (Чтобы вставить щелчок новой кнопки SSH) *. Для генерации и получения копии вашего ключа SSH запустите следующие команды.

Примечание. Здесь я использую Linux. Если вы находитесь на разных ОС, это будет немного по-другому. Это хорошо работает на Linux и Mac.

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub

Развернуть приложение Nodejs на сервере

Теперь нам нужно развернуть наше приложение на нашем сервере Digitalocean. Для этого мы собираемся создать новый пользователь.

ssh root@SERVER.IP
adduser 
usermod -a -G sudo 
su — username

Запустите команды ниже, чтобы предоставить этот доступ пользователя доступ через SSH без пароля. Затем вы можете легко войти на сервер, запустив SSH @ Server.IP.

cd
mkdir .ssh
chmod 700 .ssh/
vim ~/.ssh/authorized_keys # here paste your local ssh key as we did earlier
chmod 600 ~/.ssh/*

Теперь установите Git на сервере. Затем потяните исходный код и запустите его на сервере.

sudo apt-get install git
ssh-keygen
cat ~/.ssh/id_rsa.pub #copy the text

Теперь мы скопировали наш новый пользователь SSH ключ. Просто вставьте его как клавишу развертывания репозитория GitHUB. Затем клонируйте репозиторий и запустите его на сервере.

git clone [git@github.com](mailto:git@github.com):/node-github-demo.git
cd node-github-demo
npm install --production
sudo ufw allow 7000 # this will open port 7000 to access via web
sudo npm install pm2 -g
pm2 start index.js --name node-app

Теперь наше приложение работает через PM2 в качестве узла-приложения. Просто добрался до http://server.ip: 7000 Чтобы проверить это.

Приложение работает!

Создайте CI/CD-трубопровод на Действия GitHub

Сначала добавьте следующие секреты для использования с помощью сценария рабочего процесса GitHub Actions. Чтобы получить SSH_KEY, просто запустите следующую команду на локальном компьютере, который уже имеет доступ к серверу Digitalocean. Затем скопируйте содержимое и вставьте значение в секрет SSH_KEY.

cat ~/.ssh/id_rsa

Теперь мы можем создать наш GitHub Actions CI/CD-трубопровод. Просто перейдите на репозиторий и нажмите «Действия».

Нажмите на установку Node.js кнопку Workflow. И это откроет текстовый редактор. Вставьте следующий файл YML.

name: Node Github CI

on:
  push:
    branches:
      - master

jobs:
  test:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [8.x, 10.x, 12.x]

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - name: npm install and test
      run: |
        npm install
        npm test
      env:
        CI: true

  deploy:
    needs: [test]
    runs-on: ubuntu-latest

    steps:
    - name: SSH and deploy node app
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USERNAME }}
        key: ${{ secrets.SSH_KEY }}
        port: ${{ secrets.SSH_PORT }}
        script: |
          cd ~/node-github-demo
          git pull origin master
          npm install --production
          pm2 restart node-app

Я объясню вышеуказанную yamlcontent.

Линия 1: Имя Установите имя рабочего процесса. Строка 3-6: включена, какая мероприятие GIT нам нужно для запуска заданий. Здесь мы установили, когда что-то нажата на ветку Master, выполните следующие задания (в этом случае тесты и развертывание). Строка 8-28: Здесь, на рабочих местах, которые мы создали работу под названием Test. Настройка прогонов мы можем установить бегун. В этом случае мы установили его на Ubuntu. Мы можем использовать Windows, Mac, если мы хотим. Установив astrategy, мы можем установить матрицу сборки. Он использует для запуска этого тестового задания в разных версиях узла в этот момент. В разделе SETPS мы можем установить разные задачи, которые нам нужно работать на определенной работе (в этом случае задание теста).

    uses: actions/checkout@v2

По установке использования мы можем запускать разные действия. Вышеуказанные случаи, мы проверяем копию репозитория. В следующей строке мы установили имя для этой задачи. В следующей строке мы использовали следующее действие установки-узла с тегом Git V1. Кроме того, мы пропустили входной параметр для действий, называемых узлом-версией. В этом случае для матрицы строятся, мы должны динамически устанавливать эту версию.

    uses: actions/setup-node@v1
    with:
      node-version: ${{ matrix.node-version }}

Также в следующей строке мы также установили имя для этой задачи. После этого по установке запустите мы работали несколько команд на оболочке операционной системы. В этом случае это, Ubuntu. Установив ENV, у нас есть переменная CI ENV для True (мы можем установить любые другие переменные среды, когда мы хотим). Линия 30-46: Мы создали другую работу под названием развертывание. В этом случае мы также использовали тот же синтаксис, как указано выше. Только новое, что мы использовали, нуждается. Он использует, чтобы сказать, если пройдено только определенные работы или задания, а затем только запускать эту работу. В нашем случае развертывание задание работает только при прохождении задания теста. В этом случае мы использовали другое действие GitHub под названием AppleBoy/SSH-Action @ Master. Для него необходимо несколько входных параметров, мы установили это. (В этом случае это SSH-хост, ключ, имя пользователя, порт и скрипт, который необходимо запустить на сервере после подключения к нему через SSH).

Затем нажмите «Пуск» и совершить изменения. Теперь он будет запустить скрипт. чтобы увидеть изменения. Давайте сделаем изменение исходного кода и подтолкнуть его в мастер.

Здесь вы можете увидеть наш тест не удался. Как то, он не запустил развертывание. в рабочем процессе YML мы установили

    deploy:
        needs: [test]

Как это, deployJob работает только при прохождении testjob. Таким образом, мы можем теперь обновить тест и повторно проверять его.

Да, сейчас это работает! Он также управлял работой развертывания. Мы можем увидеть наши изменения, посетив Toserver.IP: 7000

Примечание: В этом руководстве я использовал MatrixBuild для Действия GitHub Отказ Это означает, что он будет запустить тест (в этом случае) на Разные версии Nodejs . Мы можем расширить это, чтобы работать на разных версиях Nodejs в разных операционных системах. Узнайте больше об этом здесь

Список литературы: https://medium.com/@mosheezderman/how-to-set-up-ci-cd-pipeline-for-a-node-js-app-with-jenkins-c51581cc783c

https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions

https://help.github.com/en/actions/language-and-framework-guides/using-nodejs-with-github-actions

Особая спасибо пойти на Appleboy Кто создал действие Github с развертыванием SSH.

Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.

Исходный код

Следуй за мной Твиттер Подключите меня с Linkedin.

Первоначально опубликовано на Середина

Оригинал: «https://dev.to/chathula/how-to-set-up-a-ci-cd-pipeline-for-a-node-js-app-with-github-actions-32h0»