部署 分享__水。。从开发到上线 Rails 项目自动部署

a-wing · 2018年03月13日 · 最后由 jicheng1014 回复于 2018年03月15日 · 3008 次阅读

一个项目从开发到上线。该记录点什么。

大概在几个月前开始开发一个管理系统,中间为了练手又写了个开源程序 RailsGun

我觉得值得记录的就是从 push 之后的自动化流程了

私有项目也在 github

  • 1.push 提交代码触发 github webhook
  • 2.jenkins 跑持续集成,跑测试单元(公司项目用 jenkins。练手项目用 travis-ci.org。开源项目用 org 结尾的域名。闭源项目用 com 结尾的域名)
  • 3.自动升级部署脚本

github 触发没啥说的。github 有 jenkins 应用插件

jenkins

jenkins 要装 github 插件。接收 github 的触发 hook

当然检测发布分支

为 jenkins 服务器单独添加 deploy keys. 把公钥传给 github 以确保可以 clone 代码

jenkins 有 rvm 插件。ruby 环境就变得很容易了。(刚开始不知道 rvm,手动配环境。终于明白 rvm 有多复杂了。手动配建议用 rbenv)

rails test 我知道我测试单元写的很烂。。对集成测试单元测试的理解还不够

自动部署。(这里是重头戏)

先上代码:

#!/bin/bash
export RAILS_ENV=production
export POSTGRESQL_DATABASE_PASSWORD=97b841a29f151ed58e64c
export SECRET_KEY_BASE=97b841a29f151ed58e64cc2d7aa6c666360a8a470fde108fec2aff7ed103db38ecbaa85a533bd39890b3f83adcb0000274a7e6b3fc36b9b0830dc30b97a2818d


export PATH="$HOME/.rbenv/bin:$PATH:$HOME/.rbenv/shims"

echo $RAILS_ENV
pwd
ruby -v

cd 程序路径/
pwd

if test -e tmp/pids/server.pid
then
    echo 'Restarting'
    kill `cat tmp/pids/server.pid`
else
    echo 'Starting'
fi

bundle install
rake db:migrate
rails assets:precompile
rails server -d

每次覆盖代码运行这个脚本

原理:

程序执行之后会创建./tmp/pids/server.pid 文件。并把 pid 写入里面

我在测试的时候加了这段代码,不然会找不到编译后的 js 和 css

sed -i 's/config.assets.compile = false/config.assets.compile = true/g' config/environments/production.rb

我不太理解 rails 这个默认参数。以后有待补充

摘自个人博客 https://a-wing.top/ruby/2018/03/13/rails_production_deployment.html

求各位大佬轻点喷

如果觉得我的思路有问题请一定要指出,感谢

我们是 gitlab -> jenkins -> capistrano

Terry.Shi 回复

果然。我就猜到自己写脚本自动部署感觉不太对

capistrano 用的多一点

用 docker 也不赖

需要 登录 后方可回复, 如果你还没有账号请 注册新账号