0

我想使用 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 的存储库变量是否覆盖/阻止这些变量?

谢谢你的帮助!

4

1 回答 1

1

对于您问题的第二点:是的,它工作正常,带有的行+仅列出了已执行的命令。如果没有显示错误,它执行得很好。

至于第三点,是的,如果您设置变量 $path,该变量将被 bitbucket 覆盖,因为这当然会覆盖它。如果您不这样做,它应该可以正常工作,但是我在 git 文档中注意到以下内容:

请注意,为避免在 Windows 上与 $PATH 冲突,$path 变量现在是 $sm_path 变量的已弃用同义词。此命令忽略在超级项目中定义但未检出的任何子模块。

因此,您必须检查它们才能打印它们。当您在本地使用此命令时,我想子模块已被签出,这就是该命令在那里工作的原因。

一种解决方法是使用以下命令,这样您就不必在 bitbucket 管道中检查它们:

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

我希望这可以帮助你

于 2018-11-09T10:53:39.530 回答