Linux云计算 --中国三大电商大厂都在使用的《 GitLab与Jenkins结合构建持续集成(CI)环境》是如何排列

Posted 学神来啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux云计算 --中国三大电商大厂都在使用的《 GitLab与Jenkins结合构建持续集成(CI)环境》是如何排列相关的知识,希望对你有一定的参考价值。


基于最新版本:jenkins-2.222和gitlab-ce-13.9.4 搭建以下服务

1 持续集成概述和搭建Gitlab平台

1.1持续集成概述

持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试。开发-》代码编译-》测试-》

持续交付:持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境。
持续部署:在持续交付的基础上,把部署到生产环境的过程自动化。

1.2jenkins和Gitlab概述

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

网方网站:https://jenkins.io/

GitLab概述:

是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。

GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

GitLab中文网:https://www.gitlab.cc/installation/#centos-7

1.3GitLab和GitHub的区别

GitHub和GitLab的区别:

相同点: 二者都是基于web的Git仓库,在很大程度上GitLab是仿照GitHub来做的,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。
不同点:

  1. GitHub免费版本只有500MB的代码存储空间。
    更多免费用户的限制条件详见:https://github.com/pricing

  2. GitLab让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色:允许免费设置仓库权限;允许用户选择分享一个project的部分代码;允许用户设置project的获取权限,进一步的提升安全性。最重要的是,代码在自已的服务器上,别人拿不到。

  3. 总结:从代码私有性方面来看,有时公司并不希望员工获取到全部的代码,这个时候GitLab无疑是更好的选择。但对于开源项目而言,GitHub依然是代码托管的首选。

git相关概念:

git是一种版本控制系统,是一个命令,是一种工具
gitlib是用于实现git功能的开发库
github是一个基于git实现的在线代码托管仓库,包含一个网站界面,向互联网开放
gitlab是一个基于git实现的在线代码仓库托管软件,一般用于在企业内部网络搭建git私服

注: gitlab-ce 社区版 ; gitlab-ee是企业版,收费

1.4 搭建GitLab平台

实验环境: centos7 虚拟机最少需要6G内存,不然后期运行时,内存不够用,直接报错。 我这里给8G

1.安装Gitlab需要的组件:

[root@xuegod63 ~]# yum install curl policycoreutils-python openssh-server openssh-clients postfix -y
默认,使用 Postfix 发送邮件
[root@xuegod63 ~]# systemctl enable postfix && systemctl start postfix
[root@xuegod63 ~]# iptables -F  #清空规则
[root@xuegod63 ~]# systemctl stop firewalld && systemctl disable firewalld
禁止防火墙,就不用执行下面两条命令:
[root@xuegod63 ~]#firewall-cmd --permanent --add-service=http
[root@xuegod63 ~]#systemctl reload firewalld

2 安装gitlab
下载gitlab的两种方法:
方法1:使用yum下载太慢。直接使用迅雷下载以下链接:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.9.3-ce.0.el7.x86_64.rpm
上传到gitlab-ce-13.9.3-ce.0.el7.x86_64.rpm到linux系统上

[root@xuegod63 ~]# rpm -ivh gitlab-ce-13.9.3-ce.0.el7.x86_64.rpm  #安装

方法2:配置yum源,使用yum安装:

[root@xuegod63 ~]# yum install gitlab-ce -y   #安装太慢。下面使用清华的源:
[root@xuegod63 ~]# cd /etc/yum.repos.d/
[root@xuegod63 yum.repos.d]# vim gitlab-ce.repo   #写入以下内容
[gitlab-ce]  
name=gitlab-ce  
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7  
repo_gpgcheck=0  
gpgcheck=0  
enabled=1  
gpgkey=https://packages.gitlab.com/gpg.key
[root@xuegod63 ~]# yum install gitlab-ce -y

3 配置gitlab访问地址:

[root@xuegod63 ~]# vim /etc/gitlab/gitlab.rb   #修改gitlab外部访问地址

改:32 external_url ‘http://gitlab.example.com’

为:32 external_url ‘http://192.168.1.63’

注:这里必须修改,不然后后期访问时,用户到地址是:http://gitlab.example.com/xxxx ,根本不能访问。 修改后获得是: http://192.168.1.63/xxxx

4 应用新配好的配置并重启GitLab

[root@xuegod63 ~]# gitlab-ctl reconfigure  #重新配置应用程序。修改了gitlab服务配置文件后,都需要执行一下这个命令。
让各个服务的配置文件,重新加载一下配置文件。这里等个2分钟左右。
。。。
Running handlers:
Running handlers complete
Chef Client finished, 2/501 resources updated in 37 seconds
gitlab Reconfigured!
[root@xuegod63 ~]# gitlab-ctl status  #可以使用gitlab-ctl管理gitlab,例如查看gitlab状态:
run: gitlab-workhorse: (pid 3275) 169s; run: log: (pid 3151) 280s
run: logrotate: (pid 3169) 273s; run: log: (pid 3168) 273s
run: nginx: (pid 3157) 279s; run: log: (pid 3156) 279s
run: postgresql: (pid 3009) 349s; run: log: (pid 3008) 349s
run: redis: (pid 2926) 360s; run: log: (pid 2925) 360s
run: sidekiq: (pid 3142) 287s; run: log: (pid 3141) 287s
run: unicorn: (pid 3110) 293s; run: log: (pid 3109) 293s
[root@xuegod63 config]# netstat  -antup | grep  :80
tcp        0      0 127.0.0.1:8080     0.0.0.0:*      LISTEN     10864/unicorn maste 
tcp        0      0 0.0.0.0:80         0.0.0.0:*       LISTEN      10729/nginx: master

默认使用nginx做为web服务器。
注:如果后期web界面访问时,总报502,另外内存要大于4G,不然后内存不足,也报502

[root@xuegod63 ~]# iptables -F   #清空规则
[root@xuegod63 ~]# free  -m   #已经使用4G以上内存
              total        used        free      shared  buff/cache   available
Mem:        5817        4187         133          80        1496        1198

5 登录gitlab
http://192.168.1.63
第一次登录gitlab,需要为root用户修改密码,root用户也是gitlab的超级管理员,输入新密码:xuegod.cn ,密码需要复杂些,才可以的

如果密码太简单,将报错:

改成密码后, 登录一下:
使用root用户和刚才创建的密码登录gitlab:
登录: http://192.168.1.63/ 用户名: root 密码; xuegod.cn


到此,gitlab搭建成功。

2 配置gitlab邮件服务和对gitlab平台汉化

2.1 管理gitlab服务

关闭gitlab: # gitlab-ctl stop
启动gitlab: # gitlab-ctl start
重启gitlab: # gitlab-ctl restart

gitlab主配置文件:/etc/gitlab/gitlab.rb //可以自定义一些邮件服务等
日志地址:/var/log/gitlab/ // 对应各服务
服务地址:/var/opt/gitlab/ // 对应各服务的主目录
仓库地址:/var/opt/gitlab/git-data //记录项目仓库等提交信息
重启服务:gitlab-ctl stop/start/restart //启动命令

2.2 配置gitlab邮件服务

配置邮箱服务的用途:当有合并请求时,账号注册,修改密码时,可通过邮件通知 ​,邮件验证 ,​邮件修改实现

1.开启邮箱的SMTP服务

设置–>POP3/ smtp–>开启一下,开启后,返回授权码。保存好授权码

2. 编辑/etc/gitlab/gitlab.rb文件,配置STMP邮件发送服务。前提你的邮件已经开通stmp/pop3收发功能

[root@xuegod63 ~]# vim /etc/gitlab/gitlab.rb #在89行后,插入以下内容:

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "jianmingbasic@163.com"
gitlab_rails['smtp_password'] = "自己邮箱授权码,不是邮箱帐号的密码"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'jianmingbasic@163.com'
重新配置gitlab:
[root@xuegod63 ~]# gitlab-ctl reconfigure
3 通过命令行测试邮件是否发送成功(也可以不测)
[root@xuegod63 ~]# gitlab-rails console   #稍等几秒到十几秒,然后出现脚本输入区域
Loading production environment (Rails 4.2.8)
irb(main):001:0>   #这是提示符

然后再输入测试脚本:

irb(main):001:0> Notify.test_email('jianmingbasic@163.com', '邮件主题Message Subject', '邮件正文Message Body')
.deliver_now

注:脚本格式为:Notify.test_email(‘接收方邮件地址’,‘邮件主题’,‘邮件内容’).deliver_now

irb(main):004:0> exit
查看邮件:

2.3 汉化gitlab

最新版本中gitlab添加了语言功能,旧版本需要手工汉化,新版本只需修改配置即可。

修改后刷新页面即可完成汉化。

2.4 关闭gitlab注册功能

默认情况下可以直接注册账号。
以root用户登录:http://192.168.1.63/users/sign_in
点Admin area -》 setting -》General-》Expand, 取消这两项标签前对勾

在此网页的最后,点save changes:

测试,使用无痕浏览器进行登录,发已经关闭了注册功能:
http://192.168.1.63/

3 gitlab日常使用方法

3.1 新建项目

  1. 新建项目前,先创建项目所在的组(也就是说这个项目文件是保存在哪个组里)
    选择Admin area
  2. 新建群组
    http://192.168.1.63/admin/groups

    组描述内容:xuegod web 开发组

    权限选择这个:

  3. 选择Create New Projcet ,然后在输入项目名称,同时在namespace里选择刚才创建的组
    www.xuegod.cn web 代码

    现在gitlab创建项目时已经支持导入项目了。方便企业进行项目迁移。

    创建项目:xuegod-web ,项目描述: www.xuegod.cn web 代码

    注:这里只能选择私有的。因为之前xuegod群组已经指定了私有权限。

    注:稍后我们会设置一个公钥,这样就可以无交互,直接上传或下载代码了。就像ssh无密钥登录一样。这样方便后期进行jenkins自动部署

3.2 创建用户

  1. 管理中心-用户-新建用户
  2. Username是登录用户名,一般可以设置成邮箱的前缀,Email为公司邮箱。角色设置为管理员

    将新创建的用户,加入到xuegod群组中,并给一个owner权限, 只要加入到xuegod群组中,后期才能访问xuegod群组中的git项目

    添加用户到群组,角色为Owner所有者

3.3 重置新创建的用户的密码

登录邮件:jianmingbasic@163.com

点开设置自己的初始密码:密码必须8位以一上。我的密码是: xuegod.cn

生成密码后,登录:

方法2: 当用户忘记密码或者想给用户指定一个密码,以root管理员帐号直接修改密码

  1. 选择Admin area -》用户-》选中用户-》编辑

    设置新的密码是: xuegod.cn

  2. 使用jianmingbasic登录http://192.168.1.63/ 密码:xuegod.cn

    登录后续修改密码,此功能用于密码找回等操作,所以临时修改密码后还是需要用户自行修改密码。

3.4 删除用户

当对方离职时候,为了安全起见,需要删除对方的gitlab权限,避免机密信息丢失,操作方法如下:

  1. 选择管理中心 ,选择User,删除用户 。 我们这里先不删除,后期要用

    注:如果想把用户和贡献都删除,就选择下面这个。
    再次输入一下要删除的用户名,然后删除。注:我们先不删除,因为后期还要使用,这个用户
  2. 修改用户在组中的权限
    把用户jianmingbasic添加到xuegod组中,身份选择"主程序员",这样后期就可以提交代码了。选择“开发人员”会没有权限提交代码。

    maintainer #维护者 ,应该翻译主程序员,

3.5 在项目中添加一个文件



添加文件:index.html
http://192.168.1.63/xuegod/xuegod-web


创建index.html



4 git客户端使用技巧

4.1 安装git并clone代码

[root@xuegod63 ~]# yum install git  -y

#下载地址,可以从这里获得

[root@xuegod63 ~]# git clone http://192.168.1.63/xuegod/xuegod-web.git
正克隆到 'xuegod-web'...
Username for 'http://192.168.1.63': jianmingbasic      
Password for 'http://jianmingbasic@192.168.1.63': xuegod.cn
[root@xuegod63 ~]# cd xuegod-web/
[root@xuegod63 xuegod-web]# ls
index.html

注:后期可以部署ssh 公钥,实现不输入密码直接下载和上传代码。

4.2 初次运行 Git 前的配置

一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录。

git运行的环境变量有点像.bashrc,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下两个的地方:

1. ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。

例1:修改用户信息

[root@xuegod63 ~]# git config --global user.name "jianmingbasic"
[root@xuegod63 ~]# git config --global user.email "jianmingbasic@163.com" 
[root@xuegod63 ~]# cat ~/.gitconfig   #上面两条命令会生成~/.gitconfig
[user]
	email = jianmingbasic@163.com
	name = jianmingbasic
2. 当前项目.git目录中的配置文件(也就是工作目录中的 .git/config 文件):

这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 ~/.gitconfig中的同名变量。

如果要在某个特定的项目中使用其他名字或者邮件地址,先进到项目上下,然后只要去掉 --global 选项重新配置即可。 最后配置的用户和邮件地址会保存在当前项目的 .git/config 文件里。

例:修改某个git项目下的环境变量

[root@xuegod63 xuegod-web]#   cd xuegod-web/
[root@xuegod63 xuegod-web]#  vim  ./.git/config  #先查看一下,里面没有user.name和user.email
[root@xuegod63 xuegod-web]# git config  user.name "jianmingbasic"
[root@xuegod63 xuegod-web]# git config  user.email "jianmingbasic@163.com" 
[root@xuegod63 .git]# vim  ./.git/config  
...
[user]  #新增加了,以下内容
	name = jianmingbasic	
	email = jianmingbasic@163.com

4.3 git常用命令

git config --global user.name “name“#设置全局用户名
git config --global user.email mail#设置全局邮箱
git config --global --list#列出用户全局设置
git add index.html#添加文件到暂存区
git commit -m “描述内容“#提交文件到工作区
git status#查看工作区的状态
git push#提交代码到git服务器上
git pull#获取代码到本地
git log#查看操作日志
vim .gitignore#定义忽略文件
git reset --hard HEAD^#git版本回滚, HEAD为当前版本,加一个为上一个,^为上上一个版本
git reflog#获取每次提交的ID,可以使用–hard根据提交的ID进行版本回退
git reset --hard 5ae4b06#回退到指定id的版本
git branch#查看当前所处的分支
git checkout#切换到指定分支或标签

详细使用方法可以参考如下图:

例:把修改过的index.html文件更新主版本中

[root@xuegod63 test]# cd /root/xuegod-web/
[root@xuegod63 xuegod-web]# echo "bbs.xuegod.cn" >> index.html
[root@xuegod63 xuegod-web]#  git add index.html    #添加文件到暂存区
[root@xuegod63 xuegod-web]# git commit -m "add bbs.xuegod.cn"  #提交文件到工作区
[root@xuegod63 xuegod-web]# git push   #上传到git服务器 
origin [ˈɒrɪdʒɪn] 起源,根 
Username for 'http://192.168.1.63': jianmingbasic
Password for 'http://jianmingbasic@192.168.1.63': xuegod.cn

[root@xuegod63 xuegod-web]# git config --global push.default simple   #不再显示本信息并从现在开始采用新的使用习惯
[root@xuegod63 xuegod-web]# rm -rf index.html    #删除一些代码
[root@xuegod63 xuegod-web]# git reset --hard  HEAD  #回滚到最新版本
[root@xuegod63 xuegod-web]# ls
[root@xuegod63 xuegod-web]# git reflog    #获取每次提交的ID
9c1e21a HEAD@{0}: commit: aaa
cd9d1d5 HEAD@{1}: commit: add bbs
b2866fd HEAD@{2}: clone: from http://192.168.1.63/xuegod/xuegod-web.git

4.4 工作区和暂存区及分支概述

  1. 工作区就是编辑文件的目录区域,需要将工作区的修改好的文件使用add添加到暂存区才能提交到git服务器,在工作区有多个文件的时候可以将一个或多个文件添加至暂存区,再提交到git服务器即可。
  2. 在服务器创建分支
[root@xuegod63 xuegod-web]#  git branch bbs   #创建一个分支
[root@xuegod63 xuegod-web]#  git checkout bbs  #切换到分支bbs,进行代码管理
[root@xuegod63 xuegod-web]#  git branch    	#查看当前所处的分支

[root@xuegod63 xuegod-web]#  echo aaa > a.txt  #随意在里面写一些内容
[root@xuegod63 xuegod-web]#  git add a.txt      #添加到git的暂存区
[root@xuegod63 xuegod-web]#  git commit  -m "add a.txt"  #提交到git的工作区中
[root@xuegod63 xuegod-web]#  git push -u origin  bbs     #上传到git服务器上(先创建bbs分支,然后上传代码)
注:-u origin 是什么? 如下:
[root@xuegod63 xuegod-web]# vim /root/xuegod-web/.git/config
[remote "origin"]
        url = http://192.168.1.63/xuegod/xuegod-web.git    #这就是origin的git地址
        fetch = +refs/heads/*:refs/remotes/origin/*

然后在web界面查看分支:

将bbs分支的内容,合并到master上:

[root@xuegod63 xuegod-web]# git checkout master   #切换到分支 'master'
[root@xuegod63 xuegod-web]# git merge bbs   # 将bbs分支中的内容合并到master

注:merge 英 [mɜ:dʒ] 合并

[root@xuegod63 xuegod-web]# ls    #已经看到bbs分支中的a.txt
a.txt  index.html
[root@xuegod63 xuegod-web]# git push   #提交到git服务器上
Username for 'http://192.168.1.63': jianmingbasic
Password for 'http://jianmingbasic@192.168.1.63':  xuegod.cn

查看gitlab上,已经有a.txt

5 搭建Jenkins实现持续集成

5.1 安装JDK1.8

Jenkins是Java编写的,所以需要先安装JDK,这里采用yum安装,如果对版本有需求,可以直接在Oracle官网下载JDK。
[root@xuegod63 ~]# yum install -y java-1.8.0-openjdk #光盘镜像中有,也可以rpm直接安装

5.2 安装jenkins

官方下载地址:https://jenkins.io/zh/download/

方法1:直接上传jenkins-2.222.1-1.1.noarch.rpm到linux上

[root@xuegod63 ~]# rpm -ivh jenkins-2.222.1-1.1.noarch.rpm

方法2:在线安装

[root@xuegod63 ~]# wget  -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat/jenkins.repo 
[root@xuegod63 yum.repos.d]# rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
[root@xuegod63 yum.repos.d]# yum install -y  jenkins   #安装jenkins

新版jenkins的服务端口为8080,为了不和GitLab的服务端口相冲突,修改Jenkins的默认端口8080198
[root@xuegod63 config]# netstat -antup | grep :80
tcp    0    0 127.0.0.1:8080   0.0.0.0:*          LISTEN      10864/unicorn maste 
tcp    0     0 0.0.0.0:80      0.0.0.0:*       LISTEN      10729/nginx: master

[root@xuegod63 yum.repos.d]# vim /etc/sysconfig/jenkins
改:29 JENKINS_USER="jenkins" 
为:29 JENKINS_USER="root"    #以root

改:56 JENKINS_PORT="8080" 
为:56 JENKINS_PORT=" 198 "
[root@xuegod63 ~]# systemctl restart jenkins   #启动
[root@xuegod63 ~]# systemctl enable jenkins   #设置开机启动

修改jenkins默认源

在web界面访问jenkins时,默认会到国外的网站下载hudson.

以上是关于Linux云计算 --中国三大电商大厂都在使用的《 GitLab与Jenkins结合构建持续集成(CI)环境》是如何排列的主要内容,如果未能解决你的问题,请参考以下文章

顺利拿到《Linux 云计算与架构师》结业证书

2017云计算开源峰会 你是想听Linux谈开源还是想听OpenStack谈开源?

云计算 --- 用户权限管理网络配置ssh远程访问(linux系统)

云计算 --- 用户权限管理网络配置ssh远程访问(linux系统)

大数据与云计算学习计划 云计算系统管理 6 Linux中RPM软件包管理操作 Yum软件包仓库操作(概念与实操)

Linux云计算-完美解决Linux源代码封包失败问题