CI 使用 GitHub、Travis、NPM 和 Gulp 部署脚本



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

我正在尝试的内容概述:

  • 将新代码推送到 github 上的分支
  • 在测试运行并合并到主分支后,特拉维斯接管。
  • Travis运行测试,然后在我的DigitalOcean盒子上运行部署脚本。
  • 部署脚本通过 NPM 任务运行,然后 Gulp
  • 如果一切正常,node_modules文件夹将被更新(来自package.json(,并且来自Gulp的所有编译文件都将在服务器上更新。

我已经让它几乎可以工作了,而且似乎是某种权限问题(即使我没有收到任何构建错误(

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

似乎特拉维斯正在自己的容器中构建,但实际的盒子没有得到更新。

这是我的.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

如果有人能指出我正确的方向,那就太神奇了。

因此,经过多次失败的尝试,我在服务器端使用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

最新更新