Конвейеры Bitbucket с использованием подмодулей git foreach

Я хочу развернуть свой репозиторий с помощью git-ftp (поскольку многие планы хостинга моих клиентов не включают доступ по SSH) в мою промежуточную среду, где WordPress включен в качестве подмодуля. Это была моя первая попытка использовать конвейеры Bitbucket:

image: php:7.1

pipelines:
  branches:
    master:
    - step:
        deployment: staging
        script:
          - apt-get update
          - apt-get -qq install git-ftp
          - git ftp init -vv --user $sftp_user --passwd $sftp_passwd $sftp_path

Он отлично работает и передает все файлы на мой сервер, несмотря на то, что он развертывает не репозиторий WordPress, а пустой файл-заполнитель.

Как сказано здесь, поддержка подмодулей не работает время, но есть обходной путь, используя

git submodule foreach git [init|push|catchup]

Я попробовал все шаги вручную, используя Bash, и это сработало:

$ git ftp init --user $sftp_user --passwd $sftp_passwd -vv $sftp_path
$ git submodule foreach 'git ftp init -vv $sftp_user --passwd $sftp_passwd -vv $sftp_path/$path/'

Но когда я пытаюсь применить этот обходной путь к моему файлу bitbucket-pipelines.yml, команда подмодуля foreach вообще не работает… Тестирование команды только выводит

git submodule foreach 'echo $path'
+ git submodule foreach echo 'echo $path'

  1. Кто-нибудь знает лучший обходной путь?
  2. Почему не работает подмодуль (+ foreach)? Или это?
  3. Команда должна предоставить вам доступ к нескольким переменным , переменные репозитория Bitbucket переопределяют/блокируют их?

Спасибо за вашу помощь!


person cruzquer    schedule 08.11.2018    source источник


Ответы (1)


По второму пункту вашего вопроса: да, он работает нормально, в строке с + просто указана команда, которая была выполнена. Если ошибка не отображалась, он выполнялся нормально.

Что касается третьего пункта, да, эта переменная будет перезаписана битбакетом, ЕСЛИ вы установите переменную $path, потому что, конечно, это перезапишет ее. Если вы этого не сделаете, все должно работать нормально, однако я заметил следующее в документации git:

Обратите внимание, что во избежание конфликтов с $PATH в Windows переменная $path теперь является устаревшим синонимом переменной $sm_path. Любые подмодули, определенные в суперпроекте, но не извлеченные, игнорируются этой командой.

Таким образом, вы должны проверить их, чтобы они были напечатаны. Когда вы использовали эту команду локально, я полагаю, что подмодули извлекаются, поэтому команда там работает.

Обходной путь, чтобы вам не приходилось проверять их в конвейерах битбакета, заключается в использовании следующей команды:

git config --file .gitmodules --get-regexp path | awk '{ print $2 }'

Я надеюсь, это поможет вам

person Sven Hakvoort    schedule 09.11.2018
comment
Прежде всего спасибо за ваш ответ! :) Я не упомянул об этом в своем первоначальном посте, но я попытался повторить переменную $path, но в процессе ничего не было указано, и git submodule foreach…, похоже, не работало. Пробовал и $sm_path — ничего. Я проверю рекомендуемое вами командное событие, хотя я не эксперт и точно не знаю, что делает команда. Спасибо! :) - person cruzquer; 09.11.2018
comment
К сожалению, нет… Это не значит, что это не работает само по себе, но я просто нашел лучший рабочий процесс с помощью composer. - person cruzquer; 01.12.2018