使用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 来做的,它们都提供了分享开源项目的平台。

不同点:

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

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

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

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

准备工作

主机名 操作系统 硬件 IP 地址
GitLab CentOS 7.4 4 G(联网状态) 192.168.1.1
Jenkins CentOS 7.4 4 G(联网状态) 192.168.1.2
Apache CentOS 7.4 2 G 192.168.1.3

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

1)登录 Gitlab

访问:http://192.168.1.1

注意:在 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

查看

修改 GitLab 中 root 用户的密码

3)创建群组

点击创建群组

填写群组信息

创建一个账号

填写用户信息

给河北彭于晏配置密码

把新建用户添加到群组

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

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

4)创建项目

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

创建项目

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

5)配置免密克隆

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

将公钥上传到 GitLab 中

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

[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

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

访问:http://192.168.1.2:8080

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

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 部署应用

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

配置 Jenkins 免密拉取 GitLab 代码

[root@Jenkins ~]# ssh-keygen -t rsa
[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 -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 中

发布项目

5)验证

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 上配置触发器

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

查看

到此这篇关于使用GitLab+Jenkins实现持续集成CI环境的示例代码的文章就介绍到这了,更多相关GitLab Jenkins持续集成CI环境内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境的详细教程

    环境搭建概述 亲爱的家人们可以到链接:http://xiazai.jb51.net/202105/yuanma/javayaml_jb51.rar  下载所需要的yaml文件. 1.K8S是什么? K8S全称是Kubernetes,是一个全新的基于容器技术的分布式架构领先方案,基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化. 如果我们的系统设计遵循了kubernetes的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,都可以使用K8S来管

  • centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)

    centos下搭建GitLab+Jenkins持续集成环境,供大家参考,具体内容如下 1.安装JDK yum install -y java 2.安装jenkins 添加Jenkins库到yum库,Jenkins将从这里下载安装. wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import https://jenkins-ci.org/redhat/jenkins

  • 使用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)将代码发

  • Jenkins+maven持续集成的实现

    环境 系统:centos 7 tomcat位置:/usr/local/jbreport/apache-tomcat-8.5.57 jdk位置:/usr/local/jbreport/jdk1.8.0_152 安装Jenkins 下载依赖 wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 导入密钥 rpm --import https://pkg.jenkins.io/re

  • Jenkins+Docker持续集成的实现

    目录 一.Jenkins介绍 二.安装部署Jenkins 1. 环境信息 2. 新建Jenkins用户 3. Jenkins安装方式 4. Jenkins授权和访问控制 5. Jenkins系统配置 三.Jenkins构建maven风格的job 1. 新建maven任务 2. 构建任务配置 3. 源码管理配置 4. 构建触发器配置 5. Maven构建设置 四.Jenkins邮件通知设置 1. 配置jenkins自带的邮件功能 2. 安装使用插件Email Extension Plugin 五.

  • springboot 集成支付宝支付的示例代码

    最简单的springboot集成支付宝 1 注册沙箱 沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下 然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载一个生成密钥的工具.然后解压按照里面的readme生成公私密钥, 选择沙箱应用 上传公钥即可..沙箱到这里就基本完成了,里面还有沙箱版本的的android app可以下载下来. java 程序 1 新建一个springboot项目 因为我们创建的是一个web工程,所以,仅仅演示支付宝的demo,只需

  • SpringBoot集成slf4j+log4j2的示例代码

    本文介绍了SpringBoot集成slf4j+log4j2的示例代码,分享给大家,具体如下: Maven依赖 <!--增加log4j2依赖↓--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency&g

  • SpringBoot集成Auth0 JWT的示例代码

    目录 前言 session认证与Token认证 session认证 Token认证 JWT简介 JWT定义 JWT的类库 具体实现 JWT配置 JWT工具类 测试接口 前言 说说JWT,先说下互联网服务常见的两种用户认证方式: session认证与Token认证 session认证 传统的Session认证的大体流程可以表示为用户提供用户名和密码登录后由服务器存储一份用户登录信息并传递给浏览器保存为Cookie,并在下次请求中根据Cookie来识别用户,但这种方式缺陷明显: Session都是保

  • ASP.NET Core+Docker+Jenkins实现持续集成的完整实例

    前言 在前后端分离开发的项目当中为了避免重复构建发布,我们需要部署一个持续发布环境,而目前的开发环境服务器都是基于 CentOS 的,因此每次在本地发布之后还需要打包,上传,部署,十分繁琐.故这里采用了比较成熟的Jenkins 作为持续部署环境. 方法如下: 1.新建一个ASP.NET Core MVC应用程序: 需要勾选Docker支持 2.将其上传到git: 3.建立Jenkins任务 (1)选择"新建任务",输入任务名称,选择"自由风格项目",然后点击确定:

  • springboot集成spring cache缓存示例代码

    本文介绍如何在springboot中使用默认的spring cache, 声明式缓存 Spring 定义 CacheManager 和 Cache 接口用来统一不同的缓存技术.例如 JCache. EhCache. Hazelcast. Guava. Redis 等.在使用 Spring 集成 Cache 的时候,我们需要注册实现的 CacheManager 的 Bean. Spring Boot 为我们自动配置了 JcacheCacheConfiguration. EhCacheCacheCo

  • Spring boot集成Kafka+Storm的示例代码

    前言 由于业务需求需要把Strom与kafka整合到spring boot项目里,实现其他服务输出日志至kafka订阅话题,storm实时处理该话题完成数据监控及其他数据统计,但是网上教程较少,今天想写的就是如何整合storm+kafka 到spring boot,顺带说一说我遇到的坑. 使用工具及环境配置 ​ 1. java 版本jdk-1.8 ​ 2. 编译工具使用IDEA-2017 ​ 3. maven作为项目管理 ​ 4.spring boot-1.5.8.RELEASE 需求体现 1.

随机推荐