Пример передачи кода на удалённый сервер через CI/CD

Использование CI/CD с Docker агентом

Описанный ниже пример используется для раннера запущенного в режиме Docker. Если вы используете раннер в режиме shell, то вы можете предоставить доступ к удалённому серверу через настроенный в раннере приватный ключ.

  • Для передачи команд и файлов на удаленный сервер потребуются ssh ключи. Создайте новую пару ключей по данной инструкции или используйте уже созданные. Публичный ключ добавьте на удаленный сервер на которой планируется передавать данные/команды. Для этого можно скопировать содержимое файла ~/.ssh/id_ed25519.pub в файл authorized_keys на сервере. В настройках проекта, в разделе CI/CD создайте переменную SSH_KEY с приватным ключом.
  • Создайте в корне проекта файл с именем gitflic-ci.yaml и содержимым
image: ubuntu:latest

stages:
  - build

job 1:
  stage: build
  tags:
    - docker
  when: manual
  scripts:
    - mkdir test
    - echo "Example" > test/text.txt
    - apt-get update -y
    - apt-get install openssh-client -y
    - echo $SSH_KEY > id_ed25519
    - chmod 600 id_ed25519
    - ssh -o "StrictHostKeyChecking=no" -p $SSH_PORT -i id_ed25519 $SERVER_USER@$SERVER_IP "mkdir -p ~/example/"
    - scp -o "StrictHostKeyChecking=no" -P $SSH_PORT -i id_ed25519 test/text.txt $SERVER_USER@$SERVER_IP:~/example/
  artifacts:
    name: file-create
    paths:
      - test

Описание используемых команд

команда Описание
apt-get update -y и apt-get install openssh-client -y Требуются для установки пакета ssh. Можно не использовать, если в контейнере или в shell раннере уже есть пакет ssh
echo $SSH_KEY > id_ed25519 и chmod 600 id_ed25519 Создают приватный ключ и назначают ему права требуемые для работы ssh
ssh -o "StrictHostKeyChecking=no" -p $SSH_PORT -i id_ed25519 $SERVER_USER@$SERVER_IP "mkdir -p ~/example/" Команда передаёт на удаленный сервер команду по созданию директории. Параметр -o "StrictHostKeyChecking=no" используется для автоматического принятия RSA ключей.
scp -o "StrictHostKeyChecking=no" -P $SSH_PORT -i id_ed25519 file/file1.txt $SERVER_USER@$SERVER_IP:~/example/ Команда для передачи созданных файлов на удалённый сервер

Описание используемых переменных

параметр Описание
SSH_KEY Передайте значение приватного ключа.
$SSH_PORT Передайте порт по которому у вас происходит подключение по ssh к серверу, например 22.
$SERVER_USER Передайте значение пользователя которое вы используете при подключении по ssh, например ivan.
SERVER_IP Передайте ip адрес сервера, например 158.162.17.149.