使用Fabric+docker部署前端项目
部署过程
- 合并
develop
到master
push
代码- 远程服务器
pull
代码 - npm install(如果需要)
- npm run test (如果需要)
- npm run build
利用docker-compose运行node
使用docker来跑node
, 则线上不需要有node
环境.
- 将本地目录映射到
docker
中 - 在
docker
中跑npm
命令
# docker-compose.yml
version: '3'
services:
depoly:
container_name: project-container
image: node:carbon
working_dir: /project
volumes:
- .:/project
然后编可以通过命令docker-compose run --rm deploy yarn xxx
来执行npm
命令
利用makefile更好的执行命令
build:
docker-compose run --rm deploy yarn build
install:
docker-compose run --rm deploy yarn install --production
dev:
docker-compose run --rm -p 8080:8080 deploy yarn dev
# 因为当前build目录和build命令冲突, 用以下关键词区分两者
.PHONY: build
Shell脚本, 更好的执行makefile
#!/bin/bash
trap "kill 0" SIGINT
# 如果带了 -i 参数, 则需要安装依赖
if [[ "$1" == "-i" ]]; then
echo -e "\n\033[41;37m Install dependencies:\033[0m\n "
make install
if [[ "$?" == 1 ]]; then
echo -e "\t\033[31m Error in npm install, pleace check your package.json\n\033[0m"
exit 1
fi
fi;
echo -e "\n\n\033[41;37m Build... :\033[0m\n "
make build
if [[ "$?" == 1 ]]; then
echo -e "\t\033[31m Error in npm run build \n\033[0m"
exit 1
else
echo -e "\033[32mBuild Success \033[0m\n"
fi
exit $?
Fabric使用, 更快的完成部署
fabric基本介绍
fabric
是一个python
库, 可以通过ssh
在远程服务器执行命令.
它有两个1.0
和2.0
版本, 其中1.0
只支持py2
, 2.0
版本可以支持py2
和py3
, 而且两个版本的api
区别很大, 具体请参考官方文档.
以下所使用的是fabric2.0
, 附上fabric2.x文档
用途
可以利用它来pull
代码, 并执行代码编译
同时, 线上一般只拉master
分支, 所以fabric
也能帮助我们在本地合并到master
分支后push
到git
上
配置文件
from fabric import Connection
from invoke import task
c = Connection(host='server_name')
# 制定task
# 可以通过fab depoly 调用
@task
def depoly(d):
c.local('git checkout master') # 切换到master
c.local('git rebase develop') # 合并develop分支
c.local('git push origin master') # push到master
with c.cd('/home/ubuntu/path/your_project'):
c.run('git pull', pty=True) # 远程拉取代码
c.run('./depoly.sh') # 远程执行build
c.local('git checkout develop') # 本地切换回develop
执行fab depoly
就可以完成一系列部署
结语
上述过程其实完全可以由各种CI
完成
但是对于私有gitlab
, 同时又没有部署gitlab-runner
或者不想接入第三方的话
fabric
是个不错的选择