【问题标题】:Bitbucket pipelines using git submodules foreach使用 git 子模块 foreach 的 Bitbucket 管道
【发布时间】:2018-11-08 13:12:42
【问题描述】:

我想使用 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 存储库而是一个空的占位符文件,但它运行良好并将所有文件传输到我的服务器。

正如here 所说,对子模块的支持并不总是有效,但有一种解决方法

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. 命令应该给你access to several variables,Bitbucket 的存储库变量会覆盖/阻止这些吗?

感谢您的帮助!

【问题讨论】:

    标签: git deployment git-submodules bitbucket-pipelines git-ftp


    【解决方案1】:

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

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

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

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

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

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

    希望对你有帮助

    【讨论】:

    • 首先感谢您的回答! :) 我在最初的帖子中没有提到它,但我尝试回显 $path 变量,但在此过程中没有列出任何内容,git submodule foreach… 似乎也没有工作。我也尝试了 $sm_path - 仍然没有。尽管我不是专家并且不确切知道该命令在做什么,但我会检查您推荐的命令事件。到目前为止感谢! :)
    • 不幸的是没有......这并不意味着它本身不起作用,但我只是使用 composer 找到了更好的工作流程。
    猜你喜欢
    • 2019-04-06
    • 2022-10-19
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2022-12-20
    • 2017-05-03
    • 2021-03-11
    • 2018-04-29
    相关资源
    最近更新 更多