🔥 Как настроить Gitlab-CI для автоматического развертывания (CD) вашего приложения через SSH |

🔥 Как настроить Gitlab-CI для автоматического развертывания (CD) вашего приложения через SSH

Мануал

Тестовая схема:

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

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

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

ssh root@runner-ip
Создайте пару ключей SSH:

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

 cat ~/.ssh/id_rsa

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

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

Выполните вход по SSH к серверу:
ssh root@server-ip
Скопируйте открытый ключ раннера( cat id_rsa.pub ) внутрь ~/.ssh/authorized_keys сервера.
Измените свой .gitlab-ci.yml. согласно следующему примеру.
Предполагается образ на основе ubuntu.
Отредактируйте CI скрипт свои задачи:
"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 на ваш сервер необходимых файл!

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Даниил

    Спасибо за гайд, мне помогло!

    Но мне пришлось изменить image, вместо “ubuntu-cd:0.0.2 ” я оставил значение “ubuntu-cd:0.0.2 “

    Ответить
  2. Даниил

    Ошибка в прошлом комментарии :
    * я оставил значение “ubuntu“

    Ответить
  3. Даниил

    Спасибо за гайд, мне помогло!
    Но мне пришлось изменить image, вместо “ubuntu-cd:0.0.2 ” я оставил значение “ubuntu “

    Ответить
    1. cryptoparty автор

      Ну образа меняются, это нормально! Рад, что помогло!

      Ответить
  4. Даниил

    Для выполнения команд по SSH мне помогла только такая конфигурация:

    “SSH DEPLOY”:
    stage: deploy
    image: tetraweb/php
    before_script:
    – ‘which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )’
    – mkdir -p ~/.ssh
    – eval $(ssh-agent -s)
    – ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 –decode)
    – chmod 700 ~/.ssh

    script:
    – ssh -o StrictHostKeyChecking=no root@172.2.16.50 " touch testfile && exit"
    only:
    – master

    Если поменять на другой image, то не запускается уже из-за ошибка: Error loading key "/dev/fd/63": invalid format

    Ответить