最近把rails项目改为使用脚本部署后,每次发版都需要登录服务器,而且java项目使用的jenkins部署,故改为jenkins部署,这里记录一下踩的坑。
-
1.创建一个自由风格的项目
因为打算执行shell来部署脚本,故选用free_style的项目,如果选用流水线的话需要在rails 项目加一个JenkinsFile
jenkins的项目名称要与要部署的项目名称一致,它会在节点上创建一个jenkins的项目名称的目录
-
在 General 配置
描述:自己项目的功能,非必须,为了便于维护还是有必要填写的
限制项目运行的节点: 这个必须限制下,要不会部署在已知的节点
-- 2.1 节点配置
在系统管理-节点管理 中可以创建新的节点
这里并发构建数 最好与服务器的核数一致
-
-
3.源码管理
选择git, 添加项目的地址,jenkins 的公钥要事先配置到代码库
配置分支:
jenkins 会自动拉取相应分支的代码到节点上,注意:拉下来的项目并不会由分支名,而是上一次提代码的tag
- 构建
选择执行shell
- 构建
#!/bin/bash -l #-l 为login,必加,否则会在安装jenkins的服务器上执行脚本
export BUILD_ID=dontKillMe # 必加,否则 jenkins 执行完脚本会杀死衍生的进程
./deploy.sh release-1.1 # 部署脚本, 不要加sh
deploy.sh
#! /bin/bash
if [ -z $1 ]
then
branch='master'
else
branch=$1
fi
echo "$branch"
git checkout $branch
git pull
pids=$(cat tmp/pids/server.pid | awk $'{print $1}')
if [ ! -z $pids ]
then
echo "$pids"
kill -9 $pids
fi
bundle
rails db:migrate
env=$(cat /etc/profile | grep RAILS_ENV |awk $'{print $2}')
if [ $env = "RAILS_ENV=production" ]
then
echo "Production"
rails s -p 3000 -d
else
echo "Staging"
rails s -p 4000 -d
fi