使用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 ~]# lsanaconda-ks.cfggitlab-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

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


    1)登录 Gitlab 访问:http://192.168.1.1
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    注意:在 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'] = '2085077346@qq.com'# 邮件账号gitlab_rails['smtp_password'] = ''# 邮件授权码gitlab_rails['smtp_authentication'] = 'login'gitlab_rails['smtp_enable_starttls_auto'] = truegitlab_rails['smtp_tls'] = truegitlab_rails['gitlab_email_from'] = '2085077346@qq.com'

    重置 Gitlab
    [root@GitLab ~]# gitlab-ctl reconfigure

    登录控制台发送测试邮件
    [root@GitLab ~]# gitlab-rails consoleirb(main):001:0> Notify.test_email('ChenZhuang1217@163.com','Test','Hello ZhangSan').deliver_now

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    查看
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    修改 GitLab 中 root 用户的密码
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


    3)创建群组 点击创建群组
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    填写群组信息
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    创建一个账号
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    填写用户信息
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    给河北彭于晏配置密码
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    把新建用户添加到群组
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

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

    4)创建项目 使用河北彭于晏用户登录创建
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    创建项目
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    在刚才创建的项目中创建文件
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


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

    将公钥上传到 GitLab 中
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    验证(克隆过程中不需要输入密码即可)
    [root@GitLab ~]# git clone git@192.168.1.1:ZhangSan/test.git[root@GitLab ~]# lsanaconda-ks.cfggitlab-ce-12.0.2-ce.0.el7.x86_64.rpmtest[root@GitLab ~]# cd test/[root@GitLab test]# ls1.html


    2.安装 Jenkins
    安装 JDK(因为 Jenkins 是使用 Java 编写的,所以需要先安装 JDK)
    [root@Jenkins ~]# tar xf jdk-8u181-linux-x64.tar.gz[root@Jenkins ~]# lsanaconda-ks.cfgjdk1.8.0_181jdk-8u181-linux-x64.tar.gz[root@Jenkins ~]# mv jdk1.8.0_181/ /usr/local/java

    [root@Jenkins ~]# cat <> /etc/profileJAVA_HOME=/usr/local/java/PATH=$JAVA_HOME/bin:$PATHCLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jarexport PATH JAVA_HOME CLASSPATHEND

    [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 ~]# lsanaconda-ks.cfgjenkins-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

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


    1)登录 Jenkins,并安装相关插件 访问:http://192.168.1.2:8080
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    点击继续后,会出现推荐安装和自定义安装,我这里选择的是推荐安装
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


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

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    注意:当安装好 Jenkins 插件后,插件可能会跟 Jenkins 出现版本差异,不用管,后面我会对 Jenkins 进行升级操作。
    配置 Jenkins 免密拉取 GitLab 代码
    [root@Jenkins ~]# ssh-keygen -t rsa[root@Jenkins ~]# cat .ssh/id_rsa.pub

    将公钥上传到 GitLab 上
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    将私钥上传到 Jenkins 上
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

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

    3)在 Jenkins 上创建项目 使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    下载一下代码
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


    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 < 1.sh#!/bin/bashscp /var/lib/jenkins/workspace/web/* root@192.168.1.3:/var/www/html/END[root@Jenkins ~]# chmod +x 1.sh

    将脚本添加到 Jenkins 中
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    发布项目
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片



    5)验证 使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


    3.实现 Jenkins 自动部署

    1)安装插件
    Gitlab Hook Plugin
    Build Authorization Token Root
    Build Token Trigger

    2)配置身份验证令牌
    [root@Jenkins ~]# openssl rand -hex 12038ef13e10ef686193784383

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

    3)在 Jenkins 上配置触发器 使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


    4)在 GitLab 的项目上配置链接和 Token 这里的网址和密钥令牌都要和 Jenkins 上的匹配。
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    • 注意:当创建钩子时出现 Urlis blocked: Requests to the local network are not allowed
    • 原因是因为 GitLab 10.6 版本以后为了安全,不允许向本地网络发送 WebHook 请求。
    开启请求
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    当开启请求后,重新创建 Token 值即可。
    5)验证 使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片


    4.Jenkins 版本升级
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    下载后之后,我们只需要将 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]# lsjenkins-2.222.4.war.bakjenkins.war[root@Jenkins jenkins]# systemctl start jenkins

    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

    查看
    使用GitLab+Jenkins实现持续集成CI环境的示例代码
    文章图片

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

      推荐阅读