Трубопроводы 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, команда submodule foreach, похоже, не работает вообще... Тестирование команды только выводит
git submodule foreach 'echo $path'
+ git submodule foreach echo 'echo $path'
- Кто-нибудь знает лучший обходной путь?
- Почему субмодуль (+ foreach) не работает? Либо это?
- Команда должна предоставить вам доступ к нескольким переменным. Переменные / блокирующие переменные репозитория Bitbucket переопределяют / блокируют их?
Спасибо за вашу помощь!
1 ответ
По второму пункту вашего вопроса: да, он работает нормально, строка с +
просто перечисляет команду, которая была выполнена. Если ошибки не отображались, они выполнялись просто отлично.
Что касается третьего пункта, то да, эта переменная будет перезаписана битбакетом, если вы установите переменную $path, потому что, конечно, она будет перезаписана. Если вы этого не сделаете, все должно работать нормально, однако я заметил следующее в документации g it:
Обратите внимание, что во избежание конфликтов с $PATH в Windows переменная $path теперь является устаревшим синонимом переменной $sm_path. Любые подмодули, определенные в суперпроекте, но не извлеченные, игнорируются этой командой.
Таким образом, вы должны проверить их, чтобы они были напечатаны. Когда вы использовали эту команду локально, я предполагаю, что субмодули извлечены, поэтому команда там работает.
Чтобы обойти эту проблему, вам не нужно проверять их в конвейерах bitbucket, используйте следующую команду:
git config --file .gitmodules --get-regexp path | awk '{ print $2 }'
Я надеюсь, это поможет вам