Трубопроводы Bitbucket, использующие подмодули git foreach - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу развернуть свой репозиторий с помощью 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, похоже, не работает вообще ... Тестирование команды выдает только

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

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

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

1 Ответ

0 голосов
/ 09 ноября 2018

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

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

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

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

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

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

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

...