使用Pipelines将文件夹从Bitbucket repo推送到公共服务器

问题描述 投票:5回答:3

我在我的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:prod命令实际上创建了dist文件夹,需要在上述位置的服务器上部署。我怎样才能做到这一点?

angular ftp bitbucket bitbucket-pipelines
3个回答
5
投票

1. Write this in bitbucket-pipelines.yml

image: node:8.7.0
pipelines:
  default:
    - step:
        name: Installation
        caches:
          - node
        script:
          - npm install
    - step:
        name: Building
        script:
          - npm install -g @angular/cli #need to install angular-cli to make build
          - npm run build --aot
    - step:
        name: Deployment
        script:
          - apt-get update
          - apt-get install ncftp
          - ncftpput -v -u "$FTP_USERNAME" -p "$FTP_PASSWORD" -R $FTP_HOST $FTP_SITE_ROOT dist/*
          - echo Finished uploading /dist files to $FTP_HOST$FTP_SITE_ROOT

2. Configure your bitbucket environment variables

enter image description here


2
投票

不是答案

我认为Git FTP不是你想要的。如果你看看their website它的产品根本就是只部署改变的文件。我怀疑你每次构建时都会重新创建你的dist文件夹。即使情况并非如此,他们也说:

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

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

回答

我不认为你正在尝试做什么有什么特别之处 - Angular和Git恰好参与其中,但你只是想把一个文件夹从一台机器移到另一台机器上。有很多软件产品可以帮助你,但scp代表安全复制,是许多Linux发行版中包含的更受欢迎的软件产品之一(你正在构建什么Docker容器?)。你可以看到很多例子here,但基本上我认为你想做的事情归结为:

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

(来自this StackOverflow question的例子)

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


0
投票

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

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

!.vuepress/dist/

然后运行以下命令:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.