设为首页 收藏本站
查看: 1510|回复: 0

[经验分享] Ubuntu之Gitlab、Gerrit、Jenkins协调工作配置

[复制链接]

尚未签到

发表于 2018-5-1 09:09:00 | 显示全部楼层 |阅读模式
前提

  •   创建邮箱 user1@vzjc.com
  •   创建邮箱 jenkins@vzjc.com
Gitlab配置
  Gitlab已经配置了root账户的邮箱为admin@vzjc.com
为Gitlab的root用户添加ssh密钥
系统上创建admin用户
  $ sudo adduser admin
  可以得到系统的用户名admin和用户自己设置的密码
系统上登录admin账户,生成SSH密钥
$ su - admin  
$ ssh-keygen -C admin@vzjc.com
  
$ cat .ssh/id_rsa.pub
  
$ exit1234
DSC0000.jpg

在Gitlab系统上更新SSH公钥

  •   用root账号登录http://gitlab.zjc.com
  •   点击页面右上角的Profile Settings - 点击左侧的SSH Keys小钥匙图标 - 点击Add SSH Key。在Key对应的输入框中输入上段落$cat .ssh/id_rsa.pub显示的公钥全文,点击Title,应该会自动填充为admin@vzjc.com
    DSC0001.jpg

      用了圈点Skitch,感觉萌萌哒
创建用户user1,作为一般用户
Gitlab上创建用户user1

  •   打开http://gitlab.zjc.com, 如果当前页面为登录状态就退出登录
  •   进入注册页面,输入注册信息,点击Sign up按钮来注册用户user1。
    DSC0002.jpg

  •   登录邮箱点击验证连接,在Gitlab上成功创建user1账号
Ubuntu系统上创建user1账号,生成SSH秘钥
$ sudo adduser user1  
$ su - user1
  
$ ssh-keygen -C user1@vzjc.com
  
$ cat .ssh/id_rsa.pub
  
$ exit12345
DSC0003.jpg

DSC0004.jpg

用user1登录Gitlab,更新SSH公钥
DSC0005.jpg

Gitlab创建组和项目,并配置user1身份
用root登录Gitlab,创建新Group为dev-group
DSC0006.jpg

DSC0007.jpg

在dev-group中创建新项目test-project1
DSC0008.jpg

DSC0009.jpg

  点击 test-project1 工程界面左上的 dev-group
DSC00010.jpg

  点击 Members
DSC00011.jpg

  把 user1 作为 Reporter 身份添加到组 dev-group (Reporter可以下载代码但是没上传权限)
DSC00012.jpg

用user1登录Gitlab,查看新项目test-project1的git地址
  地址为git@gitlab.zjc.com:dev-group/test-project1.git
DSC00013.jpg

DSC00014.jpg

系统上登录user1,克隆工程,测试权限
$ su - user1  
$ cd ~
  
$ git clone git@gitlab.zjc.com:dev-group/test-project1.git
  
$ exit1234
DSC00015.jpg

$ 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
  
$ exit123456789
DSC00016.jpg

DSC00017.jpg

DSC00018.jpg

Gerrit配置
  已经有了第一个账户admin并配置信箱为admin@vzjc.com
系统上登录admin,并获取上步创建的公钥
$ su - admin  
$ cat ~/.ssh/id_rsa.pub
  
$ exit123
DSC00019.jpg

用admin账户登录gerrit,更新SSH公钥
DSC00020.jpg

DSC00021.jpg

为Gerrit系统创建用户user1并配置

  •   使用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系统已经创建了管理员账户jenkins并安装了Gerrit Trigger插件
配置jenkins用户

  •   为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
    DSC00022.jpg



  •   1
  •   2
用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这个值

  •   1
  •   2
  •   3


  •   此处有个问题,如果在安装Jenkins系统前没有创建jenkins用户(安装时候系统会自动创建)并且使用的Dovecot来接收邮件并且用默认配置。那么要先查一下是否系统用户jenkins的uid是否大于500,如果不是,需要修改配置文件
用jenkins登录Gerrit,更新SSH公钥为系统用户jenkins的公钥Jenkins系统的SMTP设置 (根据具体情况配置)
  主页面->Manage Jenkins->Configure System

  •   Jenkins Location ->System Admin e-mail address : jenkins@vzjc.com
  •   E-mail Notification

    •   勾选Test configuration by sending test e-mail,然后在出现的框中填admin@vzjc.com,测试如果出错(好吧,如果用vzjc.com的邮件服务器是肯定会出错)Unrecognized SSL message, plaintext connection,则参考这个设置
    •   SMTP server : mail.vzjc.com
    •   Default user e-mail suffix : @vzjc.com
    •   勾选Use SMTP Authentication
    •   User Name : jenkins@vzjc.com
    •   Password : 输入您设置的密码
    •   勾选Use SSL
    •   SMTP Port : 587
    •   Reply-To Address : jenkins@vzjc.com
    •   Charset : UTF-8
      DSC00023.jpg

      DSC00024.jpg


设置Gerrit Trigger
  主页面->Manage Jenkins->Gerrit Trigger->Add New Server

  •   Add New Server : Check4Gerrit
  •   勾选 Gerrit Server With Default Configurations
DSC00025.jpg


  •   Hostname : review.zjc.com
  •   Frontend URL : http://review.zjc.com
  •   Username : jenkins
  •   E-mail : jenkins@vzjc.com
DSC00026.jpg

  如果点击Test Connection后出现如图所示的错误User jenkins has no capability to connect to Gerrit event stream.,这是因为因Jenkins 没有权限监听 Gerrit 的 ‘Stream Events’,可如此配置
  点击Test Connection,出现的字符串为 success 则代表配置成功
  点击下方的保存按钮来保存设置
Gerrit 和 Jenkins 整合
让 Gerrit 支持 Jenkins
  如果安装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.config1234567
  在文件末添加
[label "Verified"]    function = MaxWithBlock    value = -1 Fails    value =  0 No score    value = +1 Verified12345$ git commit -a -m 'Updated permissions'$ git push origin HEAD:refs/meta/config12
DSC00027.jpg

DSC00028.jpg

用admin登录Gerrit
  现在提交的 Review 请求只有 Code Rivew 审核,我们要求的是需要 Jenkins 的 Verified 和 Code Review 双重保障,在 Projects 的 Access 栏里,针对 Reference: refs/heads/ 项添加 Verified 功能

  •   Projects -> List -> All-Projects
  •   Projects -> Access -> Edit -> 找到 Reference: refs/heads/* 项 -> Add Permission -> Label Verified-> Group Name 里输入 Non-Interactive Users -> 回车 或者 点击Add 按钮 -> 在最下面点击 Save Changes 保存更改
Gitlab上设置test-project1工程
  前面我们在Gitlab上搭建了一个 test-project1 的工程,普通用户是没有办法去 push 的,只能使用 git review 命令提交. 而 git review 命令需要 .gitreview 文件存在于项目目录里。
用 admin用户添加.gitreview 文件
$ su - admin  
$ git clone git@gitlab.zjc.com:dev-group/test-project1.git
  
$ cd test-project1
  
$ vim .gitreview1234
  文件内容为:
[gerrit]host=review.zjc.comport=29418project=test-project1.git1234
DSC00029.jpg

添加.gitreview到版本库
$ 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
  
$ exit123456
DSC00030.jpg

用 admin用户添加.testr.conf 文件
Python 代码我使用了 testr,需要先安装 testr 命令
$ sudo apt-get install python-pip  
$ sudo pip install testrepository12
在 test-project1 这个项目中添加 .testr.conf 文件
$ su - admin  
$ cd test-project1
  
$ vim .testr.conf123
  文件内容为:
[DEFAULT]  
test_command=OS_STDOUT_CAPTURE=1 OS_STDERR_CAPTURE=1 OS_TEST_TIMEOUT=60 ${PYTHON:-python} -m subunit.run discover -t ./ ./ $LISTOPT $IDOPTIONtest_id_option=--load-list $IDFILEtest_list_option=—list1234
提交到版本库中
$ git add .testr.conf  
$ git commit .testr.conf -m 'add .testr.conf file by admin'$ git push origin master
  
$ exit1234
DSC00031.jpg

Gerrit上设置 test-project1工程
在 Gerrit 上创建 test-project1 项目
  要知道 review 是在 gerrit 上,而 gerrit 上现在是没有项目的,想让 gitlab 上的项目能在 gerrit 上 review 的话,必须在 gerrit 上创建相同的项目,并有相同的仓库文件.
用 admin 用户在 Gerrit 上创建 test-project1 项目
$ su - admin  
$ ssh -p 29418 admin@vzjc.com gerrit create-project test-project1
  
$ exit123
DSC00032.jpg

clone –bare Gitlab 上的仓库到 Gerrit
  因为gerrit用户无访问gitlab的权限。所以要先看是否gerrit用户下已经存在了id_rsa密钥,如果没有则创建,然后把公钥加入到gitlab的admin账户上(这里加到 admin 账户上,是因为后面Gerrit系统还会有个复制 git 库到 Gitlab的功能,需要管理员权限)
赋予gerrit用户访问 test-project1 的权限
$ 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.pub123

  • DSC00033.jpg

  •   用 root 登录Gitlab,把公钥添加到 admin 的SSH Key上 - 额,这是因为,Gerrit使用gerrit用户身份运行的,而Gerrit得git库复制功能需要权限复制到Gitlab上
以 gerrit身份克隆 test-project1
$ 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.git123
DSC00034.jpg

同步 Gerrit 的 test-project1 项目到 Gitlab 上的 test-project1 项目目录中
  当用户 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.config1  文件内容为:
[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 = 312345678
设置gerrit用户的 ~/.ssh/config
$ sudo -u gerrit -H vim /home/gerrit/.ssh/config1  文件内容为:
Host gitlab.zjc.com:  
    IdentityFile ~/.ssh/id_rsa
  
    PreferredAuthentications publickey123
在gerrit用户的~/.ssh/known_hosts 中,给 gitlab.zjc.com 添加 rsa 密钥
$ sudo -u gerrit -H sh -c "ssh-keyscan -t rsa gitlab.zjc.com >> /home/gerrit/.ssh/known_hosts"$ sudo -u gerrit -H sh -c "ssh-keygen -H -f /home/gerrit/.ssh/known_hosts"12重新启动 Gerrit 服务
$ sudo /etc/init.d/gerrit restart1Gerrit 的复制功能配置完毕
  在 gerrit 文档中有一个 ${name} 变量用来复制 Gerrit 的所有项目,这里并不需要。如果有多个项目需要复制,则在 replication.config 中添加多个 [remote ….] 字段即可。务必按照上面步骤配置复制功能。
在 Jenkins 上对 test-project1 项目创建构建任务
Jenkins上安装git插件
安装 Git Plugin

  •   用 jenkins 登录 http://jenkins.zjc.com
  •   Manage Jenkins -> Manage Plugins -> Avalabile -> 安装 Git Plugin
Jenkins上创建项目
添加 test-project1工程

  •   用 jenkins 登录 Jenkins http://jenkins.zjc.com
  •   New Item页面设置

    •   Item name : test-project1
    •   Freestyle project
      DSC00035.jpg


  •   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.


    •   Source Code Management : Git
    •   Respostories : http://review.zjc.com:8082/p/test-project1.git
    •   Branches to build : origin/$GERRIT_BRANCH
    •   Build Triggers : Gerrit event
    • DSC00036.jpg

    •   按下文来配置,上面的无效 - 来自 这里

  •   这里 Choose a Server 选的是 Any Server 因为只有一个服务器 Check4Gerrit, 所以要确保这个服务器是Enable 状态。可以去服务器那里去检查一下看看
  • DSC00037.jpg



  •   Gerrit Event页面设置

    •   Pattern : test-project1
    •   Branches : master
    •   Trigger on : 点击 Add 分别添加 Patchset CreatedDraft Published
    •   Dynamic Trigger Configuration
    • DSC00038.jpg


  •   Build页面设置

    •   Add build step -> Execute shell
        cd $WORKSPACE
        [ ! -e .testrepository ] && testr init
        testr run
    • DSC00039.jpg


测试
系统上 用 user1 提交一个更改

  •   用 user1 登录
  •   删除目录 test-project1
  •   克隆 test-project1 工程
  •   进入 test-project1 目录
  •   添加文件、提交
  •   git review 增加 review 到Gerrit
$ 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
  
$ exit123456789
  我的环境还有一个问题 第一次 git review没有问题,但是如果用 git commit --amend修改了提交信息,再次git reivew机会出现error: unpack failed: error Missing tree的错误,折中解决方案看这里
DSC00040.jpg

DSC00041.jpg

DSC00042.jpg

DSC00043.jpg

DSC00044.jpg

admin 登录 Gerrit 系统,通过验证,提交
DSC00045.jpg

DSC00046.jpg

DSC00047.jpg

登录 Gitlab
  查看 test-project1 工程,可以看到新增加文件操作已经同步过来了
DSC00048.jpg

参考
  http://longgeek.com/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-454277-1-1.html 上篇帖子: Ubuntu之Gitlab、Gerrit、Jenkins协调工作配置之部分 下篇帖子: U盘安装Ubuntu14.04 server版 提示无法挂载cd
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表