Мои предположения:

  • У вас есть Gitlab Runner с запущенным докером-исполнителем (может быть локально).

  • У вас есть сервер для развертывания (тоже может быть локально, он должен быть доступен для Runner).

  • У вас есть учетная запись Gitlab, и вы уже создали репозиторий для своего проекта с файлом .gitlab-ci.yml.

Необходимые шаги

Подключитесь по ssh к раннеру:

1
ssh root@runner-ip

Создайте пару ключей SSH:

1
ssh-keygen -t rsa -N ‘’ -f ~/.ssh/id_rsa <<< n

Получите закрытый ключ раннера:

1
cat ~/.ssh/id_rsa

Добавьте этот закрытый ключ в качестве переменной в свой проект на Gitlab:

Перейдите: Settings > CI/CD > Variables

Выполните вход по SSH к серверу:

1
ssh root@server-ip

Скопируйте открытый ключ раннера cat id_rsa.pub внутрь ~/.ssh/authorized_keys сервера. Измените свой .gitlab-ci.yml. согласно следующему примеру. Предполагается образ на основе ubuntu.

Отредактируйте CI скрипт свои задачи:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
"SSH DEPLOY":
  stage: deploy
  image: ubuntu-cd:0.0.2 
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - mkdir -p ~/.ssh
    - eval $(ssh-agent -s)
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - chmod 700 ~/.ssh
  artifacts:
    when: always
    paths:
      - ./src/file.txt
    expire_in: 1 day
  script:
    - pwd
    - ls -a
    - ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 --decode)
    - scp ./src/file.txt root@172.2.16.50:/tmp/

Сделайте коммит .gitlab-ci.yml, запустится пайплайн и отправит по ssh на ваш сервер необходимых файл!

Решение ошибки Error loading key “/dev/fd/63”: invalid format

Если при выполнении CI/CD возникает ошибка вида:

1
Error loading key "/dev/fd/63": invalid format

Выполните команду получения ключа следующим образом:

1
cat ~/.ssh/id_rsa  | base64 -w0