gitlab+jenkins服务简述:

Gitlab是一个利用ruby on rails开发的开源应用程序,实现一个自托管的git项目仓库,可通过web既然面进行访问公开的或者私人项目。

Gitlab拥有与github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。还提供一个代码段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

环境准备:

Gitlab:192.168.11.139

Jenkins:192.168.11.140

Jenkins上的操作:

  1. 登录到jenkins,安装插件

gitlab上传Jenkins自动构建 gitlab jenkins结合_linux

开始安装插件

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab上传Jenkins自动构建_02

 

直接在页面进行搜索就可以:

ssh    #执行远程脚本

Gitlab  #继承gitlab使用

Build Authorization Token Root #构建授权token

Gitlab hook  #钩子插件

如果找不到,可以去官网进行下载:Jenkins Plugins

gitlab上传Jenkins自动构建 gitlab jenkins结合_运维_03

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab上传Jenkins自动构建_04

gitlab上传Jenkins自动构建 gitlab jenkins结合_运维_05

  1. 配置jenkins和gitlab密钥对(特别重要)

在jenkins服务器上通过命令方式生成密钥对,这样jenkins和gitlab就通过密钥进行验证

[root@jenkins ~]# ssh-keygen  -t rsa  

一路回车 会生成/root/.ssh/目录,其中包含id_rsa,id_rsa.pub两个文件。其中带有.pub的表示公钥文件

[root@jenkins ~]# ll /root/.ssh/
total 12
-rw-------. 1 root root 2602 Jan 28 03:54 id_rsa
-rw-r--r--. 1 root root  572 Jan 28 03:54 id_rsa.pub

把私钥文件id_rsa文件的内容拷贝到jenkins上

[root@jenkins ~]# cat /root/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEApr07tNldb5Mj5fRX5JtWByAxE4ZOU693TjmoYCueTiSGj840DbGH
bMQ/ndg/OlU20ZspezdwA0GYXzCh4IRKKTzo6iTk2gmikHoKflNIAz6h5LZ+h16GNTQ6Qm
mRgIW+pWYYTqYS9xTMES7JTrOQNxIsDmMEc+Hv+TXqyba5X8+LZQTX/GszEmJRic76DC+K
Of6sC0IWAPmtCYPXlbUYx6Uh3Is8sm...

在浏览器中打开jenkins,进入到系统管理----凭据----系统-----全局凭据中添加凭证

gitlab上传Jenkins自动构建 gitlab jenkins结合_linux_06

 

gitlab上传Jenkins自动构建 gitlab jenkins结合_jenkins_07

 

把公钥文件id_rsa.pub复制到gitlab上面,查看公钥文件和上面查看私钥是一样的命令

[root@jenkins ~]# cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmvTu02V1vkyPl9Ffkm1YHIDEThk5Tr3dOOahgK55OJIaPzjQNsYdsxD+d2D86VTbRmyl7N3ADQZhfMKHghEopPOjqJOTaCaKQegp+U0gDPqHktn6HXoY1NDpCaZGAhb6lZhhOphL3FMwRLslOs5A3EiwOYwRz4e/5NerJtrlfz4tlBNf8azMSYlGJzvoML4o5/qwLQhYA+a0Jg9eVtRjHpSHcizyyYK2YGC3Nob9Gr7ap/zz1tC4DDq/vGi2AYu0/ug6wf78k8PD9oJWr9CDUTC09ThePFAx+brTFLu1wq33826UEklGgWihSc0+2/q0UGL8/vrwxWmMMdfs3lEsotx+KSjmuMyS8Ct1DgVhmFKH0UnFbnWAtIzPNVhGVme//QPMdP9U4CiIMgZI46fncZz0cX0SzdKrZWImuI33z4ReLNnuGB0sb1lAZ4vAh8U1h61n9lJQqsEm2N3Yx6zF/louo91eSyCXrlS1x3BOMFyKQ8NvVUkywyonQuwzWub8= liusiyanga@126.com

到gitlab上面,点击设置

gitlab上传Jenkins自动构建 gitlab jenkins结合_linux_08

找到左侧导航栏的ssh keys选项,填写相应的内容

gitlab上传Jenkins自动构建 gitlab jenkins结合_运维_09

  1. 创建一个项目gitlab和jenkins

首先在gitlab上准备好一个仓库,自己创建的也行,由本地push上去的也可以

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab_10

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab上传Jenkins自动构建_11

gitlab上传Jenkins自动构建 gitlab jenkins结合_运维_12

创建好之后,把对应的仓库的名字复制上,一会会用到(接下来跳到底色为黄色部分内容)

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab_13

此版本是的gitlab设置中的 webhook在url中填写jenkins的URL,token是在Jenkins时生成的。取消ssl加密


在构建触发器里


gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab上传Jenkins自动构建_14

创建好之后,点击下方的test----push event,会在界面上方显示“Hook executed successfully:HTTP 200”

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab_15

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab_16

登录到jenkins界面,查看该任务是否被远程触发

gitlab上传Jenkins自动构建 gitlab jenkins结合_linux_17

Jenkins出现构建说明webhook生效,并且构建是gitlab的管理员构建的。如果出现404、401等报错请看报错解决。(我在这里遇到不允许像本地网络发送webhook的请求,是因为gitlab在10.6版本之后为了安全出现的,可以通过设置--网络--外发请求进行更改)

gitlab上传Jenkins自动构建 gitlab jenkins结合_运维_18

接下来:在jenkins上操作

项目的名字最好和gitlab中项目名字一致,至于项目什么类型,这个看个人需求。

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab上传Jenkins自动构建_19

 

创建完成之后,找到源码管理,选择git,选择要关联的gitlab仓库以及对应的验证

gitlab上传Jenkins自动构建 gitlab jenkins结合_gitlab上传Jenkins自动构建_20

Git: 支持主流的github 和gitlab代码仓库。因我们的研发团队使用的是gitlab,所以下面我只会对该项进行介绍。

Repository URL:仓库地址

Credentials:凭证。可以使用HTTP方式的用户名密码,也可以是RSA文件。 但要通过后面的"ADD"按钮添加凭证。

Branches to build:构建的分支。*/master表示master分支,也可以设置为其他分支。

源码浏览器:你所使用的代码仓库管理工具,如github, gitlab.  

URL:填入上方的仓库地址即可

点击下面的高级选项,生成一个token,在gitlab中将会用到

gitlab上传Jenkins自动构建 gitlab jenkins结合_linux_21

在构建触发器的窗口中,选择适合你自己业务的条件,这里我选择的是当gitlab有提交时可以触发(返回到gitlab上)

gitlab上传Jenkins自动构建 gitlab jenkins结合_运维_22

还有一些其他选项根据意思自己去选择,配置好了之后,可任意重新启动(不重启也可以)。然后在linux中上传我呢见到gitlab,就可以自动构建jenkins项目了

[root@liu-node3 test-test]# git clone git@gitlab.example.com:root/test-test.git
Cloning into 'test-test'...
warning: You appear to have cloned an empty repository.
[root@liu-node3 test-test]# echo  "hello everyone" > ont
[root@liu-node3 test-test]# git  add  ont 
[root@liu-node3 test-test]# git  commit  -m "first"
[master (root-commit) a2626cc] first
 1 file changed, 1 insertion(+)
 create mode 100644 ont
[root@liu-node3 test-test]# git  push  origin master 
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 209 bytes | 209.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitlab.example.com:root/test-test.git
 * [new branch]      master -> master

测试

gitlab上传Jenkins自动构建 gitlab jenkins结合_linux_23

gitlab上传Jenkins自动构建 gitlab jenkins结合_jenkins_24