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

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

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



一、持续集成简介


1.GitLab 简介

2.Jenkins 简介

3.GitLab 和 GitHub 的区别

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


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


1.安装 Gitlab

1)登录 Gitlab

2)配置邮件报警

3)创建群组

4)创建项目

5)配置免密克隆

2.安装 Jenkins

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

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

3)在 Jenkins 上创建项目

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

5)验证

3.实现 Jenkins 自动部署

1)安装插件

2)配置身份验证令牌

3)在 Jenkins 上配置触发器

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

5)验证

4.Jenkins 版本升级


一、持续集成简介



持续集成: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)环境



准备工作


image.png


1.安装 Gitlab


安装 Gitlab 所需组件


[root@GitLab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python


开启 Postfix 邮件服务


[root@GitLab ~]# systemctl start postfix
[root@GitLab ~]# systemctl enable postfix


安装 Gitlab


[root@GitLab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
[root@GitLab ~]# ls
anaconda-ks.cfg  gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
[root@GitLab ~]# yum -y localinstall gitlab-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-ctl reconfigure
[root@GitLab ~]# netstat -anpt | grep nginx


image.png


1)登录 Gitlab


访问:http://192.168.1.1


image.png

image.png

image.png


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


2)配置邮件报警


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


重置 Gitlab


[root@GitLab ~]# gitlab-ctl reconfigure


登录控制台发送测试邮件


[root@GitLab ~]# gitlab-rails console
irb(main):001:0> Notify.test_email('ChenZhuang1217@163.com','Test','Hello ZhangSan').deliver_now


image.png


查看


image.png


修改 GitLab 中 root 用户的密码


image.png


3)创建群组


点击创建群组


image.png


填写群组信息


image.png


创建一个账号


image.png


填写用户信息


image.png


给河北彭于晏配置密码


image.png


把新建用户添加到群组


image.png


GitLab 用户在组中有五种权限:


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


4)创建项目


使用河北彭于晏用户登录创建


image.png


创建项目


image.png


在刚才创建的项目中创建文件


image.png

image.png


5)配置免密克隆


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


将公钥上传到 GitLab 中


image.png


验证(克隆过程中不需要输入密码即可)


[root@GitLab ~]# git clone git@192.168.1.1:ZhangSan/test.git
[root@GitLab ~]# ls
anaconda-ks.cfg  gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm  test
[root@GitLab ~]# cd test/
[root@GitLab test]# ls
1.html


2.安装 Jenkins


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


[root@Jenkins ~]# tar xf jdk-8u181-linux-x64.tar.gz
[root@Jenkins ~]# ls
anaconda-ks.cfg  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz
[root@Jenkins ~]# mv jdk1.8.0_181/ /usr/local/java


[root@Jenkins ~]# cat <<END >> /etc/profile
JAVA_HOME=/usr/local/java/
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
END


[root@Jenkins ~]# source /etc/profile


[root@Jenkins ~]# java -version                         # 查看 Java 版本
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)


安装 Jenkins


[root@Jenkins ~]# wget https://pkg.jenkins.io/redhat-stable/jenkins-2.222.4-1.1.noarch.rpm
[root@Jenkins ~]# ls
anaconda-ks.cfg  jenkins-2.222.4-1.1.noarch.rpm
[root@Jenkins ~]# yum -y localinstall jenkins-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 ~]# systemctl start jenkins
[root@Jenkins ~]# netstat -anpt | grep 8080


image.png


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


访问:http://192.168.1.2:8080


image.png


点击继续后,会出现推荐安装和自定义安装,我这里选择的是推荐安装


image.png


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


安装 Jenkins 插件


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


image.png


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


配置 Jenkins 免密拉取 GitLab 代码


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


将公钥上传到 GitLab 上


image.png


将私钥上传到 Jenkins 上


image.png

image.png


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


3)在 Jenkins 上创建项目


image.png

image.png

image.png


下载一下代码


image.png


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


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


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


在 192.168.1.3 服务器上操作


[root@Apache ~]# yum -y install httpd
[root@Apache ~]# systemctl start httpd


在 Jenkins 上配置 SSH 免密登录


[root@Jenkins ~]# ssh-copy-id root@192.168.1.3


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


[root@Jenkins ~]# cat <<END > 1.sh
#!/bin/bash
scp /var/lib/jenkins/workspace/web/* root@192.168.1.3:/var/www/html/
END
[root@Jenkins ~]# chmod +x 1.sh


将脚本添加到 Jenkins 中


image.png


发布项目


image.png


5)验证


image.png


3.实现 Jenkins 自动部署


1)安装插件


Gitlab Hook Plugin
Build Authorization Token Root
Build Token Trigger


2)配置身份验证令牌


[root@Jenkins ~]# openssl rand -hex 12
038ef13e10ef686193784383


  • 注意:-hex 输出结果为 16 进制数据,数字 12 是指定生成的随机字符为 12 字节,即 24 个 16 进制个数。


3)在 Jenkins 上配置触发器


image.png


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


这里的网址和密钥令牌都要和 Jenkins 上的匹配。


image.png

image.png


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


开启请求


image.png


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


5)验证


image.png

image.png


4.Jenkins 版本升级


image.png


下载后之后,我们只需要将 Jenkins 原有的包替换即可


[root@Jenkins ~]# rpm -ql jenkins                     # 查看 Jenkins 包安装路径
[root@Jenkins ~]# systemctl stop jenkins
[root@Jenkins ~]# cd /usr/lib/jenkins/
[root@Jenkins jenkins]# mv jenkins.war jenkins-2.222.4.war.bak
[root@Jenkins jenkins]# ls
jenkins-2.222.4.war.bak  jenkins.war
[root@Jenkins jenkins]# systemctl start jenkins 


image.png


查看image.png

image.png


相关文章
|
1月前
|
敏捷开发 运维 测试技术
探索自动化测试在持续集成环境中的关键作用
【2月更文挑战第18天】 随着敏捷开发和DevOps文化的普及,持续集成(CI)已成为软件开发过程中不可或缺的组成部分。本文将深入探讨自动化测试在持续集成环境中的重要性,分析其如何提高软件交付速度、保障质量并减少人工干预。通过对现代软件工程实践中自动化测试策略的剖析,揭示了其在维护高效率和高质量软件产品中的核心地位。
31 7
|
6天前
|
测试技术 持续交付 开发工具
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
29 2
|
1月前
|
敏捷开发 监控 jenkins
探索自动化测试在持续集成环境中的关键作用
【2月更文挑战第14天】 随着敏捷开发和持续集成(CI)的普及,自动化测试已成为确保软件质量和加速交付过程的重要环节。本文旨在深入探讨自动化测试在持续集成环境中的核心价值,分析其如何提高测试效率,减少人工错误,并保障产品的快速迭代与发布。通过对自动化测试工具、策略及最佳实践的综合评述,为读者呈现一个全面的自动化测试实施指南。
20 0
|
3月前
|
安全 jenkins 测试技术
自动化测试与持续集成/持续交付(CI/CD)的实践与应用
自动化测试是现代软件开发不可或缺的环节,它可以有效地提高测试效率、降低测试成本。而持续集成/持续交付(CI/CD)则是一种基于自动化的软件开发流程,能够将代码的开发、构建、测试和部署等过程无缝连接起来,从而实现快速迭代和部署。本文将结合实际案例,介绍自动化测试和CI/CD的实践与应用。
150 2
|
3月前
|
存储 测试技术 持续交付
自动化测试与持续集成/持续交付(CI/CD):优化软件开发流程的利器
自动化测试与持续集成/持续交付(CI/CD)是现代软件开发中至关重要的环节,通过将自动化测试与持续集成/持续交付相结合,可以实现开发流程的高效优化,提高软件质量和交付速度。本文将探讨自动化测试与CI/CD的概念、原理及其在软件开发中的重要性,以及如何实施这些技术以提升团队的协作效率和软件交付质量。
58 1
|
1月前
|
敏捷开发 监控 Devops
探索自动化测试在持续集成环境中的关键作用
【2月更文挑战第15天】 本文旨在探讨自动化测试作为软件开发过程中不可或缺的一环,尤其在持续集成(CI)环境中的显著影响。通过深入分析自动化测试的实施策略和最佳实践,文章揭示了如何有效提升软件交付速度和质量。文中不仅讨论了自动化测试的基本概念和框架选择,还详细阐述了其在CI流程中的关键步骤及潜在挑战,并提出了相应的解决方案。
20 4
|
1月前
|
敏捷开发 测试技术 持续交付
探索自动化测试在持续集成环境中的关键作用
【2月更文挑战第15天】 随着敏捷开发和持续集成(CI)实践的普及,自动化测试已成为确保软件质量和加速产品上市速度的核心环节。本文将深入探讨自动化测试在持续集成环境中的重要性,分析其如何提高测试效率,减少人工干预的错误,并实现快速反馈循环。通过案例分析和最佳实践分享,我们将揭示自动化测试策略对提升软件开发流程的影响,以及如何有效地将其整合到现代软件生命周期管理中。
|
20天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
39 6
|
30天前
|
jenkins Java 持续交付
Docker搭建持续集成平台Jenkins最简教程
Jenkins 是一个广泛使用的开源持续集成工具,它能够自动化构建、测试和部署软件项目。在本文中,我们将使用 Docker 搭建一个基于 Jenkins 的持续集成平台。
115 2
|
1月前
|
JavaScript Go 项目管理
云效常见问题之使用gitlab仓库将代码合并评审环节集成到云效如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
97 1