分类: Android平台
2016-08-01 17:07:49
Ubuntu之邮件服务器(Postfix, Dovecot, MySql)
Gitlab预配置
Gerrit预配置
Jenkins预配置
Gitlab已经配置了root账户的邮箱为admin@vzjc.com
$ sudo adduser admin
可以得到系统的用户名admin和用户自己设置的密码
$ su - admin
$ ssh-keygen -C admin@vzjc.com
$ cat .ssh/id_rsa.pub
$ exit
进入注册页面,输入注册信息,点击Sign up按钮来注册用户user1。
登录邮箱点击验证连接,在Gitlab上成功创建user1账号
$ sudo adduser user1
$ su - user1
$ ssh-keygen -C user1@vzjc.com
$ cat .ssh/id_rsa.pub
$ exit
点击 test-project1 工程界面左上的 dev-group
点击 Members
把 user1 作为 Reporter 身份添加到组 dev-group (Reporter可以下载代码但是没上传权限)
地址为git@gitlab.zjc.com:dev-group/test-project1.git
$ su - user1
$ cd ~
$ git clone git@gitlab.zjc.com:dev-group/test-project1.git
$ exit
$ su - user1
$ cd ~/test-project1/
$ git config --global user.name 'user1' $ git config --global user.email 'user1@vzjc.com' $ touch testfile
$ git add .
$ git commit -m 'user1 add testfile' $ git push
$ exit
已经有了第一个账户admin并配置信箱为admin@vzjc.com
$ su - admin
$ cat ~/.ssh/id_rsa.pub
$ exit
使用htpasswd工具创建user1和密码
$ sudo -u gerrit -H htpasswd /home/gerrit/gerrit/etc/htpasswd.conf user1
使用user1登录gerrit,更新信箱为user1@vzjc.com
更新SSH公钥 (user1@zjc.com那个)
Jenkins系统已经创建了管理员账户jenkins并安装了Gerrit Trigger插件
为Gerrit系统创建用户jenkins
$ sudo -u gerrit -H htpasswd /home/gerrit/gerrit/etc/htpasswd.conf jenkins
为系统用户jenkins创建ssh秘钥,并查看公钥
也可以用前面的su - jenkins登录后再操作。这样就不用sudo -u jenkins -H前缀了
$ sudo -u jenkins -H ssh-keygen -C jenkins@vzjc.com
$ sudo -u jenkins -H cat /home/jenkins/.ssh/id_rsa.pub
用jenkins登录Gerrit更新邮箱并验证
zjc@zjc:~$ id jenkins
uid=122(jenkins) gid=131(jenkins) groups=131(jenkins)
zjc@zjc:~$ sudo vim /etc/dovecot/conf.d/10-mail.conf
然后修改first_valid_uid这个值
用jenkins登录Gerrit,更新SSH公钥为系统用户jenkins的公钥
主页面->Manage Jenkins->Configure System
Jenkins Location ->System Admin e-mail address : jenkins@vzjc.com
E-mail Notification
主页面->Manage Jenkins->Gerrit Trigger->Add New Server
如果点击Test Connection后出现如图所示的错误User jenkins has no capability to connect to Gerrit event stream.,这是因为因Jenkins 没有权限监听 Gerrit 的 ‘Stream Events’,可如此配置
点击Test Connection,出现的字符串为 success 则代表配置成功
点击下方的保存按钮来保存设置
如果安装Gerrit时没有或者没有选择添加Verified标签功能[‘lable Verified’],需要自己添加
$ su - admin
$ git init cfg; cd cfg
$ git config --global user.name 'admin' $ git config --global user.email 'admin@vzjc.com' $ git remote add origin ssh://admin@review.zjc.com:29418/All-Projects
$ git pull origin refs/meta/config
$ vim project.config
在文件末添加
[label "Verified"] function = MaxWithBlock value = -1 Fails value = 0 No score value = +1 Verified
$ git commit -a -m 'Updated permissions' $ git push origin HEAD:refs/meta/config
现在提交的 Review 请求只有 Code Rivew 审核,我们要求的是需要 Jenkins 的 Verified 和 Code Review 双重保障,在 Projects 的 Access 栏里,针对 Reference: refs/heads/ 项添加 Verified 功能
前面我们在Gitlab上搭建了一个 test-project1 的工程,普通用户是没有办法去 push 的,只能使用 git review 命令提交. 而 git review 命令需要 .gitreview 文件存在于项目目录里。
$ su - admin
$ git clone git@gitlab.zjc.com:dev-group/test-project1.git
$ cd test-project1
$ vim .gitreview
文件内容为:
[gerrit] host=review.zjc.com port=29418 project=test-project1.git
$ git add .gitreview
$ git config --global user.name 'admin' $ git config --global user.email 'admin@vzjc.com' $ git commit .gitreview -m 'add .gitreview file by admin.' $ git push origin master
$ exit
$ sudo apt-get install python-pip
$ sudo pip install testrepository
$ su - admin
$ cd test-project1
$ vim .testr.conf
文件内容为:
[DEFAULT]
test_command=OS_STDOUT_CAPTURE=1 OS_STDERR_CAPTURE=1 OS_TEST_TIMEOUT=60 ${PYTHON:-python} -m subunit.run discover -t ./ ./ $LISTOPT $IDOPTION test_id_option=--load-list $IDFILE test_list_option=—list
$ git add .testr.conf
$ git commit .testr.conf -m 'add .testr.conf file by admin' $ git push origin master
$ exit
要知道 review 是在 gerrit 上,而 gerrit 上现在是没有项目的,想让 gitlab 上的项目能在 gerrit 上 review 的话,必须在 gerrit 上创建相同的项目,并有相同的仓库文件.
$ su - admin
$ ssh -p 29418 admin@vzjc.com gerrit create-project test-project1
$ exit
赋予gerrit用户访问 test-project1 的权限因为gerrit用户无访问gitlab的权限。所以要先看是否gerrit用户下已经存在了id_rsa密钥,如果没有则创建,然后把公钥加入到gitlab的admin账户上(这里加到 admin 账户上,是因为后面Gerrit系统还会有个复制 git 库到 Gitlab的功能,需要管理员权限)
$ sudo -u gerrit -H ls /home/gerrit/.ssh
$ sudo -u gerrit -H ssh-keygen -C gerrit@vzjc.com
$ sudo -u gerrit -H cat /home/gerrit/.ssh/id_rsa.pub
用 root 登录Gitlab,把公钥添加到 admin 的SSH Key上 - 额,这是因为,Gerrit使用gerrit用户身份运行的,而Gerrit得git库复制功能需要权限复制到Gitlab上
$ cd /home/gerrit/gerrit/git
$ sudo -u gerrit -H rm -fr test-project1.git
$ sudo -u gerrit -H git clone --bare git@gitlab.zjc.com:dev-group/test-project1.git
当用户 git review 后,代码通过 jenkins 测试、人工 review 后,代码只是 merge 到了 Gerrit 的 test-project1 项目中,并没有 merge 到 Gitlab 的 test-project1 项目中,所以需要当 Gerrit test-project1 项目仓库有变化时自动同步到 Gitlab 的 test-project1 项目仓库中。Gerrit 自带一个 Replication 功能,同时我们在安装 Gerrit 时候默认安装了这个 Plugin。现在只需要添加一个 replication.config 给 Gerrit
$ sudo -u gerrit -H vim /home/gerrit/gerrit/etc/replication.config
文件内容为:
[remote "test-project1"] # Gerrit 上要同步项目的名字 projects = test-project1
url = git@gitlab.zjc.com:dev-group/test-project1.git
push = +refs/heads/*:refs/heads/* push = +refs/tags/*:refs/tags/* push = +refs/changes/*:refs/changes/* threads = 3
设置gerrit用户的 ~/.ssh/config
$ sudo -u gerrit -H vim /home/gerrit/.ssh/config
文件内容为:
Host gitlab.zjc.com:
IdentityFile ~/.ssh/id_rsa
PreferredAuthentications publickey
$ sudo -u gerrit -H sh -c "ssh-keyscan -t rsa gitlab.zjc.com >> /home/gerrit/.ssh/known_hosts"$ sudo -u gerrit -H sh -c ruguo"ssh-keygen -H -f /home/gerrit/.ssh/known_hosts"
ssh-keyscan -p 10022 -t rsa 172.16.2.94 >> ~/.ssh/known_hosts
重新启动 Gerrit 服务
$ sudo /etc/init.d/gerrit restart
Gerrit 的复制功能配置完毕
在 gerrit 文档中有一个 ${name} 变量用来复制 Gerrit 的所有项目,这里并不需要。如果有多个项目需要复制,则在 replication.config 中添加多个 [remote ….] 字段即可。务必按照上面步骤配置复制功能。
Git页面设置
To get the Git Plugin to download your change; set Refspec to $GERRIT_REFSPEC and the Choosing strategy to Gerrit Trigger. You may also need to set 'Branches to build' to $GERRIT_BRANCH. 本系统中可用的是下面的配置 If this does not work for you set Refspec to refs/changes/*:refs/changes/* and 'Branches to build' to $GERRIT_REFSPEC Note: Be aware that $GERRIT_BRANCH and $GERRIT_REFSPEC are not set in the Ref Updated case. If you want to trigger a build, you can set Refspec and 'Branches to build' to $GERRIT_REFNAME.
这里 Choose a Server 选的是 Any Server 因为只有一个服务器 Check4Gerrit, 所以要确保这个服务器是 Enable 状态。可以去服务器那里去检查一下看看
$ su - user1
$ rm -rf test-project1/
$ git clone git@gitlab.zjc.com:dev-group/test-project1.git
$ cd test-project1/
$ touch testfile
$ git add .
$ git commit -m 'add by user1' $ git review
$ exit
我的环境还有一个问题 第一次 git review没有问题,但是如果用 git commit --amend修改了提交信息,再次 git reivew机会出现error: unpack failed: error Missing tree的错误,折中解决方案看这里
查看 test-project1 工程,可以看到新增加文件操作已经同步过来了
http://blog.csdn.net/stwstw0123/article/details/47615535