Linux企业运维篇——git+gitlab+jenkins+docker构成持续集成环境

一.GitLab与jenkins

Gitlab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,帮助开发团队更高效的集成和发布代码。

二.server1安装git,部署gitlab实现代码提交

 [root@server1 ~]# yum install -y git

在这里插入图片描述
下载好gitlab软件并安装

[root@server1 ~]# ls
gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm
[root@server1 ~]# yum install -y gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm 

在这里插入图片描述

[root@server1 ~]# cd /etc/gitlab/
[root@server1 gitlab]# ls
gitlab.rb
[root@server1 gitlab]# vim gitlab.rb 
13 external_url 'http://172.25.70.1'

在这里插入图片描述

[root@server1 gitlab]# gitlab-ctl reconfigure

在这里插入图片描述
浏览器访问http://172.25.70.1可以看见gitlab的登陆界面
在这里插入图片描述
填写新密码后重新登陆
在这里插入图片描述
在这里插入图片描述
创建一个新项目gitlabtest,勾选initialize repository with a README
在这里插入图片描述
第一次创建需要添加密钥,同时看见生成一个README文件
在这里插入图片描述
在这里插入图片描述

[root@server1 gitlab]# ssh-keygen

在这里插入图片描述
添加公钥到gitlab

[root@server1 gitlab]# cat /root/.ssh/id_rsa.pub 

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
进入到新建的项目中,复制上面的SSH地址
在这里插入图片描述

[root@server1 ~]# git clone [email protected]:root/gitlabtest.git #仓库克隆,查看可以发现git中已经有了新建的项目
Cloning into 'gitlabtest'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
[root@server1 ~]# cd gitlabtest/
[root@server1 gitlabtest]# ls
README.md
[root@server1 gitlabtest]# cat README.md 
# gitlabtest

新建文件text.txt测试git和gitlab是否可以上传成功

[root@server1 gitlabtest]# echo redhat > test.txt
[root@server1 gitlabtest]# git add test.txt 
[root@server1 gitlabtest]# git config --global user.email "[email protected]"
[root@server1 gitlabtest]# git config --global user.name "rong"
[root@server1 gitlabtest]# git commit -m "add test"
[master b8fe06f] add test
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 267 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
   44f4677..b8fe06f  master -> master
Branch master set up to track remote branch master from origin.

F5刷新页面可以看到新添加的文件test.txt,内容为redhat
在这里插入图片描述

在这里插入图片描述

二.server2部署jenkins

下载jdk和jenkins并安装

[root@server2 ~]# ls
jdk-8u171-linux-x64.rpm  jenkins-2.121.3-1.1.noarch.rpm
[root@server2 ~]# yum install -y jdk-8u171-linux-x64.rpm  jenkins-2.121.3-1.1.noarch.rpm
[root@server2 ~]# systemctl start jenkins
[root@server2 ~]# netstat -anltp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      1258/java     

虚拟机需要能够联网
访问 172.25.70.2:8080

在这里插入图片描述
将浏览器切换成中文的
在这里插入图片描述
点击choose,此时没有中文,点击选择一个语言添加
在这里插入图片描述
添加中文
在这里插入图片描述
点击add
在这里插入图片描述
点击ok后刷新jenkins界面
在这里插入图片描述

[root@server2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
84d3392dce0f42a1b31f212e8ba0e27a

在这里插入图片描述

在这里插入图片描述
安装官方推荐插件
在这里插入图片描述
选择使用admin账户继续
在这里插入图片描述
在这里插入图片描述
点击保存完成
在这里插入图片描述
点击开始使用
在这里插入图片描述
点击创建一个新任务hello,选择自由风格
在这里插入图片描述

在这里插入图片描述
点击配置,复制gitlab中的地址
在这里插入图片描述
在这里插入图片描述
没有添加密钥,所以需要添加,点击Add
在这里插入图片描述
选择Jenkins
在这里插入图片描述
类型选择SSH Username with private key,填写Username为root,Private key选择Enter directly
在这里插入图片描述

[root@server2 ~]# yum install -y git     ##一定要安装

回到server1复制私有密钥

[root@server1 gitlabtest]# cat /root/.ssh/id_rsa 
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAufuCA1w2IyF72wtuU79CACTUFAw3dZ9kLNlKcQ31Pv9htDSu
iZtcuiOphQmhvtB4YwLT8op8YTW7rbmjNHVV8X0cE28dqemEI2f1Q2rpaTuzOj3n
LUNMWzfTxkohMSdlMvx8YYQ5ILisojKeA9vmRYmKlibNLtzOIs5L6oar/FstlnnE
cA0fsWUAIAVBtYmUbKFloKiavmV+Z2U+CYxWzvjtc+1wEi4Fj4X2ce2Jp2vCDULZ
F2aIDoHZeUNMdRXvIWWzlddFdz7j+rYaw8JEiNHrAAd1WJBGczXm+T7FdBlkYOSI
zqR5ZfgzydjwwE+bAhNrXXis0QHKgWD9epSipwIDAQABAoIBAQCOEel0Ral5Vqe1
YVsLEGwLjhaPpfFrobG1bNun1yDD2fQ545B8v7iq3HkvjncHO1rrT4q2mUGARLq0
b72TYhqf2ZFr6xK+7Aorvcsmj/HzmE5GLGl/MwyOFexpadFHKi/tLeCZ4ZZ+P3Ro
hsAcdIvIDNRX9RYCOVwiTHLDmdKhd3uKKaWeDM/OmdyTLoNtZ8vIcKUJXvhYtSgL
TsO3TMxdQaTIWuFNBRR7qrSxcsQAc8y29LqXDYMbBiMCOSc5hKMdeEa9kf5yg7uK
xbZ3uzmFkOY8M2UIaB1LBhKY2J0FXY8VF9SjkoWSddDfcAMyaz8dvqQQqu/RrY5m
N8UZQU3ZAoGBAONgoME4o+PmEEWDFsIJMSlO/rgCwcXY0ly2N5Gl874qU5/NmNL2
U1KFdVKv/JJF/4zrwI8iIc3oTECa+Ti9IrZUNikXjxm3SF3l6d8Vq9LviRh8gOFo
eAnGkvvs1WlfAF2F8zrL7DX8bbBLme2LtVGavdEC5agV0PqzT5/guVDbAoGBANFk
5tXsD4RWkyeEJqCLKEIK3yNxfDxhqGE0iVQjklwEO7/DjRWgKRe97FTiopAfE0bd
r4Fatz6T0TUm8SPG3KcLTE8MiY2AzKYHNbLyRK8xUD+LZbjaiQCxDskUXLBhJ2Ij
ne33OpJEve8SJBoLp/pk5X6KIq5ugs6mg3u28MklAoGBANcvkJOsjfZVudp/WF9k
IaGNgCUXftlF/Lf/PxHZM5cqKaAYDGTC+FIlucX6hZbNJi/wwXj0fXeIO/n8cJZQ
8PQLOIKlKCnXOmaa+z3EHavwRBfnZHVu0AO4aUyAc+xYG1lnNqzTZwYkko6Azflw
+bV0M+YFzuDHXNKWNmoBXIB3AoGAdSMTFxzlWUztKS/+Q9VVAgz+4t77dvPSs/4l
zNHRcHRV0GLeq/haxJNUf/AArMsVh5FAOwa6d+FNKYTNZQw8J55kY9xJnsUstrxV
x/NLhQ37LHEYyJ5IAgEKmmYvq+PNmlL+aD7jnyuhbPojBAb9Q0/qKi2wVRAxUNVJ
vI2MiZkCgYEAwLBB/pwdaahvpqZyQ5E5UReZ9KP21JSaa4JzxdBbBcerEZlagRz0
4XmJOb9N0GYFq7wZQIkCWNcMSb+cPuZ1zKQpS49LOYjHxg5cVllXlcZF3+ZUSggJ
hxTt9b7PSsyvdVNLC9/59Z896ZMUFTxbd3eJOkmafl6ZJXK8S0zSf/0=
-----END RSA PRIVATE KEY-----

点击Add添加密钥
在这里插入图片描述

在这里插入图片描述

构建触发器,选择定时构建,写上定时策略* * * * *
在这里插入图片描述
构建–>增加构建步骤—>执行shell
在这里插入图片描述
在这里插入图片描述
写完之后保存
编辑index.html文件,选择push之后,每一分钟它会刷新,会在构建名称之后选择控制台输出

[root@server1 gitlabtest]# pwd
/root/gitlabtest
[root@server1 gitlabtest]# echo hello.org > index.html
[root@server1 gitlabtest]# git add index.html 
[root@server1 gitlabtest]# git commit -m "add index"
[master 44fa44d] add index
 1 file changed, 1 insertion(+)
 create mode 100644 index.html
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 307 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
   b8fe06f..44fa44d  master -> master
Branch master set up to track remote branch master from origin.

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三.关联gitlab和jenkins

jenkins下载插件
系统管理->管理插件
在这里插入图片描述
可选插件->找到Gitlab和Gitlab Hook直接下载
在这里插入图片描述
在这里插入图片描述
配置->构建触发器->选择Build when a change is pushed to GitLab. GitLab webhook URL: http://172.25.70.2:8080/project/hello (记住这个URL)->高级
在这里插入图片描述
点击Generate生成token
在这里插入图片描述
去掉轮询
在这里插入图片描述
配置gitlab
点击最上面一行的小起子->选择设置
在这里插入图片描述
在这里插入图片描述
Outbound requests :外发请求
在这里插入图片描述
进去自己的工程下:设置——>导入所有仓库
在这里插入图片描述
填写URL和Secret Token,Trigger全选,最后点击Add Webnook
在这里插入图片描述
测试,push events
在这里插入图片描述
可以在Jenkins上看到触发的事件和相应的控制台输出
在这里插入图片描述
在这里插入图片描述
自己修改文件上传也会有相应的触发

[root@server1 ~]# cd gitlabtest/
[root@server1 gitlabtest]# ls
index.html  README.md  test.txt
[root@server1 gitlabtest]# echo redhat > index.html
[root@server1 gitlabtest]# git add index.html 
[root@server1 gitlabtest]# git commit -m "add index"
1 file changed, 1 insertion(+), 1 deletion(-)
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 267 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
   44fa44d..342fef2  master -> master
Branch master set up to track remote branch master from origin.

在这里插入图片描述

在这里插入图片描述

三、安装docker

[root@server2 docker]# ls
compose
containerd.io-1.2.5-3.1.el7.x86_64.rpm
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
docker-ce-18.09.5-3.el7.x86_64.rpm
docker-ce-cli-18.09.5-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
[root@server2 docker]# rm -f docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm docker-ce-18.09.5-3.el7.x86_64.rpm containerd.io-1.2.5-3.1.el7.x86_64.rpm docker-ce-cli-18.09.5-3.el7.x86_64.rpm 
[root@server2 docker]# ls
compose
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
[root@server2 docker]# yum install -y *.rpm
[root@server2 docker]# systemctl start docker
[root@server2 ~]# ls
docker  jdk-8u171-linux-x64.rpm  jenkins-2.121.3-1.1.noarch.rpm  nginx.tar  registry2.tar
[root@server2 ~]# docker load -i registry2.tar
d9ff549177a9: Loading layer  4.671MB/4.671MB
f641ef7a37ad: Loading layer  1.587MB/1.587MB
d5974ddb5a45: Loading layer  20.08MB/20.08MB
5bbc5831d696: Loading layer  3.584kB/3.584kB
73d61bf022fd: Loading layer  2.048kB/2.048kB
Loaded image: registry:2
[root@server2 ~]# docker load -i nginx.tar 
014cf8bfcb2d: Loading layer  58.46MB/58.46MB
832a3ae4ac84: Loading layer  53.91MB/53.91MB
e89b70d28795: Loading layer  3.584kB/3.584kB
Loaded image: nginx:latest
[root@server2 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2
34b317046620db249ce9b33d66e8c482b7d37841e5faac3ec469a92625a7cba8
[root@server2 ~]# ll /var/run/docker.sock 
srw-rw---- 1 root docker 0 Jun 15 02:53 /var/run/docker.sock
[root@server2 ~]# chmod 777 /var/run/docker.sock 
[root@server2 ~]# su - jenkins
[root@server2 ~]# vim /etc/sudoers
93 jenkins ALL=(ALL)       NOPASSWD: ALL

在这里插入图片描述
在插件管理中安装三个docker插件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装好后点击hello中的配置——>构建,删除执行shell,重新添加构建(注意勾选do not build the image)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
新建一个任务docker,构建自由风格
在这里插入图片描述
构建触发器
在这里插入图片描述
构建环境
在这里插入图片描述
配置后保存

[root@server1 ~]# cd gitlabtest/
[root@server1 gitlabtest]# vim Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html

在这里插入图片描述

[root@server1 gitlabtest]# git add Dockerfile
[root@server1 gitlabtest]# git commit -m "add Dockerfile"
[master d25b041] add Dockerfile
 1 file changed, 2 insertions(+)
 create mode 100644 Dockerfile
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 359 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
   342fef2..d25b041  master -> master
Branch master set up to track remote branch master from origin.

在server2中查看镜像

[root@server2 ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
localhost:5000/nginx   latest              23dec48ca5fa        About a minute ago   10
registry               2                   f32a97de94e1        3 months ago        25.8MB
nginx                  latest              e548f1a579cf        15 months ago       109MB
[root@server1 gitlabtest]# vim index.html 
www.redhat.com
[root@server1 gitlabtest]# git add index.html 
[root@server1 gitlabtest]# git commit -m "v3"
[master 97f3be1] v3
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@server1 gitlabtest]# git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 254 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To [email protected]:root/gitlabtest.git
   d25b041..97f3be1  master -> master
Branch master set up to track remote branch master from origin.

在网页上查看172.25.70.2

猜你喜欢

转载自blog.csdn.net/weixin_44321116/article/details/90934164