Git+gerrit+jenkins安装配置
jdk安装第一步:执行 rpm -qa|grep jdk 命令查看当前的jdk情况。第二步:执行 yum -y remove java java-1.7.0-openjdk* 卸载openjdk[root@ybr01 jdk]# vim /etc/profileexport JAVA_HOME=/u01/jdk/jdk1.8.0_131export JAVA_BIN=$JAVA
   ·  
 
- 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 -d git
 [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
 export PATH = /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 安装
 
 #上传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 安装 初始化
 
 #下载地址,翻墙
 #上传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文件夹 
更多推荐
 



所有评论(0)