Пример передачи кода на удалённый сервер через 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" > newfile/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 file/file1.txt $SERVER_USER@$SERVER_IP:~/example/
artifacts:
name: file-create
paths:
- newfile
Описание используемых команд
команда | Описание |
---|---|
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 . |