GitLab与JenKins结合构建持续集成-CI环境

GitLab 和 JenKins 的概述

软件名称作用
GitLab一款管理代码的仓库服务器
JenKins一款自动化部署工具

CI持续集成:客户端通过修改代码提交至GitLab服务器,GitLab触发JenKins触发器,然后通过JenKins来执行一些自动化的操作(如:测试、发布、部署)

搭建过程如下

GitLab环境搭建

GitLab软件包下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlabce/yum/el7/
GitLab汉化包下载地址:https://gitlab.com/xhang/gitlab/

本次环境所用的GitLab软件包的版本如下

GitLab软件包:gitlab-ce-11.4.3-ce.0.el7.x86_64.rpm
GitLab汉化包:gitlab-1ac5ecb424339d606b0bcbc79c8d7d346f5dc6ad.tar.gz 

搭建过程如下
提前上传好相应的软件包到服务器上

[root@gitlab ~]# yum install curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python -y      //安装相关依赖
开启相关服务以及关闭防火墙以及selinux
[root@gitlab ~]# systemctl start sshd
[root@gitlab ~]# systemctl enable sshd
[root@gitlab ~]# systemctl start postfix
[root@gitlab ~]# systemctl enable postfix
[root@gitlab ~]# systemctl stop firewalld
[root@gitlab ~]# systemctl disable firewalld
[root@gitlab ~]# iptables -F 
[root@gitlab ~]# vim /etc/selinux/config 
SELINUX=disabled
[root@gitlab ~]# setenforce 0
[root@gitlab ~]# rpm -ivh gitlab-ce-11.4.3-ce.0.el7.x86_64.rpm     //安装gitlad rpm包
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb    //编辑这个文件
  13 external_url 'http://192.168.1.100'   //修改为本地的IP地址
[root@gitlab ~]# gitlab-ctl reconfigure   //重新配置Gitlab服务

汉化操作:汉化包在家目录下
[root@gitlab ~]# gitlab-ctl stop    //在汉化之前先关闭gitlad服务
[root@gitlab ~]# tar -xf gitlab-1ac5ecb424339d606b0bcbc79c8d7d346f5dc6ad.tar.gz   //解压这个文件
[root@gitlab ~]# vim .bashrc  //编辑这个环境变量配置文件
# alias cp='cp -i'   //注释掉这个,不然等下操作会有误
[root@gitlab ~]# source .bashrc    //生效配置文件
[root@gitlab ~]# mv gitlab-1ac5ecb424339d606b0bcbc79c8d7d346f5dc6ad gitlab  //重命名
[root@gitlab ~]# cd gitlab/    //进入这个目录
[root@gitlab gitlab]# cp -rf * /opt/gitlab/embedded/service/gitlab-rails/    //将当前目录的所有文件复制到指定的目录中即可
cp: 无法以目录"log" 来覆盖非目录"/opt/gitlab/embedded/service/gitlab-rails/log"
cp: 无法以目录"tmp" 来覆盖非目录"/opt/gitlab/embedded/service/gitlab-rails/tmp"
出现如下两条记录,不管
[root@gitlab ~]# gitlab-ctl start   //再次启动即可

浏览器输入本地IP地址访问测试
初次登录需要设置密码,密码需满足对应的复杂程度
在这里插入图片描述
密码修改完成以后,使用root账户来进行登录即可
在这里插入图片描述
登录之后的界面如下
默认状态下有一些部分是没有汉化的
在这里插入图片描述
全部汉化操作
在这里插入图片描述

GitLab群组、项目、用户的创建

关闭Gitlab注册功能
在这里插入图片描述
创建群组
在这里插入图片描述
点击新建群组按钮
设置好对应参数后点击创建群组
在这里插入图片描述
创建好了之后的是这个样子的
在这里插入图片描述
创建项目
在这里插入图片描述
点击新建项目按钮
在这里插入图片描述
创建完成以后的样子是这个样的
在这里插入图片描述
创建用户
在这里插入图片描述
点击新建用户按钮
设置好以下参数即可
在这里插入图片描述
在这里插入图片描述
创建好了以后是如下的样子
在这里插入图片描述
然后为这个用户设置密码
点击编辑
在这里插入图片描述
定位到如下的界面为其设置密码即可
在这里插入图片描述
登录测试
注销当前administrator用户
在这里插入图片描述
初次登录会要求修改密码
在这里插入图片描述

GitLab客户端Git工具的使用方法

为我们创建的项目添加一个文件
在这里插入图片描述
点击新建文件
编写一个HTML页面
在这里插入图片描述
复制如下的链接地址
在这里插入图片描述
准备一台新的Cetnos 7 操作系统

客户端安装Git工具
[root@localhost ~]# yum install -y git 
[root@localhost ~]# git clone http://192.168.1.100/web/my-web-test.git   //使用这个命令从gitlad服务器上复制到本地
正克隆到 'my-web-test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
[root@localhost ~]# cd my-web-test/
[root@localhost my-web-test]# cat index.html 
<html>
<body>
this is my-web-test
</body>

以上的为HTTP方式下载,还有一种是ssh下载,如下
[root@localhost ~]# git clone git@192.168.1.100:web/my-web-test.git    //需要输入密码来进行认证
因为我们还没有配置ssh秘钥,所以暂时还不能够使用这一种方法来拉取

GitLab运行环境的配置

这个环境有且只需配置一次即可,配置对于从gitlad上下载和上传对应的文件都需要的
操作在客户端上进行

添加如下两条信息,在Git提交文件到服务器上都会用到如下信息
--global 代表全局,意思是要上传文件到git服务器都会引用以下信息
[root@localhost ~]# git config --global user.name 'test-user'
[root@localhost ~]# git config --global user.email '123@qq.com'
[root@localhost ~]# cat .gitconfig    //以上添加的信息会和这个文件实现同步
[user]
        name = test-user
        email = 123@qq.com
[root@localhost ~]# git config --global --list    //列出全局配置的用户信息
user.name=test-user
user.email=123@qq.com


如果想针对不同项目,采用不同的用户以及邮箱,那么就需要进行如下操作
(我们下载的项目就为一个工作区,任何修改操作都需要在工作区内进行)
[root@localhost ~]# git clone http://192.168.1.100/web/my-web-test.git    //从指定服务器上拉取一个项目下来
[root@localhost ~]# cd my-web-test/     //进入项目 即工作区
[root@localhost my-web-test]# git config user.name 'web-test'    //指定用户
[root@localhost my-web-test]# git config user.email '456@qq.com'    //指定邮箱
[root@localhost my-web-test]# cat .git/config   //以上编辑的信息会和这个文件实现同步
......
[user]
        name = web-test
        email = 456@qq.com

Git常用的一些命令

通过实例来介绍命令的用法
更新项目中index.html文件中的内容

[root@localhost ~]# cd my-web-test/     //进入我们下载好的项目
[root@localhost my-web-test]# echo "this is test" >> index.html     //向页面中写入内容
[root@localhost my-web-test]# git add index.html   //将修改后的文件上传至暂存区
注:在工作区修改的文件需要先上传至暂存区,然后在通过git push 来进行上传
[root@localhost my-web-test]# git commit -m 'add this is test'     //提交工作区的信息   
-m  表示 指定提交的信息  可以随意写 相当于备注
[master 343cd66] add this is test
 1 file changed, 1 insertion(+)
[root@localhost my-web-test]# git config --global push.default simple    //在提交之前我们先执行这个,不然会有很多提示信息
[root@localhost my-web-test]# git push   //将文件提交至gitlad服务器

分支master设置为追踪来自orgin的远程分支master
在做这之前,需要先将创建的用户加入到群组当中去才可

将我们在gitlad里面创建的用户来作为验证
[root@localhost my-web-test]# git push -u origin   //执行这个命令即可
Username for 'http://192.168.1.100': webadmin
Password for 'http://webadmin@192.168.1.100': 
分支 master 设置为跟踪来自 origin 的远程分支 master。
Everything up-to-date

其他命令

[root@localhost my-web-test]# git checkout   //放弃了我们所修改的文件
当执行了以上命令以后,我们就可以执行以下命令来进行还原
[root@localhost my-web-test]# git reset --hard HEAD
HEAD 现在位于 343cd66 add this is test

如果想要退回到指定的状态,进行如下操作
[root@localhost my-web-test]# git reflog    //查看每次提交的ID  查看对应的ID我们就可以使用git reset --hard ID 来进行还原了
343cd66 HEAD@{0}: commit: add this is test
61dc38d HEAD@{1}: clone: from http://192.168.1.100/web/my-web-test.git
[root@localhost my-web-test]# git reset --hard 61dc38d   //退回到指定的状态
HEAD 现在位于 61dc38d add bbs

Git 分支的创建

[root@localhost ~]# cd my-web-test/     //进入工作区中
[root@localhost my-web-test]# git branch abc   //创建分支
[root@localhost my-web-test]# git checkout abc   //切换到指定的分支
切换到分支 'abc'
[root@localhost my-web-test]# git branch     //查看当前处于的分支
* abc
  master
 在分区编辑一个文件并上传至gitlad服务器,编辑的文件只会存在对应的分区当中
[root@localhost my-web-test]# vi t1.txt
[root@localhost my-web-test]# vi t1.txt
[root@localhost my-web-test]# git add t1.txt
[root@localhost my-web-test]# git commit -m 'add t1.txt'
[root@localhost my-web-test]# git push --set-upstream origin abc     //上传就需要指向这个,后面跟的是分支的名称  然后输入指定的用户名以及密码
这里和我们在配置 分支 master 设置为跟踪来自 origin 的远程分支 master有关

分支配置完成以后我们可以去浏览器查看以下是否有我们创建的分支
在这里插入图片描述

JenKins 环境搭建

Jenkins软件包下载地址:
https://fallback.get.jenkins.io/redhat-stable/

下载完成以后我们上传至Linux服务器当中,最好下载比较新的版本,不然有一些插件安装会出现错误,
在安装Jenkins之前,我们先安装jdk,因为Jenkins是用Java来编写的

安装jdk我们采用本地光盘来进行安装
[root@gitlab ~]# mount /dev/cdrom /mnt/    //挂载本地镜像
[root@gitlab ~]# cd /etc/yum.repos.d/    //进入yum目录
[root@gitlab yum.repos.d]# mkdir back    //创建一个目录
[root@gitlab yum.repos.d]# mv CentOS-* back/     //将当前目录所有以centos开头的文件都移动进去
[root@gitlab yum.repos.d]# vim Java.repo    //编辑一个本地仓库   输入以下内容
[Java]
name=Java-bendi
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@gitlab yum.repos.d]# yum makecache         //更新缓存
[root@gitlab yum.repos.d]# yum install -y java    //安装Java即可
[root@gitlab ~]# java -version          //查看版本号 
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

jdk环境安装完成以后,我们在来安装Jenkins

[root@gitlab /]# rpm -ivh jenkins-2.263-1.1.noarch.rpm   安装Jenkins
[root@gitlab /]# vim /etc/sysconfig/jenkins       //编辑配置文件
 29 JENKINS_USER="root"      //用户修改为root
 56 JENKINS_PORT="8081"     //修改端口号
[root@gitlab /]# /etc/init.d/jenkins start    //启动操作
Starting jenkins (via systemctl):                          [  确定  ]
[root@gitlab /]# ss -tan |grep 8081            //查看端口是否运行
LISTEN     0      50        [::]:8081                  [::]:*    
[root@gitlab /]# chkconfig jenkins on     //设置为开机自动启动

浏览器登录访问
输入 IP地址+8081即可访问
在这里插入图片描述
这里需要管理密码,获取方法如下:

[root@gitlab /]# cat /var/lib/jenkins/secrets/initialAdminPassword
2024ddf146354aa9b584605252867321    //复制这个代码到指定的文本框中即可

然后点击继续,之后我们选择安装推荐插件
在这里插入图片描述
然后等待安装即可
在这里插入图片描述
插件安装完成以后,我们创建一个管理员用户如下:
在这里插入图片描述
登录成功以后的界面是这样的
在这里插入图片描述

GitLab 和 JenKins 结合

两者结合需要安装一些插件,安装插件的方法如下
在这里插入图片描述
点击插件管理,搜索对应的插件来安装即可
在这里插入图片描述
需要安装的插件列表如下:

Credentials Plugin(默认已经安装)   #签名证书管理插件 
Gitlab Plugin    #安装后从gitlab获取代码 
Git Plugin  Git Client Plugin (默认已经安装)   #用于jenkins在gitlab中拉取源码   
GitLab Hook     #gitlab触发jenkins构建项目 #hook [hʊk] 钩子  plugin [&apos;plʌgɪn] 插件 
gitlab Authentication     # gitlab和jenkins认证相关的插件 
SSH Plugin     #进程执行shell脚本
Publish Over SSH     #用亍通过ssh部署应用

插件安装完成以后,重启一下Jenkins服务即可
[root@gitlab /]# /etc/init.d/jenkins restart 

部署公钥和私钥(公钥在GitLab上部署,私钥在Jenkins上部署)

生成ssh秘钥
[root@gitlab ~]# ssh-keygen 
[root@gitlab ~]# cd .ssh/          //进入这个目录
[root@gitlab .ssh]# ls
id_rsa(私钥文件)  id_rsa.pub(公钥文件)

GitLab上部署公钥
提前复制好id_rsa.pub上的内容
在这里插入图片描述
点击部署秘钥
在这里插入图片描述
点击新建部署秘钥
在这里插入图片描述
Jenkins部署私钥
提前复制好id.rsa上的内容
在这里插入图片描述
然后进入如下界面
在这里插入图片描述
点击全局
在这里插入图片描述
点击添加凭据
在这里插入图片描述
因为Gitlab添加了ssh秘钥,我们现在就可以通过ssh的方式去下载gitlad上存在的项目了
现在gitlad上选择下载方式为ssh
在这里插入图片描述
然后去Linux系统上进行如下操作

[root@gitlab ~]# git clone git@192.168.1.100:web/my-web-test.git
正克隆到 'my-web-test'...
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:iEIf0uTpzeUTQ6nixxj8Be46uUZqv7X5BiMk+be4A9E.
ECDSA key fingerprint is MD5:c0:34:59:a3:58:34:d4:ac:67:5c:bc:6d:ed:aa:6f:c0.
Are you sure you want to continue connecting (yes/no)? yes    //只需要输入yes即可
Warning: Permanently added '192.168.1.100' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 15 (delta 1), reused 0 (delta 0)
接收对象中: 100% (15/15), done.
处理 delta 中: 100% (1/1), done.

注:因为我们是在gitlad本身的服务器上测试的,如果要想在其他Linux系统上测试,还需要使用ssh-kengen 生成秘钥,然后在去gitlad添加部署改系统的秘钥才可

GitLab 结合 Jenkins 案例

案例一

通过Jenkins自动将Gitlab项目里面的代码自动发布到web页面上
准备一台Apache服务器:IP地址为:192.168.1.10

[root@gitlab ~]# ssh-copy-id 192.168.1.10   //拷贝秘钥到Apache服务器上实现无密码登录
[root@gitlab ~]# ssh 192.168.1.10     //登录测试
[root@gitlab ~]# visudo     //编辑这个文件,因为通过Jenkins发布需要Jenkins用户的一些权限
jenkins      ALL=(ALL)     NOPASSWD:/usr/bin/ssh
Last login: Sat Oct 31 13:47:12 2020 from 192.168.1.1
[root@gitlab ~]# vim deploy.sh     //编辑一个脚本文件  自动发布的脚本文件
#!/bin/bash
echo $USER     //表示当前用户
cd /root/my-web-test (项目名称)   //进入从Git上下载的目录
git pull    //从服务器上更新项目信息 必须在工作区内操作
scp -r ./* root@192.168.1.100:/var/www/html/   //将当前文件复制到Apache的发布目录下

注意:需要当前服务器下存在项目才可,不会出现问题
[root@gitlab ~]# ./deploy.sh         //执行测试
root
Already up-to-date.
index.html                                                              100%   66     5.8KB/s   00:00

Apache服务器上查看
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
index.html

通过Jenkins调用脚本代码来自动部署
我们先创建一个项目(这个项目会和Gitlab里面的项目有一个绑定)
在这里插入图片描述
键入相关信息
在这里插入图片描述
点击源码管理
设置Gitlab项目仓库的地址
在这里插入图片描述
然后我们点击构建
添加脚本执行的路径需要无秘钥即可登录到指定的服务器才可

[root@gitlab ~]# ssh-copy-id 192.168.1.100
[root@gitlab ~]# ssh 192.168.1.100
Last login: Sat Oct 31 12:58:02 2020 from 192.168.1.1

在这里插入图片描述
以上配置好了以后,我们点击应用即可
验证测试
在这里插入图片描述
客户端浏览器访问测试
在这里插入图片描述

案例二

通过修改gitlad项目里面的内容,在Jenkins配置触发器,自动更新到其他Apache服务器上
需要安装如下的插件才可
Gitlab Hook Plugin 默认已经安装
Build Authorization Token Root
Build Token Trigger

配置身份认证令牌

[root@gitlab ~]# openssl rand -hex 12
4d821a514939255e226521fc

复制生成的秘钥
在Jenkins上点击我们项目进行配置
在这里插入图片描述
然后进入Gitlab页面进行如下操作
在这里插入图片描述
点击集成
http://Jenkins服务器的IP地址以及端口号/buildByToken/build?job=gitlad项目名称&token=生成的秘钥
在这里插入图片描述
添加完成以后是这样的
在这里插入图片描述
验证测试:通过修改项目里面的代码看看能不能够更新到web服务器

[root@localhost ~]# cd my-web-test/
[root@localhost my-web-test]# echo "this is ceshi" > index.html  
[root@localhost my-web-test]# git add index.html
[root@localhost my-web-test]# git commit -m 'add index.html'
[master b2d4819] add index.html
 1 file changed, 1 insertion(+), 13 deletions(-)
[root@localhost my-web-test]# git push

浏览器访问测试
在这里插入图片描述
至此,整个环境就搭建完成了

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ball-4444

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值