CI部署脚本与GitHub,Travis,NPM和Gulp

时间:2017-08-22 20:08:49

标签: github npm gulp continuous-integration travis-ci

我觉得自己正试图从Github上的主分支实现CI,使用Travis-CI并将构建的文件推送到我的服务器上。

我正在尝试的概述:

  • 将新代码推送到github上的分支
  • 运行测试并合并到主分支后,Travis接管。
  • Travis在我的DigitalOcean盒子上运行测试,然后运行部署脚本。
  • 部署脚本运行NPM任务,然后是Gulp
  • 如果一切顺利,将更新node_modules文件夹(来自package.json),并且将在服务器上更新Gulp中的所有已编译文件。

我已经使它几乎工作了,似乎是某种类型的权限问题(即使我没有得到任何构建错误)

Travis成功运行主推,找到部署脚本,并在没有任何问题的情况下运行。它以最后的0退出,构建为绿色。但是当我ssh检查以确保应用更改时 - 没有什么看起来不同。

看起来Travis正在构建自己的容器,但实际的盒子没有得到更新。

这是我的.travis.yml文件:

sudo: required
language: node_js
node_js:
  - "stable"

script:
  - /bin/true

deploy:
  - provider: script
    skip_cleanup: true
    script: >-
      wget http://example.com/scripts/deploy_script.sh;
      chmod +x deploy_script.sh;
      sh ./deploy_script.sh theme;
    on:
      branch: master

这是我的deploy_script.sh:

#!/usr/bin/env bash

readonly SELF="$(basename $0)"
readonly SCRIPT_PATH="$(dirname $0)"
readonly REAL_PATH="$(cd "$(dirname "$1")"; pwd)"
readonly DATE=`date +%Y-%m-%d`


usage() {
    cat <<EOF

Usage:
     $SELF <theme | cms>

     Script to deploy headband theme for grav cms

EOF
}




cms() {

    cd /path/to/cms
    echo "Updating CMS ... can add a current date here or what not" >> /tmp/$DATE-deploy.log
    composer install --no-dev -o

}

theme() {
    cd ./themes/headband
    pwd
    echo "Updating Theme ... can add a current date here or what not" >> /tmp/$DATE-deploy.log
    rm -rf ./node_modules >> /tmp/$DATE-deploy.log
    echo "REMOVED NODE MODULES FOLDER"
    npm cache clean >> /tmp/$DATE-deploy.log
    echo "NPM CACHE CLEANED ... ... ... ... ... "
    npm install --save >> /tmp/$DATE-deploy.log
    echo "npm installed ... moving on ..."
    npm update >> /tmp/$DATE-deploy.log
    echo "NPM UPDATED ... ... ... ..."
    gulp >> /tmp/$DATE-deploy.log
    echo "GULP TASK COMPLETED ... ... ... ..."
}


# Exit if user input is < 1 params
if [ "$#" -lt "1" ]; then
    usage
    exit 2
fi


# Check for $action anything else echo usage
while [ "$#" -gt 0 ]; do
    action="$1"
    case $action in
        cms)
            cms
            exit 0
        ;;
        theme)
            theme
            exit 0
        ;;
        *)
            usage
            exit 2
        ;;
    esac
done

usage
exit 2

如果有人能指出我正确的方向,这将是惊人的。

1 个答案:

答案 0 :(得分:0)

因此,经过多次尝试失败后,我在服务器端使用scp和sans部署脚本时已成功部署(尽管仍希望通过该路由清理.yml)

目前由于没有压缩或存档需要一些时间,但是如果有人可以提供帮助,那将是非常棒的。否则将在以后更新。

我也试图让rsync工作但不仅仅是。

这是最终的.travis.yml文件,它从构建目录

部署所有文件
sudo: required
language: node_js
node_js:
- stable
script:
- "/bin/true"
addons:
  ssh_known_hosts:
  - <ip-of-server>
after_success:
- openssl aes-256-cbc -K $encrypted_<secret>_key -iv $encrypted_<secret>_iv -in deploy_rsa.enc -out /tmp/deploy_rsa -d
- eval "$(ssh-agent -s)"
- chmod 600 /tmp/deploy_rsa
- ssh-add /tmp/deploy_rsa

deploy:
- provider: script
  skip_cleanup: true
  script: cd <build-directory> && rm -rf dist/ node_modules/ && npm install && gulp
  on:
    branch: master
- provider: script
  skip_cleanup: true
  script: scp -P <port> -r <directory-to-deploy> <user>@<server-ip>:<deploy-directory>
  on:
   branch: master