Перейти к основному содержимому

Настройка CI/CD в GitLab

· 3 мин. чтения
Дмитрий Киверин
Дикий программист

Для выполнения каких-либо заданий в рамках пайплайна CI/CD GitLab’у требуется раннер, на котором он будет выполнять работу. Подойдёт вариант с отдельной ВМ, на которой будут выполняться все работы. Характеристика машины:

  • 2 ядра CPU
  • 4 ГБ RAM
  • 40 ГБ свободного места
  • ОС Ubuntu 22.04 LTS.

На машине должны быть установлены:

  • Bash
  • Git версии 2.18.0 или выше
  • GPG
  • Docker Engine

Подготовка программного окружения на машине

1. Установить Git

sudo apt install git

2. Установить GPG

sudo apt install gpg

3. Установить Docker Engine

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

Добавить GPG-ключ для проверки подписей устанавливаемых пакетов

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Подключить новый репозиторий:

  echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновить патекы

sudo apt-get update

Установить Docker Engine

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Проверить работу

sudo docker run hello-world

Установить Node.js, yarn

1. Установить curl

sudo apt install curl

2. Загрузить скрипт

curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash

3. Перезагрузить оболочку

source ~/.bashrc

4. Получить список доступных версий

nvm list-remote

5. Установить нужную версию

nvm install [version.number]

6. Проверить установленные версии

node -v && npm -v

7. Импортировать ключ репозитория

 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -

8. Обновить список пакетов

sudo apt update

9. Установить yarn

sudo apt install yarn

Установка, настройка и подключение GitLab Runner

  1. Создать новый проект или выбрать созданный на сервере GitLab
  2. Перейти в меню Settings -> CI/CD. Открыть Runners и нажать Create project runner
  3. На открывшейся странице добавить tag и нажать Crate runner
  4. На странице регистрации скопировать команду Регистрация руннера
  5. Перейти на виртуальную машину и выполнить скопированную команду
  6. Для проверки регистрации выполнить команду
gitlab-runner run

SSH подключение к удаленному серверу

  1. Создать ключи.

    ssh-keygen -t ed25519 -C "комментарий к ключу"
  2. Создать на удаленном сервере файл с ключом.

  • На удаленном сервере перейти в домашний каталог нужного пользователя: cd /home/user (замените user на имя пользователя).
  • Если файла ~/.ssh/authorized_keys нет, создайть его: mkdir -p ~/.ssh/ && touch ~/.ssh/authorized_keys.
  • Записать содержимое открытого ключа (например, из файла ~/.ssh/user_key_name.pub) в файл ~/.ssh/authorized_keys. Для этого можно использовать команду: echo "$(cat ~/.ssh/user_key_name.pub)" >> ~/.ssh/authorized_keys.
  • Убедится, что файл ~/.ssh/authorized_keys имеет правильные права доступа: chmod 600 ~/.ssh/authorized_keys. Убедитесь, что каталог .ssh имеет правильные права доступа: chmod 700 ~/.ssh.

Установить rsync

sudo apt install rsync

Проверить копирование директории на удаленный сервер

touch test.txt
rsync -a test.txt <логин_пользователя>@<IP_адрес_сервера>:/<каталог_на_сервере>

Создать Pipeline

Добавить в проект GitLab файл .gitlab.ci.yml с содержимым:

image: node:18-alpine3.20

stages:
- test
- deploy

test:
stage: test
script:
- yarn install
- yarn build
rules:
- if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH

create-pages:
stage: deploy
script:
- yarn install
- yarn build
- cp -r ./build /home/runuser/public/
- rsync -zr /home/runuser/public/ gitlab-runner@192.168.1.159:/www/wwwroot/wildnotes.ru
- rm -r /home/runuser/public/
pages: true
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH