GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
Когда вы думаете о развертывании на удаленном сервере, SSH — первый сетевой протокол, который приходит вам на ум. Добавив его поверх GitLab CI/CD, вы сможете воспользоваться преимуществами автоматизации. Чтобы использовать GitLab CI/CD pipeline вместе с SSH-соединениями, необходимо сначала настроить GitLab, и я хотел бы показать вам, как настроить его и запустить простой скрипт.
Необходимые условия
- Учетная запись GitLab
- Удаленный сервер (я использую Linux VM в Azure).
Повестка дня
- Создайте новый проект GitLab
- Создайте и добавьте SSH-ключи
- Создание и запуск CI/CD конвейера GitLab
Создание нового проекта GitLab
В качестве первого шага мы создадим проект GitLab.
Войдите в GitLab и перейдите в Новый проект -> Создать из шаблона -> Страницы/Простой HTML -> Использовать шаблон
. Дайте проекту имя и нажмите Создать проект
. Это создаст простой проект plain html.
Шаблон создаст файл README.md, начальный .gitlab-ci.yml
и общий каталог с файлами index.html
и style.css
.
Создание и добавление ключей SSH
У нас уже есть пример проекта, теперь нам нужно создать SSH-ключи. Они будут использоваться для подключения к нашему удаленному серверу. Каждый раз, когда запускается конвейер GitLab CI/CD, он использует GitLab Runner.
GitLab Runner — это приложение, задачей которого является запуск заданий в конвейере GitLab CI/CD. GitLab Runner можно установить самостоятельно на своей инфраструктуре или воспользоваться общими бегунами, поддерживаемыми GitLab. GitLab предоставляет вам 400 минут в месяц бесплатно. Мы будем использовать Shared Runner, так как они радикально просты в использовании и не требуют настройки для нашего примера. Нам нужно настроить SSH-ключи таким образом, чтобы задания, выполняемые Shared Runner, могли получить доступ к нашему удаленному серверу через SSH-соединение.
Создание SSH-ключа
Вы можете создать новый SSH-ключ в любой среде, даже в локальной. При создании нового SSH-ключа вы получите два ключа: закрытый и открытый. Важно, чтобы у GitLab был закрытый ключ, а у вашего удаленного сервера — открытый. Поэтому не имеет значения, где вы создаете ключи, важно только поделиться ими соответствующим образом с GitLab и удаленным сервером.
У меня есть виртуальная машина linux на Azure, и я буду использовать ее для целей этой статьи. Я создам новый ssh-ключ с помощью виртуальной машины. GitLab рекомендует создать SSH ключ типа ED25519, который является более безопасным, чем RSA. Для создания нового ключа выполните команду ssh-keygen -t ed25519 -C "GitLab SSH key"
. Текст после опции -C
является комментарием, и вы можете его изменить.
Ключ будет создан в директории по умолчанию, которая для linux имеет вид /home/
. Не указывайте ключевую фразу, иначе это будет громоздко для конвейера GitLab CI/CD. У вас должно быть два новых файла в каталоге .ssh
:
Добавьте закрытый ключ в качестве переменной GitLab
Скопируйте содержимое закрытого ключа и вернитесь в проект GitLab. Перейдите к Settings -> CI/CD -> Variables -> Expand -> Add Variable
. Переменная GitLab представляет собой пару ключ-значение. Назовите ключ SSH_PRIVATE_KEY
и вставьте закрытый ключ в поле значения. Нажмите Add Variable
.
Добавьте еще две переменные:
Добавить открытый ключ для удаленного сервера
Скопируйте содержимое открытого ключа и вернитесь на удаленный сервер. Войдите под тем же пользователем, которого вы указали в переменной SSH_USER
GitLab. Если у вас еще нет такого пользователя, самое время его создать.
Перейдите в каталог /home/
. Если каталог .ssh
не существует, то создайте его. Вставьте открытый ключ в файл authorized_keys
. Если у вас нет файла authorized_keys
, создайте его. Вот скриншот с моей VM (который я удалил перед публикацией, так что теперь он бесполезен).
Создание и запуск конвейера GitLab CI/CD
Пришло время создать CI/CD конвейер GitLab. Мы хотим достичь двух целей с помощью SSH: записать имя хоста удаленного сервера и создать файл примера в домашней директории пользователя.
Конвейер определен в .gitlab-ci.yml
, и у нас есть два варианта создания/редактирования:
- Непосредственно в проекте GitLab в веб-браузере, мы можем редактировать
.gitlab-ci.yml
и фиксировать изменения. - Клонировать репозиторий, отредактировать
.gitlab-ci.yml
в вашем любимом редакторе кода, зафиксировать изменения и отправить в GitLab.
Я выберу вариант номер 2, это более правильный способ работы с .gitlab-ci.yml
.
Вы можете клонировать репозиторий с помощью команды git clone
и адреса репозитория, который вы можете найти в репозитории GitLab, нажав кнопку Clone
.
После клонирования откройте уже существующий .gitlab-ci.yml
, который был создан как часть шаблона Pages/Plain HTML.
Оригинальный .gitlab-ci.yml:
image: alpine:latest
pages:
stage: deploy
script:
- echo 'Nothing to do...'
artifacts:
paths:
- public
only:
- master
Нам нужно добавить раздел before_script
и обновить раздел script
.
Окончательный вариант .gitlab-ci.yml:
image: alpine:latest
pages:
stage: deploy
before_script:
- 'command -v ssh-agent >/dev/null || ( apk add --update openssh )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan $VM_IPADDRESS >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- ssh $SSH_USER@$VM_IPADDRESS "hostname && echo 'Welcome!!!' > welcome.txt"
artifacts:
paths:
- public
only:
- master
.gitlab-ci.yml
определяет конвейер. Он использует образ докера alpine:latest
для запуска заданий, определенных в трубопроводе. У нас есть только одно задание pages
.
Это задание выполняется на этапе: deploy
. Мы не определили никаких этапов, но у нас есть 5 этапов по умолчанию: .pre, build, test, deploy, .post
. В нашем случае это не имеет значения, так как наш конвейер на данный момент прост и не требует настройки стадий.
Далее у нас есть before_script
, который не требует пояснений и будет выполняться перед командой script
. Давайте объясним сценарий строка за строкой:
script
— это место, где определяется наш фактический код для выполнения. Мы просто хотим вывести имя хоста в журнал заданий, а затем создать файл примера на удаленном хосте.
artifacts
указывают, какие артефакты использовать при развертывании. В нашем примере мы его не используем.
only
указывает, что задание должно быть запущено только в том случае, если любое изменение будет размещено в ветке master
в репозитории.
После внесения изменений нам необходимо зафиксировать их и поместить в хранилище.
Как только изменение будет помещено в ветку master, будет запущен GitLab CI/CD. Перейдите в CI/CD -> Pipelines
и вы должны увидеть pipeline в статусе running.
Нажмите на него, а затем нажмите на задание pages
, чтобы посмотреть журналы.
Работа должна завершиться быстро, в моем случае это заняло 16 секунд. Последняя строка показывает, что задание было выполнено успешно. В строке 51 показана часть script
из .gitlab-ci.yml
, а в строке 52 мы видим имя хоста удаленного сервера, что является именно тем, чего мы хотели добиться. Проверьте ваш удаленный сервер, вы найдете там welcome.txt
.
Вот и все! Мы успешно создали новый проект GitLab, настроили SSH-соединение с удаленным сервером и создали простой конвейер GitLab CI/CD для запуска скрипта через SSH на удаленном сервере.
Спасибо за прочтение.
Источник: https://codertime.ru/blog-ru/gitlab-ci-pipeline-zapusk-stsenariya-cherez-ssh-na-udalennom-servere/
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-11-26 » Капитан грузового судна, или Как начать использовать Docker в своих проектах
- 2024-11-26 » Обеспечение безопасности ваших веб-приложений с помощью PHP OOP и PDO
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-15 » Перенос сайта на WordPress с одного домена на другой
- 2024-11-08 » OSPanel 6: быстрый старт
- 2024-11-08 » Как установить PhpMyAdmin в Open Server Panel
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
Все мы сидим в сточной канаве, но некоторые при этом смотрят на звезды Уайльд Оскар - (1854-1900) - английский писатель |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.