jenkins自动化构建rails程序


<pre name="code" class="plain">今天尝试使用jenkins来实现rails程序的自动化部署。

 

项目代码使用git@osc托管

利用git@osc提供的push hook功能去触发远程构建

一、安装jenkins

1.先保证有Java1.5以上


2. jenkins官网下载最新的war包。在官网也可以找到直接安装的方法。个人觉得使用war更简单。

有tomcat,jboss等容器,把war放进去就可以了。没有的话可以使用jenkins自带的jetty。


3.执行下面的命令可以让jenkins在后台运行 (注意结尾有一个&符合)

nohup java -jar jenkins.war --httpPort=7000 &
 
二、进去jenkins的管理页面

新建一个多配置项目

勾选触发远程构建,即访问提供的URL即可触发构建

http://xxxx:xxx/job/test/build?token=xxx
这个是能触发远程构建最简配置方式。



选择execute shell 。这里需要提前写好自动部署的脚本


#!/usr/bin/env bash
git pull
rake assets:precompile
ps -ef|grep rails|grep -v grep|grep -v sh|grep 3030|awk '{print $2}'|xargs kill -9
rails s -p 3030 -e production -d

设置hook


这里有两个坑!

第一  git@osc hook用的是post方式提交,不能去触发到jenkins的远程构建,需要通过第三方通过get方式去触发

eg:

<pre name="code" class="ruby"> #测试环境的自动化部署
  #get xx/autodeploy
  def autodeploy
    hook = Oj.load(params["hook"])
    if hook["password"] == 'bigbang_server'
      Rails.logger.info "[autodeploy] 测试环境自动化部署启动 #{hook["push_data"]["user_name"]}"
      redirect_to "http://xxxxx:7000/job/test/build?token=xxxx"
       
    else
        render nothing: true and return
    end
  end


 第二、jenkins在执行shell之后会自动kill子进程,会导致重启好的rails服务器被kill。这里jenkins做的安全性的一个保证。 

解决方法之一 

通过修改BUILDID让jenkins不能杀死创建的子进程。但是这样做的话开发者就做好构建失败的异常处理

OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
#执行脚本
./autodeploy.sh
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID


这样触发逻辑就变成了  代码push -> git@osc的push hook -> 重定向到jenkins的远程构建触发器->触发构建 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值