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来做的,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。
不同点:
-
GitHub免费版本只有500MB的代码存储空间。
更多免费用户的限制条件详见:https://github.com/pricing -
GitLab让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色:允许免费设置仓库权限;允许用户选择分享一个project的部分代码;允许用户设置project的获取权限,进一步的提升安全性。最重要的是,代码在自已的服务器上,别人拿不到。
-
总结:从代码私有性方面来看,有时公司并不希望员工获取到全部的代码,这个时候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 新建项目
- 新建项目前,先创建项目所在的组(也就是说这个项目文件是保存在哪个组里)
选择Admin area
- 新建群组
http://192.168.1.63/admin/groups
组描述内容:xuegod web 开发组
权限选择这个:
- 选择Create New Projcet ,然后在输入项目名称,同时在namespace里选择刚才创建的组
www.xuegod.cn web 代码
现在gitlab创建项目时已经支持导入项目了。方便企业进行项目迁移。
创建项目:xuegod-web ,项目描述: www.xuegod.cn web 代码
注:这里只能选择私有的。因为之前xuegod群组已经指定了私有权限。
注:稍后我们会设置一个公钥,这样就可以无交互,直接上传或下载代码了。就像ssh无密钥登录一样。这样方便后期进行jenkins自动部署
3.2 创建用户
- 管理中心-用户-新建用户
- Username是登录用户名,一般可以设置成邮箱的前缀,Email为公司邮箱。角色设置为管理员
将新创建的用户,加入到xuegod群组中,并给一个owner权限, 只要加入到xuegod群组中,后期才能访问xuegod群组中的git项目
添加用户到群组,角色为Owner所有者
3.3 重置新创建的用户的密码
登录邮件:jianmingbasic@163.com
点开设置自己的初始密码:密码必须8位以一上。我的密码是: xuegod.cn
生成密码后,登录:
方法2: 当用户忘记密码或者想给用户指定一个密码,以root管理员帐号直接修改密码
- 选择Admin area -》用户-》选中用户-》编辑
设置新的密码是: xuegod.cn
- 使用jianmingbasic登录http://192.168.1.63/ 密码:xuegod.cn
登录后续修改密码,此功能用于密码找回等操作,所以临时修改密码后还是需要用户自行修改密码。
3.4 删除用户
当对方离职时候,为了安全起见,需要删除对方的gitlab权限,避免机密信息丢失,操作方法如下:
- 选择管理中心 ,选择User,删除用户 。 我们这里先不删除,后期要用
注:如果想把用户和贡献都删除,就选择下面这个。
再次输入一下要删除的用户名,然后删除。注:我们先不删除,因为后期还要使用,这个用户
- 修改用户在组中的权限
把用户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 工作区和暂存区及分支概述
- 工作区就是编辑文件的目录区域,需要将工作区的修改好的文件使用add添加到暂存区才能提交到git服务器,在工作区有多个文件的时候可以将一个或多个文件添加至暂存区,再提交到git服务器即可。
- 在服务器创建分支
[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的默认端口8080为198
[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)环境》是如何排列的主要内容,如果未能解决你的问题,请参考以下文章
2017云计算开源峰会 你是想听Linux谈开源还是想听OpenStack谈开源?
云计算 --- 用户权限管理网络配置ssh远程访问(linux系统)
云计算 --- 用户权限管理网络配置ssh远程访问(linux系统)