使用 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


相关文章
|
28天前
|
Java jenkins 持续交付
Jenkins集成Maven
通过以上步骤,可以在Jenkins中成功集成Maven,实现自动化构建和部署。通过定时构建、SCM轮询等方式,可以确保代码库中的最新变更能够及时构建和测试,提高开发效率和代码质量。这种集成方式在实际项目中具有广泛的应用前景,能够显著提升团队的协作效率。
47 8
|
1月前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
2月前
|
监控 jenkins Linux
从 Jenkins 持续集成出发:探究如何监控员工电脑屏幕
Jenkins 在企业信息化管理中用于自动化构建、测试和部署,提高开发效率。本文讨论了其重要性,并从技术角度探讨了屏幕监控的可能性,但明确反对非法监控,强调应合法合规地管理企业和尊重员工隐私。
94 12
|
2月前
|
存储 测试技术 持续交付
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
61 2
|
3月前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
3月前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
3月前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
57 3
|
3月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
114 2
|
3月前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
142 4
|
3月前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。

热门文章

最新文章