Git+gerrit+jenkins安裝配置

  • 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
#解壓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 文件: 
在默認的文件末尾添加:
  1. $projectroot = '/home/git/gitweb'; #gitweb展示的那些代碼庫的根目錄

  • nginx 安裝
#解壓
[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<[email protected]>
#或者
[sendemail]
        smtpServer = smtp.qq.com
        smtpServerPort = 465
        smtpEncryption = ssl
        smtpUser = [email protected]
        smtpPass = your password
        sslVerify = false
        from=CodeReview<[email protected]>

  • (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
  - 添加 [email protected] 用戶到 ‘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”

  • 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 [email protected] 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文件夾 




















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章