0


使用 GitLab + Jenkins 实现持续集成(CI)环境

使用 GitLab + Jenkins 实现持续集成(CI)环境

一、持续集成简介

持续集成:

Continuous Integration
  • 简单来说就是指,程序员在开发代码的过程中,可以频繁的将代码部署到主干上,并进行自动化测试。

持续交付:

Continuous Delivery
  • 简单来说就是指在持续集成的基础上,将代码部署到预生产环境。

持续部署:

Continuous Deoloyment
  • 简单来说就是指在持续交付的基础上,将要部署的代码实现自动部署,包括持续交互,持续部署。

1.GitLab 简介

GitLab 是一个用于仓库管理系统的开源项目。使用 Git 作为代码管理工具,可以通过 Web 界面来管理 Git 仓库。

2.Jenkins 简介

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

作用:

  • 保证团队开发人员提交代码的质量,还能够减轻软件发布时的压力;
  • 持续集成中的任何一个环节都是自动完成的,无需太多人工干预,有利于减少重复过程以节省时间、费用和工作量。

Jenkins 特点:

  • 开源免费;
  • 跨平台,支持所有的平台。
  • Master/Slave 支持分布式的 build(构建)

3.GitLab 和 GitHub 的区别

相同点:

  • 二者都是基于 Web 的 Git 仓库,在很大程度上 GitLab 是仿照 GitHub 来做的,它们都提供了分享开源项目的平台。

不同点:

  1. GitHub 如果要使用私有仓库,超过 4 个是需要付费的。GitLab 可以在上面创建私人的免费仓库。
  2. GitLab 让开发团队对他们的代码仓库拥有更多的控制。

4.持续集成系统的工作流程

  1. 开发者将新版本代码 push 到 GitLab 远程仓库上;
  2. 随后 GitLab 会触发 Jenkins 来进行拉取到本地(通过 Web Hook 或定时检测)
  3. 最后 Jenkins 会根据事先配置好的脚本进行 Build。

二、使用 GitLab + Jenkins 实现持续集成(CI)环境

准备工作
主机名操作系统硬件IP 地址GitLabCentOS 7.44 G(联网状态)192.168.1.1JenkinsCentOS 7.44 G(联网状态)192.168.1.2ApacheCentOS 7.42 G192.168.1.3

1.安装 Gitlab

安装 Gitlab 所需组件

[root@GitLab ~]#yuminstall-ycurlpolicycoreutilsopenssh-serveropenssh-clientspostfixpolicycoreutils-python

开启 Postfix 邮件服务

[root@GitLab ~]#systemctlstartpostfix[root@GitLab ~]#systemctlenablepostfix

安装 Gitlab

[root@GitLab ~]#wgethttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm[root@GitLab ~]#lsanaconda-ks.cfggitlab-ce-12.0.2-ce.0.el7.x86_64.rpm[root@GitLab ~]#yum-ylocalinstallgitlab-ce-12.0.2-ce.0.el7.x86_64.rpm

配置 Gitlab 访问地址

[root@GitLab ~]#sed-i"/^external_url/cexternal_url 'http://192.168.1.1'"/etc/gitlab/gitlab.rb
  • 注意:你们也可以将 IP 地址替换为域名。

重置 Gitlab(时间较长)

[root@GitLab ~]#gitlab-ctlreconfigure[root@GitLab ~]#netstat-anpt|grepnginx

在这里插入图片描述

1)登录 Gitlab

访问:

http://192.168.1.1

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

  • 注意:在 GitLab 中配置的中文并不是全部都是中文,你们可以安装中文插件,我这边使用的是谷歌浏览器转换。

2)配置邮件报警

[root@GitLab ~]#vim/etc/gitlab/gitlab.rb#在第57行后添加以下内容gitlab_rails['smtp_enable']=truegitlab_rails['smtp_address']='smtp.qq.com'#SMTP服务器gitlab_rails['smtp_port']=465#SMTP服务器端口号gitlab_rails['smtp_user_name']='[email protected]'#邮件账号gitlab_rails['smtp_password']=''#邮件授权码gitlab_rails['smtp_authentication']='login'gitlab_rails['smtp_enable_starttls_auto']=truegitlab_rails['smtp_tls']=truegitlab_rails['gitlab_email_from']='[email protected]'

重置 Gitlab

[root@GitLab ~]#gitlab-ctlreconfigure

登录控制台发送测试邮件

[root@GitLab ~]#gitlab-railsconsoleirb(main):001:0>Notify.test_email('[email protected]','Test','Hello ZhangSan').deliver_now

在这里插入图片描述
查看
在这里插入图片描述
修改 GitLab 中 root 用户的密码
在这里插入图片描述

3)创建群组

点击创建群组
在这里插入图片描述
填写群组信息
在这里插入图片描述
创建一个账号
在这里插入图片描述
填写用户信息
在这里插入图片描述
给河北彭于晏配置密码
在这里插入图片描述
把新建用户添加到群组
在这里插入图片描述
GitLab 用户在组中有五种权限:

  • Guest:可以创建问题、发表评论、不能读写版本库(访客)
  • Reporter:可以克隆代码,不能提交(测试人员)
  • Deveoper:可以克隆代码、开发、提交、上传(开发人员)
  • Master:可以创建项目、添加 tag、保护分支、添加项目成员、编辑项目(运维)
  • Owner:所有事情都可以做,包括设置项目的访问权限(老板,但老板一般都在办公室)

4)创建项目

使用河北彭于晏用户登录创建
在这里插入图片描述
创建项目
在这里插入图片描述
在刚才创建的项目中创建文件
在这里插入图片描述
在这里插入图片描述

5)配置免密克隆

[root@GitLab ~]#ssh-keygen-trsa#配置密钥对(三连回车即可)[root@GitLab ~]#cat.ssh/id_rsa.pub#查看公钥

将公钥上传到 GitLab 中
在这里插入图片描述
验证(克隆过程中不需要输入密码即可)

[root@GitLab ~]#[email protected]:ZhangSan/test.git[root@GitLab ~]#lsanaconda-ks.cfggitlab-ce-12.0.2-ce.0.el7.x86_64.rpmtest[root@GitLab ~]#cdtest/[root@GitLab test]#ls1.html

2.安装 Jenkins

安装 JDK(因为 Jenkins 是使用 Java 编写的,所以需要先安装 JDK)

[root@Jenkins ~]#tarxfjdk-8u181-linux-x64.tar.gz[root@Jenkins ~]#lsanaconda-ks.cfgjdk1.8.0_181jdk-8u181-linux-x64.tar.gz[root@Jenkins ~]#mvjdk1.8.0_181//usr/local/java
[root@Jenkins ~]#cat<<END>>/etc/profileJAVA_HOME=/usr/local/java/PATH=$JAVA_HOME/bin:$PATHCLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jarexportPATHJAVA_HOMECLASSPATHEND
[root@Jenkins ~]#source/etc/profile
[root@Jenkins ~]#java-version#查看Java版本javaversion"1.8.0_181"Java(TM)SERuntimeEnvironment(build1.8.0_181-b13)JavaHotSpot(TM)64-BitServerVM(build25.181-b13,mixedmode)

安装 Jenkins

[root@Jenkins ~]#wgethttps://pkg.jenkins.io/redhat-stable/jenkins-2.222.4-1.1.noarch.rpm[root@Jenkins ~]#lsanaconda-ks.cfgjenkins-2.222.4-1.1.noarch.rpm[root@Jenkins ~]#yum-ylocalinstalljenkins-2.222.4-1.1.noarch.rpm

修改配置文件

[root@Jenkins ~]#sed-i'/^JENKINS_USER/cJENKINS_USER="root"'/etc/sysconfig/jenkins

创建软连接优化执行路径

[root@Jenkins ~]#ln-s/usr/local/java/bin/java/usr/bin/

启动 Jenkins

[root@Jenkins ~]#systemctlstartjenkins[root@Jenkins ~]#netstat-anpt|grep8080

在这里插入图片描述

1)登录 Jenkins,并安装相关插件

访问:

http://192.168.1.2:8080

在这里插入图片描述
点击继续后,会出现推荐安装和自定义安装,我这里选择的是推荐安装
在这里插入图片描述

2)配置 Jenkins 实现 GitLab 更新代码

安装 Jenkins 插件

Credentials#签名证书管理插件Gitlab#安装后从GitLab获取代码Git和GitClient#用于Jenkins在GitLab中拉取源码GitLabHook#GitLab触发Jenkins构建项目GitlabAuthentication#GitLab和Jenkins认证插件SSHPlugin#进程执行Shell脚本PublishOverSSH#用于通过SSH部署应用

在这里插入图片描述

  • 注意:当安装好 Jenkins 插件后,插件可能会跟 Jenkins 出现版本差异,不用管,后面我会对 Jenkins 进行升级操作。

配置 Jenkins 免密拉取 GitLab 代码

[root@Jenkins ~]#ssh-keygen-trsa[root@Jenkins ~]#cat.ssh/id_rsa.pub

将公钥上传到 GitLab 上
在这里插入图片描述
将私钥上传到 Jenkins 上
在这里插入图片描述
在这里插入图片描述

  • Jenkins 的 root 用户公钥在 GitLab 上,私钥在 Jenkins 上,目的就是为了方便 Jenkins 可以直接拉去 GitLab 上的代码。

3)在 Jenkins 上创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下载一下代码
在这里插入图片描述

4)将代码发布到 Web 服务器

这边简单说一下大致的流程:

  • 通过我们这一系列的操作也可以看出来,首先需要在 GitLab 上创建(上传)项目,然后 Jenkins 会将代码下载到本地;
  • 最后可以使用 Jenkins 将代码发送给指定服务器。

192.168.1.3

服务器上操作

[root@Apache ~]#yum-yinstallhttpd[root@Apache ~]#systemctlstarthttpd

在 Jenkins 上配置 SSH 免密登录

[root@Jenkins ~]#[email protected]

创建自动上传 Web 代码的脚本

[root@Jenkins ~]#cat<<END>1.sh#!/bin/bashscp/var/lib/jenkins/workspace/web/*[email protected]:/var/www/html/END[root@Jenkins ~]#chmod+x1.sh

将脚本添加到 Jenkins 中
在这里插入图片描述
发布项目
在这里插入图片描述

5)验证

在这里插入图片描述

3.实现 Jenkins 自动部署

1)安装插件

GitlabHookPluginBuildAuthorizationTokenRootBuildTokenTrigger

2)配置身份验证令牌

[root@Jenkins ~]#opensslrand-hex12038ef13e10ef686193784383
  • 注意:-hex 输出结果为 16 进制数据,数字 12 是指定生成的随机字符为 12 字节,即 24 个 16 进制个数。

3)在 Jenkins 上配置触发器

在这里插入图片描述

4)在 GitLab 的项目上配置链接和 Token

这里的网址和密钥令牌都要和 Jenkins 上的匹配。
在这里插入图片描述

  • 注意:当创建钩子时出现 Urlis blocked: Requests to the local network are not allowed
  • 原因是因为 GitLab 10.6 版本以后为了安全,不允许向本地网络发送 WebHook 请求。

开启请求
在这里插入图片描述

  • 当开启请求后,重新创建 Token 值即可。

5)验证

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

4.Jenkins 版本升级

在这里插入图片描述
下载后之后,我们只需要将 Jenkins 原有的包替换即可

[root@Jenkins ~]#rpm-qljenkins#查看Jenkins包安装路径[root@Jenkins ~]#systemctlstopjenkins[root@Jenkins ~]#cd/usr/lib/jenkins/[root@Jenkins jenkins]#mvjenkins.warjenkins-2.222.4.war.bak[root@Jenkins jenkins]#lsjenkins-2.222.4.war.bakjenkins.war[root@Jenkins jenkins]#systemctlstartjenkins

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


本文转载自: https://blog.csdn.net/weixin_46902396/article/details/118337250
版权归原作者 愿许浪尽天涯 所有, 如有侵权,请联系我们删除。

“使用 GitLab + Jenkins 实现持续集成(CI)环境”的评论:

还没有评论