angularjs - 使用GitLab CI通过ftp部署应用

标签 angularjs docker ftp gitlab-ci

我目前正在研究一个小的Angular Web项目。我找到了一个名为Gitlab CI的出色工具。

我阅读了文档,并设置了一个节点docker来构建webapp。然后,我想将带有ftp的已构建应用程序上传到我的服务器。这就是我的麻烦开始的地方。

首先在这里我的gitlab-ci.yml

image: node:7.5.0
cache:
  key: "$CI_BUILD_REF_NAME"
  untracked: true
  paths:
    - node_modules/
    - dist/

stages:
  - build
# - test
  - deploy
  - cleanup
# - deployProd


runBuild:
  before_script:
   - npm install -g angular-cli
   - npm install
  stage: build
  script:
    - ng build --target=production --environment=test
  except:
    - tags

runProdBuild:
  before_script:
    - npm install -g angular-cli
    - npm install
  stage: build
  script:
    - ng build --target=production --environment=prod
  only:
    - tags



runDeployTest:
  before_script:
    - apt-get install ftp
  variables:
    DATABASE: ""
    URL: "http://test.domain.de"
  stage: deploy
  environment:
      name: Entwicklungssystem
      url: https://test.domain.de
  artifacts:
    name: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME"
    paths:
    - dist/
    expire_in: 2d
  except:
      - tags
  script:
    - echo '<?php ini_set("max_execution_time", 300);  function rrmdir($dir) {    if (is_dir($dir))    {        $objects = scandir($dir);        foreach ($objects as $object)       {            if ($object != "." && $object != "..")            {                if (is_dir($dir."/".$object))                {                    rrmdir($dir."/".$object);      }        else          {  echo "unlink :".$dir."/".$object;      unlink($dir."/".$object);     } }     }     rmdir($dir);     } } rrmdir(__DIR__."."); ?>' > delete.php
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . delete.php"
    - wget "$URL/delete.php"
    - cd ./dist
    - zip -r install.zip .
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . install.zip"
    - echo "<?php   \$dateiname = __DIR__.'/install.zip';   \$ofolder = str_replace('/public','',__DIR__);  exec('unzip '.\$dateiname.' -d '.\$ofolder.' 2>&1', \$out);   print(implode('<br>', \$out)); unlink(\$dateiname); unlink('entpacker.php'); unlink(__DIR__.'/../delete.php'); unlink(__DIR__.'/../delete.php.1'); ?>" > entpacker.php
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . entpacker.php"
    # Install
    - wget $URL/entpacker.php

runDeployProd:
  before_script:
    - apt-get install ftp
  variables:
    DATABASE: ""
    URL: "http://test.domain.de"
  stage: deploy
  environment:
    name: Produktivsystem
    url: https://prod.domain.de
  artifacts:
    name: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME"
    paths:
      - dist/
    expire_in: 2d
  script:
    - echo '<?php ini_set("max_execution_time", 300);  function rrmdir($dir) {    if (is_dir($dir))    {        $objects = scandir($dir);        foreach ($objects as $object)       {            if ($object != "." && $object != "..")            {                if (is_dir($dir."/".$object))                {                    rrmdir($dir."/".$object);      }        else          {  echo "unlink :".$dir."/".$object;      unlink($dir."/".$object);     } }     }     rmdir($dir);     } } rrmdir(__DIR__."."); ?>' > delete.php
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . delete.php"
    - wget "$URL/delete.php"
    - cd ./dist
    - zip -r install.zip .
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . install.zip"
    - echo "<?php   \$dateiname = __DIR__.'/install.zip';   \$ofolder = str_replace('/public','',__DIR__);  exec('unzip '.\$dateiname.' -d '.\$ofolder.' 2>&1', \$out);   print(implode('<br>', \$out)); unlink(\$dateiname); unlink('entpacker.php'); unlink(__DIR__.'/../delete.php'); unlink(__DIR__.'/../delete.php.1'); ?>" > entpacker.php
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . entpacker.php"
    # Install
    - wget $URL/entpacker.php
  only:
      - tags


cleanup:
  stage: cleanup
  script:
  - rm -rf ./dist
  - rm -rf ./node_modules
  when: manual

所以它可以正常工作,直到我想将ftp安装到docker镜像为止。

我的问题现在是:是否可以将ftp安装到镜像?

还是有其他方法可以处理这样的事情?我无法使用ssh,因为没有ssh访问网站空间。

最佳答案

我有解决办法。如建议的那样,我尝试创建自己的docker镜像。在那里,我注意到我也无法安装lftp。因此,在创建docker镜像时,您必须首先运行apt-get update

因此,我在脚本中尝试了此方法,并成功了。

因此,您需要先运行apt-get update,然后安装所需的任何软件包。

关于angularjs - 使用GitLab CI通过ftp部署应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42121021/

相关文章:

java - 如何从 LPRT ftp 命令获取 IPv6

Azure 逻辑应用/数据工厂,使用 FTPS 获取文件

javascript - Angularjs - Controller 多次调用 init() 函数

angularjs - 在同一元素上嵌套 ng-repeat,而不展平原始数据源

linux - 为什么我的 Dockerfile CMD 不起作用?

docker - 如何阻止 Docker 注册表?

c - ftp 客户端从服务器读取不完整的消息

javascript - ng-view 故意淡入,但随后淡出

JavaScript 嵌套 Promise 范围和 AngularJS

docker - 如何在 docker hub 上添加我不拥有的私有(private)仓库以进行自动构建