6

我在我的 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

我在网上找到了这段代码片段:

- 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 客户端登录到我的服务器。那么上面的代码片段有用吗?如果没有,我该如何使用上述命令中的 pem 文件?

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

4

3 回答 3

5

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环境变量

在此处输入图像描述

于 2017-12-10T13:35:55.577 回答
2

不是答案

我不认为 Git FTP 是你想要的。如果您查看他们的网站,其产品的根本原因是仅部署更改的文件。我怀疑dist每次构建时都会完整地重新创建您的文件夹。即使情况并非如此,他们也会声明:

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

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

回答

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

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

(取自这个 StackOverflow 问题的示例)

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

于 2017-01-10T06:49:43.790 回答
0

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

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

!.vuepress/dist/

然后运行以下命令:

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

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

于 2019-04-01T10:16:56.057 回答