【问题标题】:Push a folder from Bitbucket repo to public server using Pipelines使用管道将文件夹从 Bitbucket 存储库推送到公共服务器
【发布时间】:2017-05-21 05:17:45
【问题描述】:

我在我的 Bitbucket 存储库中启用了管道,我需要在每次构建后运行 Angular 2 构建并在我的服务器中部署 dist 文件夹(在执行构建命令后创建)。

我的 bitbucket-pipelines.yml 文件中有以下内容:

image: node:4.6.0

pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          - npm install
          - npm run build:prod

我在网上找到了这段代码sn-p:

- apt-get update
- apt-get -qq install git-ftp
- git ftp push --user $FTP_USERNAME --passwd $FTP_PASSWORD ftp://123.456.789.123/timount/angular_app

我使用 pem 文件通过 SSH 客户端登录到我的服务器。那么上面的代码 sn -p 有用吗?如果没有,如何使用上述命令中的pem文件?

为了更清楚,npm run build:prod 命令实际上创建了 dist 文件夹,该文件夹需要部署在上述位置的服务器上。我怎样才能做到这一点?

【问题讨论】:

  • 嘿!你能做到这一点吗?我也在尝试做同样的事情。将我的 dist 文件夹上传到我的服务器

标签: angular ftp bitbucket bitbucket-pipelines


【解决方案1】:

1。将其写入 bitbucket-pipelines.yml

图片:节点:8.7.0 管道: 默认: - 步: 名称:安装 缓存: - 节点 脚本: - npm 安装 - 步: 名称:建筑 脚本: - npm install -g @angular/cli #需要安装 angular-cli 来进行构建 - npm 运行构建 --aot - 步: 名称:部署 脚本: - apt-get 更新 - apt-get 安装 ncftp - ncftpput -v -u "$FTP_USERNAME" -p "$FTP_PASSWORD" -R $FTP_HOST $FTP_SITE_ROOT dist/* - echo 完成上传 /dist 文件到 $FTP_HOST$FTP_SITE_ROOT

2。配置您的 bitbucket 环境变量

【讨论】:

  • 我有相同的解决方案,但ncftpput 命令对我不起作用。当我尝试在本地 Docker 容器上调试我的 bitbucket-pipelines.yml 时,我只收到错误 Remote host has closed the connection. 然后 ncftpput: cannot open frp.server.com: remote host closed control connection. 一切正常。请问有什么办法吗?
【解决方案2】:

不是答案

我认为 Git FTP 不是您想要的。如果您查看their website,其产品的根本原因是仅部署已更改的文件。我怀疑您的dist 文件夹将在您每次构建时全部重新创建。即使不是这样,他们也声明:

它通过将提交 ID 存储在日志中来跟踪上传的文件 服务器上的文件。它使用 Git 来确定哪些本地文件有 改变了。

Bitbucket Pipelines 实例是短暂的,因此无处存储日志。这完全破坏了使用git-ftp 的动机。我想您可以将日志推送到某个地方并检索它,但如果这值得您花时间,我会感到惊讶。

回答

我认为您尝试做的事情没有什么特别之处 - Angular 和 Git 只是碰巧参与其中,但您只是想将文件夹从一台机器移动到另一台机器。有大量的软件产品可以帮助你解决这个问题,但scp 代表 Secure Copy,它是许多 Linux 发行版中包含的更流行的产品之一(你正在构建什么 Docker 容器? )。你可以看到很多例子here,但基本上我认为你想做的归结为:

scp -i /path/to/your/.pemkey -r /copy/from/path user@server:/copy/to/path

(示例取自this StackOverflow question

请注意,您必须确保您要访问的服务器可公开访问,否则无法从 Pipelines 构建路由到目标计算机(据我所知)

【讨论】:

  • 感谢您解决“git-ftp”和 dist 文件夹的问题。您知道以跟踪服务器上已有更改的方式部署到 FTP 的任何其他方式吗?我不想在每次部署时都上传我的所有文件,我希望从服务器中删除旧文件。
【解决方案3】:

正如我在 this Github thread 中发布的那样,虽然 git-ftp 旨在仅部署跟踪的文件更改,但实际上可以在每次提交时部署整个 dist 文件夹,即使这些文件未被跟踪。

您首先需要在 repo 的根目录中创建一个名为 .git-ftp-include 的文件,并添加一行包含 dist 文件夹的路径,确保将 ! 添加到该行的开头:

!.vuepress/dist/

然后运行以下命令:

git ftp push --all --syncroot .vuepress/dist/

--all 会上传您的所有文件(即使是未更改的文件),而--syncroot 只会上传指定文件夹中的文件(上传到根文件夹)。

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    相关资源
    最近更新 更多