Отправить папку из репозитория Bitbucket на общедоступный сервер с помощью конвейеров

В моем репозитории Bitbucket включены конвейеры, и мне нужно запускать сборку Angular 2 и развертывать папку dist (которая создается после выполнения команды сборки) на моем сервере после каждой сборки.

В моем файле bitbucket-pipelines.yml есть следующее:

image: node:4.6.0

pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          - npm install
          - npm run build:prod

Я нашел этот фрагмент кода в Интернете:

- apt-get update
- apt-get -qq install git-ftp
- git ftp push --user $FTP_USERNAME --passwd $FTP_PASSWORD ftp://123.456.789.123/timount/angular_app

Я использую файл pem для входа на свой сервер через SSH-клиент. Так полезен ли приведенный выше фрагмент кода? Если нет, как я могу использовать файл pem в приведенной выше команде?

Чтобы было понятнее, команда npm run build:prod фактически создает папку dist, которую необходимо развернуть на сервере в указанном выше месте. Как я могу этого добиться?


person clint    schedule 06.01.2017    source источник
comment
Привет! Удалось ли вам этого добиться? Я пытаюсь сделать то же самое. Загрузите на мой сервер мою папку dist   -  person MarBVI    schedule 12.02.2018


Ответы (3)


1. Запишите это в bitbucket-pipelines.yml.

image: node:8.7.0
pipelines:
  default:
    - step:
        name: Installation
        caches:
          - node
        script:
          - npm install
    - step:
        name: Building
        script:
          - npm install -g @angular/cli #need to install angular-cli to make build
          - npm run build --aot
    - step:
        name: Deployment
        script:
          - apt-get update
          - apt-get install ncftp
          - ncftpput -v -u "$FTP_USERNAME" -p "$FTP_PASSWORD" -R $FTP_HOST $FTP_SITE_ROOT dist/*
          - echo Finished uploading /dist files to $FTP_HOST$FTP_SITE_ROOT

2. Настройте переменные среды битбакета.

введите описание изображения здесь

person Mykola Riabchenko    schedule 10.12.2017
comment
У меня такое же решение, но команда ncftpput не работает. Я получаю только ошибку Remote host has closed the connection., а затем ncftpput: cannot open frp.server.com: remote host closed control connection.. Когда я пытаюсь отладить свой bitbucket-pipelines.yml в локальном контейнере Docker, все работает хорошо. Есть идеи, пожалуйста? - person jjaros; 12.01.2018

Не ответ

Я не думаю, что Git FTP - это то, что вам здесь нужно. Если вы посмотрите на их веб-сайт, причина, по которой это продукт, заключается в развертывании только файлов, которые изменились. Я подозреваю, что ваша dist папка будет полностью воссоздаваться при каждой сборке. Даже если это не так, они заявляют:

Он отслеживает загруженные файлы, сохраняя идентификатор фиксации в файле журнала на сервере. Он использует Git, чтобы определить, какие локальные файлы были изменены.

Экземпляры Bitbucket Pipelines недолговечны, поэтому хранить журнал негде. Это подрывает мотивацию к использованию git-ftp вообще. Я полагаю, вы могли бы куда-нибудь протолкнуть журнал и получить его, но я был бы удивлен, если бы это стоило вашего времени.

Отвечать

Я не думаю, что есть что-то особенное в том, что вы пытаетесь сделать - Angular и Git просто задействованы, но вы просто пытаетесь переместить папку с одной машины на другую. Существует множество программных продуктов, которые могут помочь вам в этом, но scp, что означает Secure Copy, является одним из наиболее популярных продуктов, который включен во многие дистрибутивы Linux (из какого контейнера Docker вы строите?). Вы можете увидеть множество примеров здесь, но в основном я думаю, что вы хотите сделать следующее:

scp -i /path/to/your/.pemkey -r /copy/from/path user@server:/copy/to/path

(Пример взят из этого вопроса StackOverflow)

Обратите внимание, что вам нужно убедиться, что сервер, на который вы собираетесь, является общедоступным, в противном случае нет возможности выполнить маршрутизацию от сборки Pipelines на целевой компьютер (насколько я знаю)

person Toby Murray    schedule 10.01.2017
comment
Спасибо за устранение проблемы с git-ftp и папкой dist. Знаете ли вы какой-либо другой способ развертывания на FTP, чтобы он отслеживал изменения, уже существующие на сервере? Я не хочу загружать все свои файлы при каждом развертывании и хочу, чтобы старые файлы удалялись с сервера. - person Enrico; 22.02.2019

Как я писал в этой ветке Github, git-ftp предназначен только для развертывания отслеживаемых изменений файлов, фактически возможно развертывание всей вашей dist папки при каждой фиксации, даже если эти файлы не отслеживаются.

Сначала вам нужно создать файл с именем .git-ftp-include в корне вашего репо и добавить одну строку с путем к вашей папке dist, убедившись, что вы добавили ! в начало строки:

!.vuepress/dist/

Затем выполните следующую команду:

git ftp push --all --syncroot .vuepress/dist/

--all загружает ВСЕ ваши файлы (даже неизмененные), а --syncroot загружает только файлы из указанной папки (загружая их в корневую папку).

person Simon East    schedule 01.04.2019