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/
|
Когда вы думаете о развертывании на удаленном сервере, SSH — первый сетевой протокол, который приходит вам на ум. Добавив его поверх GitLab CI/CD, вы сможете воспользоваться преимуществами автоматизации. Чтобы использовать GitLab CI/CD pipeline вместе с SSH-соединениями, необходимо сначала настроить GitLab, и я хотел бы показать вам, как настроить его и запустить простой скрипт. |
РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2026-08-25 » Статистика каналов в Максе: почему это важно для вашего бизнеса
- 2026-08-25 » Долгожданный контакт: как появление @AdSupport меняет правила игры в Telegram-рекламе
- 2026-08-25 » Скидка, которая видит покупателя насквозь: как новый инструмент Яндекса превращает бюджет в продажи
- 2026-08-25 » Новая эра телевизионной рекламы: как Яндекс Директ превращает экран в витрину
- 2026-08-25 » Отзывы как двигатель продаж: как обратная связь клиентов продвигает ваш сайт в поиске
- 2026-08-19 » ИИ проверят на соответствие духовно-нравственным ценностям: что это значит для вашего бизнеса
- 2026-08-19 » Маркировка ИИ-контента: что меняется для бизнеса с 1 сентября 2026 года
- 2026-08-19 » Белый список Минцифры: как сайты попадают в перечень и что это значит для вашего бизнеса
- 2026-08-19 » Мобильное приложение Директа получило новые возможности: создание ЕПК и агентский доступ
- 2026-08-19 » Google тестирует новую главную страницу без кнопки поиска: что это значит для вашего бизнеса
- 2026-08-12 » Контент для транспортной компании: какими текстами наполнить сайт, чтобы клиенты выбирали вас
- 2026-08-12 » Сезонность в SEO: как анализировать спрос, не путать падение с катастрофой и готовить сайт к пику продаж
- 2026-08-12 » Семантический поиск: почему плотность ключей умерла и как теперь выводить сайт в топ
- 2026-08-12 » ChatGPT без лимитов: как новая эра искусственного интеллекта меняет правила для вашего бизнеса
- 2026-08-12 » Нейропрофиль VK: как объединение данных пользователей меняет правила таргетинга и продвижения
- 2026-08-03 » Мессенджер «Макс» перестал расходовать мобильный трафик: новый уровень доступности для ваших клиентов
- 2026-08-03 » Яндекс Директ запустил динамический коллтрекинг: как бесплатно оценивать реальные звонки и платить только за результат
- 2026-08-03 » Макс открыл истории для всех пользователей Android: новый канал коммуникации для вашего бизнеса
- 2026-08-03 » Новый инструмент в Яндекс Товарах: как сравнение с похожими бизнесами помогает расти
- 2026-08-03 » Яндекс Вебмастер ускорил обновление данных в Мониторинге запросов: что это значит для вашего бизнеса
- 2026-07-29 » «Адаптация бюджета» в Яндекс Директе: как автоматически масштабировать рекламу без потери эффективности
- 2026-07-29 » Overlay в РСЯ: новый формат мобильной рекламы, который не раздражает пользователей
- 2026-07-29 » «Панорама» в Яндекс Директе: новый уровень охватной рекламы для вашего бизнеса
- 2026-07-29 » Карточки товаров и отзывы на маркетплейсах: что по закону считается рекламой, а что нет
- 2026-07-29 » Комментарии в приватных каналах «Макс»: новый инструмент для бизнес-коммуникаций
- 2026-07-23 » Как ошибки в AI-ответах портят репутацию компании
- 2026-07-23 » Маркировка рекламы в 2026 году: фатальные ошибки, которые обойдутся вашему бизнесу в полмиллиона рублей
- 2026-07-23 » Нейросети в дизайне сайтов и графике: революция, эволюция или угроза?
- 2026-07-23 » РСЯ открыла инструмент авторасстановки рекламы для всех партнеров: как автоматизация меняет правила монетизации
- 2026-07-23 » Контент для стоматологических клиник: какими текстами наполнить сайт, чтобы пациенты записывались сами
"Самый чепуховый и бесперспективный проект, но уже запущенный и работающий в Сети, принесет гораздо больше результатов и прибыли, чем самый совершенный проект, который из-за своего постоянного предстартового совершенствования никогда не будет запущен." |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.

Мы создаем практически любые сайты от продающих страниц до сложных, высоконагруженных и нестандартных веб приложений! Наши сайты это надежные маркетинговые инструменты для успеха Вашего бизнеса и увеличения вашей прибыли! Мы делаем красивые и максимально эффектные сайты по доступным ценам уже много лет!
Комплексный подход это не просто продвижение сайта, это целый комплекс мероприятий, который определяется целями и задачами поставленными перед сайтом и организацией, которая за этим стоит. Время однобоких методов в продвижении сайтов уже прошло, конкуренция слишком высока, чтобы была возможность расслабиться и получать \ удерживать клиентов из Интернета, просто сделав сайт и не занимаясь им...
Мы оказываем полный комплекс услуг по сопровождению сайта: информационному и техническому обслуживанию и развитию Интернет сайтов.
Контекстная реклама - это эффективный инструмент в интернет маркетинге, целью которого является увеличение продаж. Главный плюс контекстной рекламы заключается в том, что она работает избирательно.