您的位置:首页 > 其它

Git+gerrit+jenkins安装配置

2017-02-18 16:14 375 查看
jdk安装
第一步:执行 rpm -qa|grep jdk 命令查看当前的jdk情况。
第二步:执行 yum -y remove java java-1.7.0-openjdk* 卸载openjdk

[root@ybr01 jdk]# vim /etc/profile
export JAVA_HOME=/u01/jdk/jdk1.8.0_131
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
[root@ybr01 jdk]# source /etc/profile
[root@ybr01 jdk]# java -version
[root@ybr01 u01]# ln -s /u01/jdk/jdk1.8.0_131/bin/java /usr/bin/java


maven安装

[root@ybr01 home]# cd /home/
[root@ybr01 home]# tar -zcvf apache-maven-3.3.9.tar.gz
[root@ybr01 jdk]# vim /etc/profile
export MAVEN_HOME=/home/apache-maven-3.3.9
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$MAVEN_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
export JAVA_HOME JAVA_BIN PATH CLASSPATH MAVEN_HOME
#设置repository库路径
[root@ybr01 conf]# cd /home/apache-maven-3.3.9/conf


nexus私服安装
#直接上传文件夹,解压后
#设置开机自启

[root@ybr01 nexus]# cp /home/nexus/nexus /etc/init.d/
[root@ybr01 nexus]# chkconfig --add nexus
[root@ybr01 nexus]# chkconfig nexus on
[root@ybr01 nexus]# chkconfig --list | grep nexus
nexus              0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@ybr01 nexus]# service nexus status


#设置maven的setting文件的私服地址

git 安装
[root@ybr01 bin]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
#下载git
[root@ybr01 home]# wget https://github.com/git/git/archive/v2.3.0.zip #解压zip包
[root@ybr01 home]#
unzip v2.3.0-dgit
[root@ybr01 home]# cd git-2.3.0/
[root@ybr01 git-2.3.0]# make prefix=/usr/local/git all
[root@ybr01 git-2.3.0]#
make prefix=/usr/local/git install
#编辑profile文件
[root@ybr01 git-2.3.0]#
vim /etc/profile
exportPATH=/usr/local/git/bin:$PATH
[root@ybr01 git-2.3.0]# source /etc/profile
[root@ybr01 git-2.3.0]# git --version
[root@ybr01 git-2.3.0]#git version 2.3.0
#在jenkins安装机子生成ssh 公钥
[root@ybr01 .ssh]# ssh-keygen
#gitweb安装 
yum install gitweb
/usr/local/git/share/gitweb/gitweb.cgi
[root@ccy001 Review]# vim etc/gerrit.config
[gitweb]
        cgi =/usr/local/git/share/gitweb/gitweb.cgi

#配置gitweb 
(1) 配置 /etc/gitweb.conf 文件: 

在默认的文件末尾添加:
$projectroot = '/home/git/gitweb'; #gitweb展示的那些代码库的根目录


nginx 安装
[root@ybr01 home]# wget http://nginx.org/download/nginx-1.12.0.tar.gz #解压
[root@ybr01 home]# tar -zxvf nginx-1.12.0.tar.gz
[root@ybr01 home]# cd /home/nginx-1.12.0 
[root@ybr01 nginx-1.12.0]# yum -y install openssl openssl-devel
[root@ybr01 nginx-1.12.0]# yum -y install pcre* zlib*
[root@ybr01 nginx-1.12.0]# yum install -y gcc gcc-c++
[root@ybr01 nginx-1.12.0]# ./configure --with-stream
[root@ybr01 nginx-1.12.0]# make
[root@ybr01 nginx-1.12.0]# make install
[root@ybr01 nginx-1.12.0]# ./configure --with-http_stub_status_module --with-stream --with-http_geoip_module --with-http_ssl_module --with-http_realip_module
#设置开机自启
[root@ybr01 nexus]# chkconfig nginx on
[root@ybr01 nexus]# chkconfig --list | grep nginx
#用httppasswd配置gerrit用户 密码
[root@ccy001 gerrit]# yum -y install httpd-tools
[root@ccy001 gerrit]# htpasswd -b /home/gerrit/gerrit.passwd ccy001 ccy001

#创建软链接
ln -s /usr/local/git/bin/git /usr/bin/git
ln -s /u01/mvn/apache-maven-3.3.9/bin/mvn /usr/bin/mvn
ln -s /u01/jdk/jdk1.8.0_131/bin/java /usr/bin/java

jenkins 安装
#上传war包至/home/jenkins
#在jenkins安装机子生成ssh 公钥
[root@ybr01 .ssh]# ssh-keygen
#解压jenkins  配置目录tar包,生成.jenkins 文件夹在/root/目录下
#启动jenkins
[root@ccy001 jenkins]# cd /home/jenkins
[root@ccy001 jenkins]# sh start-jenkins.sh
[root@ccy001 jenkins]# tail -100f system_out.log  
#设置开机自启
[root@ccy001 jenkins]# vim /etc/init.d/jenkins
#!/bin/bash 
#chkconfig:2345 20 90 
#description:jenkins
#processname:jenkins
export JAVA_HOME=/u01/jdk/jdk1.8.0_131
case $1 in 
        start) su root /u01/jenkins/start-jenkins.sh;; 
        stop) su root /u01/jenkins/stop-jenkins.sh;; 
        restart) su root /u01/jenkins/stop-jenkins.sh;su root /u01/jenkins/start-jenkins.sh;;
    status) ps -ef |grep jenkins;;
        *) echo "require start|stop|restart|status" ;; 
esac
[root@ybr01 nexus]# chkconfig jenkins on
[root@ybr01 nexus]# chkconfig --list | grep jenkins
#后续在jenkins上配置gerrit的地址,或者修改.jenkins 下的配置文件,找到192.168.1.203字样
[root@ccy001 .jenkins]# grep -ni "192.168" *.*
gerrit-trigger.xml:8:        <gerritHostName>192.168.1.203</gerritHostName>
gerrit-trigger.xml:23:        <gerritFrontEndUrl>http://192.168.1.203</gerritFrontEndUrl>
hudson.tasks.Mailer.xml:3:  <hudsonUrl>http://192.168.1.203:8081/jenkins/</hudsonUrl>
jenkins.model.JenkinsLocationConfiguration.xml:4:  <jenkinsUrl>http://192.168.1.203:8081/jenkins/</jenkinsUrl>
selenium.log:20:禁用: Grid Hub started on port 4444 with args: -maxSession 5 -timeout 300 -browserTimeout 0 -host 192.168.1.203
[root@ccy001 .jenkins]# vim gerrit-trigger.xml
#替换旧ip为新的地址
g/114.246.101.138/s//118.89.222.115/g
g/chenchaoyun/s//jenkins/g
#继续查找
[root@ccy001 .jenkins]# grep -ni "192.168" */*/*.*
find -type f -name */*/*.*| xargs sed 's#192.168.1.203#oldgril#g'
-i

gerrit 安装
地址: https://www.gerritcodereview.com/download/gerrit-2.11.1.war
#上传gerrit的tar包至/home 目录并解压
[root@ccy001 home]# cd /home/gerrit/
#上传gerritdb.sql 至/home/gerrit/
[root@ccy001 gerrit]# ls
gerrit-2.8.1.war  gerritdb.sql  Review
#导入gerrit数据脚本
[root@ccy001 gerrit]# mysql -uroot -proot123
mysql>CREATE DATABASE IF NOT EXISTS gerritdb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql>use gerritdb;
mysql>source /home/gerrit/gerritdb.sql;
mysql> create user gerritusr IDENTIFIED by 'gerritusr';
mysql> grant all on gerritdb.* to gerritusr@'localhost';
mysql> flush  privileges;
mysql> grant all privileges on *.* to 'gerritusr'@'localhost' identified by 'gerritusr' with grant option;
mysql> flush  privileges;
#配置gerrit 连接mysql的用户名密码
[root@ccy001 etc]# cd /home/gerrit/Review/etc
[root@ccy001 etc]# vim gerrit.config

#设置密码
[root@ccy001 etc]# vim secure.config 
#设置nginx反向代理
[root@ccy001 gerrit]# vim gerrit.conf
server {
        listen       80;
        server_name  39.108.0.229;

        location / {
                root /home/gerrit/Review;
                proxy_pass http://39.108.0.229:8080;                 proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
                auth_basic "Gerrit Code Review";
                auth_basic_user_file /home/gerrit/gerrit.passwd;
        }
        error_page 404 /404.html;
        location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
#引入到nginx的配置文件
[root@ccy001 gerrit]# cd /usr/local/nginx/conf/
[root@ccy001 conf]# vim nginx.conf
#加入
include /home/gerrit/gerrit.conf;

[root@ccy001 nginx]# sh restartNginx.sh
#配置gerrit开机自启
[root@ccy001 gerrit]# cd /etc/init.d/
[root@ccy001 init.d]# vim gerrit
#!/bin/bash 
#chkconfig:2345 20 90 
#description:jenkins
#processname:jenkins
export JAVA_HOME=/u01/jdk/jdk1.8.0_131
case $1 in 
        start) su root /home/gerrit/start-gerrit.sh;; 
        stop) su root  /home/gerrit/stop-gerrit.sh;;   
        restart) su root /home/gerrit/restart-gerrit.sh;; 
    status) ps -ef |grep gerrit;;
        *) echo "require start|stop|restart|status" ;; 
esac
[root@ccy001 init.d]# chkconfig gerrit on
[root@ccy001 init.d]# chkconfig --list |grep gerrit
gerrit             0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭
 
#查看gerrit启动日志
[root@ccy001 bin]# tail -100f /home/gerrit/Review/logs/error_log 

gerrit 安装  初始化
#下载地址,翻墙
https://gerrit-releases.storage.googleapis.com/gerrit-2.10.war
#上传gerrit war包至服务器, 初始化
#第一个用户必须是admin
#安装gitweb
[root@ccy001 git]#
yum -y install gitweb
[root@ccy001 bin]# ln -s /usr/local/git/share/gitweb/gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
#gerrit 2.14 版本可以提前准备好配置文件
[root@ccy001 git]# vim /home/gerrit/etc/gerrit.config
[gerrit]
    basePath = git
    canonicalWebUrl = http://39.108.0.229/ [database]
    type = mysql
    hostname = localhost
    database = gerritdb
    username = gerritusr
[auth]
    type = HTTP
[sendemail]
    smtpServer = localhost
[container]
    user = root
    javaHome = /u01/jdk/jdk1.8.0_131/jre
[sshd]
    listenAddress = *:29418
[httpd]
    listenUrl = proxy-http://*:8080/
[cache]
    directory = cache
#复制代码库至/home/gerrit/git/目录下 
[root@ccy001 gerrit]#  java -jar gerrit-2.14.2.war  init -d gerrit/Review
#安装提示
#Location of Git repositories   [git]: /home/review_site/git/
#Database server type           [h2]: mysql
#Database name                  [reviewdb]: gerritdb
#Database username              [root]: gerritusr
#Authentication method          [OPENID/?]: http
#Behind reverse proxy           [Y/n]? y
#Canonical URL                  [http://ccy001/]: http://39.108.0.229/
#创建nginx 反向代理文件
[root@ccy001 gerrit]# vim gerrit.conf
server {
        listen       80;
        server_name  39.108.0.229;

        location /{
                root /home/gerrit;
                proxy_pass http://39.108.0.229:8080/;                 proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
                auth_basic "Gerrit Code Review";
                auth_basic_user_file /home/gerrit/gerrit2.passwd;
        }
        error_page 404 /404.html;
        location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

(1)gerrit  提交信息乱码
#查看gerrit 数据库编码
mysql> show variables like '%character%';
| character_set_server
   | latin1 |

首先保证服务器的系统编码是支持中文的
[root@115 ~]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
#永久性修改mysql

[root@115 ~]# vim /etc/my.cnf

.......

[mysqld]

......

character_set_server = utf8            【添加这一行内容】
#重启
[root@115 ~]# service mysql restart

(1)gerrit 发送邮件异常
[sendemail]
        smtpServer = smtp.163.com
        smtpServerPort = 465
        smtpEncryption = ssl
        smtpUser = 18734170206
        smtpPass = your password
        sslVerify = false
        from=CodeReview<18734170206@163.com>
#或者
[sendemail]
        smtpServer = smtp.qq.com
        smtpServerPort = 465
        smtpEncryption = ssl
        smtpUser = 474849750@qq.com
        smtpPass = your password
        sslVerify = false
        from=CodeReview<474849750@qq.com>

(1)启动gerrit异常
(1) No index versions ready; run java -jar /home/gerrit/bin/gerrit.war reindex
[root@ccy001 gerrit]#  java -jar gerrit.war reindex -d /home/gerrit/Review
(2)The page you requested was not found, or you do not have permission to view

反向代理配置最后不用加/
(3)
User jenkins has no capability to connect to Gerrit event stream
解决方案
- 管理员登录gerrit
- Projects->List->All-Projects
- Projects->Access
  - Global Capabilities->Stream Events 点击 Non-Interactive Users
  - 添加 Jenkins@zjc.com 用户到 ‘Non-Interactive Users’ 组
(4)gitweb  问题解决"Can't locate Time/HiRes.pm in @INC"问题
yum -y  install perl-Time-HiRes
yum -y install perl-CPAN
yum -y install perl-CGI

(5)解决Gerrit的git unpack error问题,error Missing unknown 613fd2557fba30aff2dbd51c3807cc57561bab08
#解决的办法就是到reviewdb数据库里,先从patch_sets表中找出change_id是 对应commitid的记录,确定无误后

我们要做的是将其关闭,并把状态置为Abandon。(友情提醒,涉及重要业务,注意备份数据库)

mysql> update changes set open='N',status='A' where change_id=1974;

(6)Gerrit集成Gitweb没有查看权限问题
gerrit集成gitweb后,系统管理员有权限进去gitweb,其他成员进去都是not found。
解决方案:
在单独项目的ACL里为项目的用户组增加了对refs/meta/config的read权限。用户可以正常显示gitweb页面。
不良影响:
原来gerrit是用git做自身的ACL管理的,因此所有对refs/meta/config有read权限的用户都可以在Project的Access页面里修改权限,修改后虽然不能直接submit,
但是可以作为patch提交review。而且通过gitweb就能够看到project.config和groups文件的全部内容,知道当前项目是如何设置权限的。
这样是否合适就仁者见仁智者见智了。另外,对于用户提交的关于权限修改的patch如果想commit的话需要对refs/meta/config做和refs/heads/*一样的权限设定,
也就说需要Label Code-Review,Label Verified,Submit三个权限才有可能commit
patch。
(7)jenkins build的时候拿的不是新提交的代码

源码管理
选择git,
Refspec:refs/changes/*:refs/changes/*
Branch Specifier (blank for 'any'):$GERRIT_REFSPEC
(8)jenkins 配置slave的时候命令找不到

把要用的命令创建一个快捷方式到/usr/bin,如
ln -s /usr/local/git/bin/git /usr/bin/git
ln -s /home/apache-maven-3.3.9/bin/mvn /usr/bin/mvn

ln -s /u01/jdk/jdk1.8.0_131/bin/java /usr/share/java
ln -s /u01/maven/apache-maven-3.3.9/bin/mvn /usr/bin/mvn
ln -s /usr/local/git/bin/git /usr/bin/git

(9)设置job在slave机器上执行

在job的Configure中,Advanced
Project Options,选择高级,
勾选“Restrict where this project can be run”,在Label Expression中,输入slave的标签,如“slave104”

(10)修改gerrit 访问url,加上后缀 gerrit。如http://39.108.0.229/gerrit/

1、修改gerrit 配置文件
#修改两个地方,gerrit与httpd
vim /home/gerrit/Review/etc/gerrit.config
[gerrit]
    basePath = git
    canonicalWebUrl = http://39.108.0.229/gerrit [httpd]
    listenUrl = http://*:8080/gerrit
2、修改gerrit nginx的反向代理配置文件

(11)设置gerrit项目权限

(11)com.sonymobile.tools.gerrit.gerritevents.ssh.SshException: com.jcraft.jsch.JSchException: Auth fail,User: jenkins KeyFile: /root/.ssh/id_rsa
原因是新安装的gerrit jenkins用户没有配置主机的ssh key,登陆jenkins用户到gerrit,添加SSH Public key 就好了

(12)jenkins 打包构建时,杀掉jenkins脚本里执行的进程,解决办法

解决办法:

1.启动 Jenkins 的时候加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

2.在后台进程前加上 BUILD_ID=dontKillMe,也就是 BUILD_ID=dontKillMe nohup npm start >/var/app/nohup.out 2>&1 &

用了上面二个方法后,就解决jenkins自动杀npm进程的问题了.

ps:下面是其他网上找的一些方法,当然能不能解决问题我就不知道了.

1.在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的进程



2.临时改变BUILD_ID值,使得jenkins不会找到并结束掉run.sh启动的后台进程

OLD_BUILD_ID=$BUILD_ID

echo $OLD_BUILD_ID

BUILD_ID=dontKillMe

./run.sh restart

#改回原来的BUILD_ID值

BUILD_ID=$OLD_BUILD_ID

echo $BUILD_ID

(13)git 克隆项目出现no
matching key exchange method found. Their offer: diffie-hellman-group1-sha1
解决办法:用git bash执行
vi ~/.ssh/config
#插入
Host 39.108.0.229
     KexAlgorithms+diffie-hellman-group1-sha1

(14)jenkins  nginx 配置反向代理报404
解决办法:vim /usr/local/nginx/conf/nginx.conf
location /{
           try_files $uri @jenkins;
        }

        location @jenkins{
           internal;
           client_max_body_size 30m;
           client_body_buffer_size 128k;
           proxy_buffer_size 26400k;
           proxy_buffers   32 25000k;
           proxy_busy_buffers_size 33280k;
           proxy_redirect off;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://123.206.68.97:8081;            access_log logs/jenkins_access.log;
        }

15、gerrit 主题配置
[root@ccy001 gerrit]# vim Review/etc/gerrit.config ^C

[theme]

        backgroundColor = FCFEEF

        textColor = 000000

        trimColor = D4E9A9

        selectionColor = FFFFCC

        topMenuColor = D4E9A9

        changeTableOutdatedColor = F08080

[theme "signed-in"]

        backgroundColor = FFFFFF

[theme "signed-out"]

   backgroundColor = 00FFFF


gerrit 仓库添加项目
#前提是id_rsa.pub添加到gerrit的ssh认证中

ssh -p 29418 user@localhost gerrit create-project --name demo-project
ssh -p 29418 admin@39.108.0.229 gerrit create-project --name bookmanager

git push ssh://user@localhost:29418/demo-project *:*
git push ssh://chenchaoyun@39.108.0.229:29418/demo-project *:*

#htpasswd的使用
#新建用户
htpasswd -b /home/gerrit/gerrit2.passwd ccy001 ccy001
#
htpasswd命令删除用户名和密码
htpasswd -D /home/gerrit/gerrit2.passwd ccy001
#
htpasswd命令修改密码
htpasswd -D .passwd Jack
htpasswd -b .passwd Jack 123456

gerrit 升级操作
1、导出203备份的reviewdb.sql
mysqldump -ugerritusr -pgerritpass gerritdb>gerritdb.sql
2、安装  gerrit-2.8.1.war,安装完2.8.1 需要试试看历史记录还在不
3、依次安装 2.9-->2.10-->2.11;最高可升级至2.11版本
4、需要将gerrit缓存文件(隐藏文件夹.gerritcodereview)转移到新的gerrit 目录
原Review目录下,删除bin etc logs lib plugins文件夹 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git gerrit 持续集成