Зачем нам нужен ci/cd? Не знаю. Спрошу Chat GPT 3.5.
- Ускорение процесса разработки
- Облегчение интеграции кода
- Уменьшение ошибок и повышение качества
- Упрощение развертывания
- Быстрый отклик на изменения
Действительно, без CI/CD задача развертывания кода выглядит не так уж просто. Нужно каждый раз при вношении изшменений заходить на сервер, подтягивать и перезапускать.
Простая реализация
Для демонстрации процесса ci/cd я решил развернуть простое nodejs приложение с github actions. Эту платформу я выбрал как решение от самого популярного сервиса для хранения кода.
Репозиторий: https://github.com/aintproud/node_ci
Делаем приложение
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World! Finnaly? Yeah!');
});
const port = 3000;
server.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
Это самый простой сервер на nodejs. Запускаем на localhost:3000, на запрос получаем Hello, World! Finnaly? Yeah!
Пишем deploy.yml
Делаем папку .github/workflows и в ней deploy.yml
name: Self-Hosted Workflow
on:
push:
branches:
- main
jobs:
deploy:
runs-on: self-hosted
timeout-minutes: 5
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '18'
- uses: actions/setup-node@v2
- name: Dependencies installation
run: npm ci
- name: Start app
run: pm2 restart index.js --name=default
Тут все элементарно: устанавливаем зависимости и запускаем процесс в pm2 (просто запустить node не получится, так как step не будет исполнен), можно сделать и с docker.
Размещение на github
Как сделали репозиторий, нужно установить worker