Ошибка при развертывании приложения vuejs на сервере Ubuntu с помощью gitlab runner

#vue.js #continuous-integration #gitlab #gitlab-ci #gitlab-ci-runner

#vue.js #непрерывная интеграция #gitlab #gitlab-ci #gitlab-ci-runner

Вопрос:

Я пытаюсь развернуть приложение из репозитория GitLab на сервер под управлением Ubuntu 20.04. GitLab runner зарегистрирован и запущен, добавлены все ключи SSH; Я создал .gitlab-ci.yml, но получаю сообщение об ошибке «Отказано в разрешении (открытый ключ)». Я исправил это, и теперь я получаю dist/*: No such file or directory

Мой файл .gitlab-ci.yml находится здесь:

 stages:
   - build
   - deploy

# build stage
build_app:
   image: node:alpine
   stage: build
   only:
      - master
   script:
      - npm install
      - npm run build
   cache:
     paths:
       - node_modules/ 
   artifacts:
      paths:
         # build folder
         - dist/
      expire_in: 1 hour

# production stage
production:
   stage: deploy
   before_script:
      - mkdir -p ~/.ssh
      - echo -e "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
      - chmod 600 ~/.ssh/id_rsa
      - '[[ -f /.dockerenv ]] amp;amp; echo -e "Host *ntStrictHostKeyChecking nonn" > ~/.ssh/config'
   script:
      - scp -r dist/* root@server_ip:/var/www/html/my_app

  

Моя задача — создать файл .gitlab-cd.yml, который соберет приложение в docker и отправит эту сборку на рабочий сервер. Я прочитал всю документацию, но теперь я совершенно сбит с толку и понятия не имею, что я вообще делаю.

Может ли кто-нибудь помочь и направить меня?

Комментарии:

1. Вы можете попробовать использовать полный путь к каталогу артефактов: scp -r ${CI_PROJECT_DIR}/dist/* ... . Если это не помогает, то вы можете добавить ls в свой скрипт и проверить, какие файлы представлены в вашем каталоге сборки.

2. Один вопрос новичка, где я могу найти свой CI_PROJECT_DIR и как я могу запускать конвейер каждый раз при новом слиянии

3. CI_PROJECT_DIR является переменной среды (gitlab определяет ее docs.gitlab.com/ee/ci/variables/predefined_variables.html ), вы можете добавить echo $CI_PROJECT_DIR , чтобы посмотреть, что это такое.

4. для запуска каждый раз при новом слиянии вы можете добавлять only: - merge_requests для задания ( docs.gitlab.com/ee/ci/merge_request_pipelines /… )

Ответ №1:

почему происходит сбой scp

Проверьте, существует ли ваш dist каталог и есть ли что-то внутри: - ls dist (вы увидите вывод команды в «консоли заданий» в gitlab)

Я думаю, что каталог пуст, тогда нужно проверить build_app задание

как запускать задание только для запросов на слияние?

добавить only: - merge_requests для задания подробнее

 deploy:
  stage: deploy
  script: ./deploy
  only:
    - merge_requests
  

Разное

Я предлагаю использовать rsync вместо scp , в нем используется специальный алгоритм дельта-передачи и несколько оптимизаций, чтобы ускорить работу.

Комментарии:

1. Я перешел на rsync, и я получаю ошибку «отказано в разрешении», даже добавлены открытые и закрытые ключи ssh

2. @user38974 прежде всего проверьте, что происходит с вашим dist каталогом