Трубопроводы 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'

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

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

1 ответ

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

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

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

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

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

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

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

Другие вопросы по тегам