CI/CD интеграция сайта из GitLab по FTP

11.11.2021

Ранее уже описывал как настроить CI/CD интеграцию своего сайта из GitHub репозитория на сервер CI/CD интеграция сайта из GitHub по FTP

Из указанной статьи можно взять описание структуры проекта, дальше же, с GitLab все гораздо чем с GitHub.

При работе с GitLab не нужно устанавливать Jenkins и подобные инструменты для сборки проекта, у GitLab уже есть свои сервера с докерами и пайплайны запускаются и отслеживаются прямо в их вэб интерфейсе.

Для старта CI/CD интеграции нужно просто создать файл .gitlab-ci.yml в корне проекта. Для более быстрого понимания и создания его содержимого можно использовать шаблон, для этого переходим в свой проект, раздел CI/CD -> Pipelines и выбираем подходящий для проекта шаблон, например Nodejs, указываем ветку репозитория для пайплайна и жмем кнопку Commit changes.

В файл .gitlab-ci.yml будут добавлены настройки просто для прогона пайплайнов и вывода сообщений, чтобы что-то компилировалось нужно добавить команды в раздел

script:

Перед этим в начало файла или перед stages: нужно добавить нужную версию окружения, в случае Nodejs:

image: node:latest

либо указать конкретную версию:

image: node:10.24.1

Затем уже добавляем команды:

Например, для проверки успешности установки зависимостей:
install-job:
  stage: install
  script:
    - npm i
    - echo "npm install completed"

Шаг создания билда может выглядеть так:

build-job:
  stage: build
  script:
    - echo "Compiling the code..."
    - npm i
    - npm run build
    - echo "Compile complete."

Вышеуказанные скрипты выглядят просто, но самое интересное это деплой проекта, то есть загрузка его по FTP, для этого можно использовать lftp и перед этим его сначала нужно установить и затем уже запустить в верном синтаксисе, общий вид стейджа выглядит так:

deploy-job:      # This job runs in the deploy stage.
  stage: deploy
  before_script:
    - npm i
    - npm run build
    - echo "Installing lftp..."
    - apt-get update -qy
    - apt-get install -y lftp
  script:
    - echo "lftp installed. Deploying application..."
    - lftp -e "open [ip или домен]; user $USER $PASS; mirror -X .* -X .*/ --reverse --verbose --delete build/ public_html/; bye"
    - echo "Application successfully deployed."

Вместо $USER и $PASS можно не указывать логин пароль открыто, особенно если у вас публичный репозиторий. Для этого на GitLab нужно перейти в CI/CD проекта и в разделе Environment variables добавить эти переменные без знака $, для пароля лучше переключить в Protected.

mirror с параметром --reverse не зеркалит данные с сервера, а загружает их на сервер, с помощью параметра -x dir можно исключить папку из загрузки

mirror -x assets/

Для загрузки одного файла проще использовать команду put:

put server.js

После создания всех нужных стейджей нужно проверить, чтобы их названия присутствовали в блоке stages: в верном порядке

stages:          # List of stages for jobs, and their order of execution
  - install
  - test
  - build
  - deploy


Рейтинг: