2013年3月26日星期二

jenkins使用git和sbt构建工程

简介

Jenkins, 以前叫做Hudson,是一款基于java的持续集成工具。

安装

安装非常简单,以RHEL6.x为例,直接下载jenkins的rpm安装文件,直接安装即可。
wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-1.480.3-1.1.noarch.rpm
rpm -ivh jenkins-1.480.3-1.1.noarch.rpm
service jenkins start
jenkins的配置文件在/etc/sysconfig/jenkins,可以从/etc/init.d/jenkins中读取到。这个配置文件可以修改jenkins的端口等配置信息。

集成git

首先在系统管理-》插件管理中安装git插件。
测试使用的git管理平台是gitlab。首先生成公钥文件,将公钥私钥都拷贝到目录/var/lib/jenkins/.ssh。并在gitlab中上传公钥。然后执行:
sudo -u jenkins git ls-remote -h git@10.10.139.177:root/tongji-app.git HEAD
确保可以通过ssh key进行安全访问。
然后在系统管理-》系统设置中配置git

集成sbt

首先在系统管理-》插件管理中安装sbt插件。
然后在系统管理-》系统设置中配置sbt。

配置一个任务

新建一个job,在版本工具处选择git,并填写git的repository地址,git@xx.xx.xx.xx:ab.git
在sbt处配置sbt,并设置sbt任务,最后设置发布的shell脚本。
此处的sudo可能会报错,大概意思是jenkins这个用户没有sudo的权限。
编辑/etc/sudoers,增加jenkins的sudo执行权限:
jenkins    ALL = NOPASSWD: /opt/sh/release_jetty.sh

然后点击保存,选择左侧的构建项目。可以在构建项目的时候查看日志,这时发现jenkins做了几件事情:
1. 克隆或更新git repository代码;
2. 执行sbt package
3. 以root权限执行release_jetty.sh脚本
此时,发现服务器中的web服务已经启动成功。

2013年3月21日星期四

Git常用命令

设置git的用户名和邮箱

git config --global user.name "My Name"
git config --global user.email "my@email.com"

基础操作

git clone git@server:app.git myrepo //克隆工程
git pull //从远端库更新并合并代码
git fetch //从远端库获取代码
git merge //合并代码
git branch xx //新建分支
git checkout xx //切换到分支xx
git branch //查看分支列表
git branch -d xx //删除分支
git push origin local:remote //将本地的分支local提交到远端库的remote分支
git commit -m 'message' //提交代码
git add [.|file]//将 [所有|指定] 文件加入到版本控制中
git rm file //将文件删除版本控制

2013年3月19日星期二

在CentOS6.3上安装GitLab

本文主要参考了Install GitLab on CentOS 一文,并附加一些安装错误的解决方案。

GitLab简介

GitLab是一个用于仓库管理系统的开源项目,项目首页:http://gitlab.org/
使用Git作为版本控制工具,并在此基础上搭建起web服务。web服务使用的ruby on rails,并使用了gitolite协同工作。使用mysql和redis作为数据服务。

一键安装脚本

请访问:https://github.com/mattias-ohlsson/gitlab-installer/blob/master/gitlab-install-el6.sh 。本文并未使用一键安装脚本。由于自定义了mysql和redis,因此有些配置是自己手动实现的。

安装系统依赖

如果安装了redis,下面的脚本中就将redis去掉。
# yum -y install readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel byacc sqlite-devel gcc-c++ libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui python-devel redis mysql-devel postgresql-devel
请注意libicu-devel,请注意安装时是否成功安装,如果不成功,将会在后面的安装过程出现错误,安装失败请手动安装libicu-devel

安装Ruby

先安装qt
# yum install qt-devel qtwebkit-devel -y
查看系统中ruby的版本,gitlab需要ruby至少是1.9.3
# curl -O http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p0.tar.gz  
# tar xzvf ruby-1.9.3-p0.tar.gz  
# cd ruby-1.9.3-p0

# ./configure --disable-install-doc

更新gem&安装rails

可以先更新一下gem,再安装rails
# gem update --system  
# gem update  
# gem install rails

安装gitolite

创建git和gitlab用户,并加入组
# adduser --system --shell /bin/bash --comment 'gitolite' --create-home --home-dir /home/git git
# adduser --shell /bin/bash --create-home --home-dir /home/gitlab gitlab
# usermod -a -G git gitlab
# usermod -a -G gitlab git
# sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa
# cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
# chmod 0444 /home/git/gitlab.pub
安装gitolite
sudo -H -u git git clone -b gl-v304 https://github.com/gitlabhq/gitolite.git /home/git/gitolite
切换到git用户
su git
$ cd /home/git
$ git clone -b gl-v304 https://github.com/gitlabhq/gitolite.git /home/git/gitolite
$ mkdir bin
$ gitolite/install -ln /home/git/bin
$ bin/gitolite setup -pk /home/git/gitlab.pub

修正权限

# chmod -R g+rwX /home/git/repositories/
# chown -R git:git /home/git/repositories/
# chmod 750 /home/git
检查权限是否生效:
# sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin

安装pygments和bundle

# easy_install pip  
# pip install pygments  
# gem install bundler

安装补充依赖

# gem install ruby-debug19
# gem install charlock_holmes

安装gitlabhq

在gitlab用户下安装
# su gitlab
$ cd /home/gitlab
$ git clone -b stable https://github.com/gitlabhq/gitlabhq.git gitlab
修改配置
请注意:三个文件的配置需要根据自身修改。比如database.yml指定了mysql服务的配置信息。gitlab中指定了host,port,repositories目录等信息,需要一一修改。
$ cd /home/gitlab/gitlab/config
$ cp gitlab.yml.example gitlab.yml
$ cp database.yml.mysql database.yml
$ cp unicorn.rb.example unicorn.rb
再安装一些依赖
# cd /home/gitlab/gitlab
# sudo -u gitlab -H bundle install --without development test sqlite postgres  --deployment

配置gitlab的git用户信息

# sudo -u gitlab -H git config --global user.email "gitlab@localhost"
# sudo -u gitlab -H git config --global user.name "Gitlab"

安装,初始化程序

注意,此时需要有一个mysql的服务,并在database.yml中配置好用户名和密码。
如果没有安装mysql,可以执行:
# yum install mysql-client mysql-server
# sudo gitlab
$ cd /home/gitlab/gitlab
$ RAILS_ENV=production rake db:setup
$ RAILS_ENV=production rake db:seed_fu  

运行一下看看:)

$ nohup bundle exec rails s -e production > /home/gitlab/gitlab.log 2>&1 &
访问地址:
http://127.0.0.1:3000

默认的管理员密码

user: admin@local.host
pass: 5iveL!fe

配置nginx

注意,需要修改nginx的启动用户:
#user              nginx;
user              gitlab root;

启动脚本


放入/etc/init.d并启动服务:
# curl --output /etc/init.d/gitlabhq https://github.com/gitlabhq/gitlab-recipes/blob/master/init.d/gitlab-centos
# chmod 755 /etc/init.d/gitlabhq
# service gitlabhq start
如果出现以下信息表示启动成功:
Starting unicorn:                                          [  OK  ]
Starting sidekiq:                                          [  OK  ]
注意:gitlab.socket此时才在指定目录出现,而以上面的测试方式启动在3000端口的服务是无法获得unix的socket的。此时使用脚本启动完成后,nginx的配置也会生效。
如果访问nginx proxy的地址后,出现css加载失败的情况,请执行下面命令后重启gitlab。
# bundle exec rake assets:precompile RAILS_ENV=production
之前曾经出现过ssh_key校验失败的错误,现在也没有复现了,考虑可能和更改使用socket方式有关,或者是因为执行了下面这条命令,具体原因无法分析了。
# bundle exec rake gitlab:enable_namespaces RAILS_ENV=production 
使用merge requests中出现错误提示:This repository does not have satellite. Ask administrator to fix this issue  需要执行下面的命令:
# bundle exec rake environment gitlab:enable_automerge RAILS_ENV=production
执行中如果出现错误:
Updating repo permissions ...
... done

Creating satellites for ...
Administrator / tongji-app ... 
rake aborted!
No such file or directory - chdir
需要手动创建目录
# mkdir /home/gitlab/gitlab-satellites