Gitlab与Jenkins结合构成持续集成(CI)环境

Posted security-guard

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gitlab与Jenkins结合构成持续集成(CI)环境相关的知识,希望对你有一定的参考价值。

Jenkins概述:

  Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作。

  官方网址:https://jenkins.io/

 技术图片

 Gitlab概述:

  Gitlab是一个可以实现自托管的Git项目仓库,可通过web界面进行访问公开的或者私人项目。

  Gitlab拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释,可以管理团队对仓库的访问。

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

Gitlab与GitHub的区别:

  从代码私有性方面来看,有事公司并不希望员工获取到全部的代码,这个时候Gitlab是一个很好地选择,但是对于开源项目来说,GitHub依旧是代码托管的首选。

  Git相关概念:

    git    是一个版本控制系统,是一个命令,是一个工具

    gitlab   是用于实现 git 功能的开发库

    GitHub  是一个基于git实现的在线代码托管仓库,报刊一个网站界面,向互联网开放

    gitlab    是一个基于git实现的在线代码仓库托管软件,一般用于在企业内部网络搭建 git 私服

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

1.1、搭建Gitlab 平台

实验环境:CentOS7.4  虚拟机需要6G,否则可能会导致后期运行内存不够用

1.2、安装Gitlab需要的组件:

[root@c763 ~]#yum install curl policycoreutils openssh-server openssh-clients postfix -y

 

 这里选择postfix发送邮件

[root@c763 ~]#systemctl enable postfix
[root@c763 ~]#systemctl start postfix
[root@c763 ~]# iptables -F #清空规则
[root@c763 ~]# systemctl stop firewalld
[root@c763 ~]# systemctl disable firewalld
禁止防火墙,就丌用执行下面两条命令:
[root@c763 ~]#firewall-cmd --permanent --add-service=http
[root@c763 ~]#systemctl reload firewalld

 

 1.3、安装Gitlab

  下载gitlab的两种方法:

  方法一:使用yum可以下载,推荐清华大学开源软件镜像,可以用迅雷下载一下链接:

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm

 

  上传到 gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm 到 linux 系统上

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

 

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

[root@c763 ~]# yum install gitlab-ce -y #安装太慢。下面使用清华的源: 
[root@c763 yum.repos.d]# cat gitlab_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@c763 ~]# yum install gitlab-ce -y 

 

配置gitlab 域名:

[root@c763 ~]# vim /etc/gitlab/gitlab.rb #修改 gitlab 外部访问地址 
改:13 external_url http://gitlab.example.com 
为:13 external_url http://192.168.1.63 
注:这里必须修改,丌然后后期访问时,用户到地址是:http://gitlab.example.com/xxxx ,根本 
不能访问。 修改后获得是: http://192.168.1.63/xxxx 

 

 配置好后重启Gitlab

[root@c763 ~]# gitlab-ctl reconfigure #重新配置应用程序。修改了 gitlab 服务配置文 
件后,都需要执行一下这个命令。让各个服务的配置文件,重新加载一下配置文件。这里等个 2 分钟左史。 
。。。 
Running handlers: 
Running handlers complete 
Chef Client finished, 2/501 resources updated in 37 seconds 
gitlab Reconfigured! 
[root@c763 ~]# gitlab-ctl status 
[root@c763 ~]# 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@c763 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@c763 ~]# iptables -F #清空规则 
[root@c763 ~]# free -m #已经使用 4G 以上内存 
total used free shared buff/cache available 
Mem: 5817 4187 133 80 1496 1198 

 

 1.4、登录Gitlab

  http://192.168.1.63/users/sign_in

第一次登录 gitlab,需要为 root 用户修改密码,root 用户也是 gitlab 的超级管理员,输入新密码:xxxxxxxx,密码不要太过简单

技术图片

 

 密码改完后重新登录一下:

使用 root 用户和刚才创建的密码登录gitlab:

登录:http://192.168.1.63/   用户名: root 密码:xxxxxxxx

 技术图片

 

 到此,gitlab搭建成功

技术图片

 

 1.5、管理 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 //启动命令

 

1.6、注册新用户和关闭gitlab注册功能

退出root用户。默认情况下可以直接注册账号。

http://192.168.163/users/sign._in开始注册

 关闭gitlab注册功能:

 

 以root用户登录: http://192.168.1.63/users/sign_in点Admin area >> setting >> 取消sign-up enabled标签前对勾

技术图片

 

 勾选完在此网页的最后,点save:

测试,清空历史浏览缓存,发现已经关闭了注册功能

 技术图片

 

 1.7、CentOS7 部署汉化版 gitlab 10.2.3

下载最新的汉化包:

[root@c763 ~]# git clone https://gitlab.com/xhang/gitlab.git 
如果是其他版本需要添加上所需要的分支
[root@c763 ~]# git clone https://gitlab.com/xhang/gitlab.git -b v10.2.3-zh

 

可以直接上传本地gitlab-patch到服务器

[root@c763 ~]# tar zxvf gitlab-patch-zh.tat.gz 
扩展:汉化的方法,就是直接把汉化过的 web 页面调换原来的页面 
[root@c763 ~]# gitlab-ctl stop #关闭服务 
# /usr/bin/cp -rvf /root/gitlab/* /opt/gitlab/embedded/service/gitlab-rails/ 
直接把汉化好的文件替换了源文件中 gitlab-rails 下的文件。gitlab-rails 下面存放的都是 web 
界面相关的文件 
复制时可能不断提示是否要覆盖,所以我们直接使用 cp 命令,因为系统中的 cp 命令是实际是“alias cp=’cp -i’”的别名 
-v 显示复制的过程 
-f 强行复制 
[root@c763 gitlab]# gitlab-ctl restart #重启服务,等 1 分钟,再去访问 web 页面,访问太快会显示 502 错误。 

 

 登录汉化版本: http://192.168.1.63/profile

技术图片

 

 1.8、gitlab日常使用:

  一、新建项目

  先创建项目所在的组,选择Admin area

技术图片

 

 选择group----new group

  http://192.168.1.63/projects/new
技术图片

 

 选择创建新项目(New project),然后输入项目名称,同时在namespace 里选择刚才创建的组

技术图片

 

 技术图片

Visibility Level(项目可见级别):

1、Private(私有的,只有你自己戒者组内的成员能访问)

2、Internal(所有登录 gitlab 平台的用户都可能访问)

3、Public(公开的,所有人都可以访问)三种选项。即丌登录 gitlab 也可以访问

技术图片

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

  二、创建用户

  选择 Admin area

技术图片

 

   选择users --- new users

技术图片

 

 其中Name为对方的中文名,Username是登录用户名,一般可以设置成邮箱的前缀,Email为公司邮箱

技术图片

 

 项目默认,创建一个普通用户

技术图片

 

 信息输入完成后,选择Create User,基本资料可以不写

技术图片

  三、重置用户密码

登录刚才设置好的邮箱地址,xxxx@163.com  有时可以收到邮件,有时候也会收不到(不是很明细)

技术图片

 

 按照要求重新设置密码,最好是复杂点,8位数以上

生成密码后登录即可

配置 STMP 邮件发送服务 这个方法更可靠,但是有时也会收不到邮件

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

 

[root@c763 ~]# vim /etc/gitlab/gitlab.rb #在 430 行插入 
432 gitlab_rails[smtp_enable] = true 
433 gitlab_rails[smtp_address] = "smtp.163.com" 
434 gitlab_rails[smtp_port] = 25 
435 gitlab_rails[smtp_user_name] = "zhoujiangtao@163.com" 
436 gitlab_rails[smtp_password] = "自己邮箱的密码" 
437 gitlab_rails[smtp_authentication] = "login" 
438 gitlab_rails[smtp_enable_starttls_auto] = true 
439 gitlab_rails[smtp_tls] = true 
440 gitlab_rails[gitlab_email_from] = zhoujiangtao@163.com 

 

 

设置gitlab开机自动启动

systemctl enable gitlab-runsvdir.service 
systemctl restart gitlab-runsvdir.service 
[root@c763 gitlab]# gitlab-ctl restart 

 

已发送邮件的方式,有时可以收到邮件,也有时会收不到,不是很及时

第二个方法

以root管理员账号直接修改密码,这个方法有效

  1、选择Admin area >> 用户 >> 选中用户 然后编辑

  2、编辑后保存 save

 

  四、删除用户

  1、当这个人离职的时候,为了安全起见,需要删除对方的gitlab权限,避免机密信息丢失

  选择 用户>>编辑>>删除用户(如果想把用户和其他记录都删掉,就选择删除用户和贡献)

  2、把用户zhoujiangtao添加到  刚才建的组中,身份选择“主程序员”,这样后期就尅提交代码了

  注:“开发人员” 会没有权限提交代码

选择群组>> 点击刚才的建组,然后添加用户到群组

五、在项目中添加一个文件index.html

点击添加 +  会有一个new file

技术图片

 

 技术图片

 

 2.1、安装git客户端使用gitlab

2.2、安装git并clone代码

[root@c763 ~]# yum install git -y 
#下载地址,可以从这里获得 
[root@c763 ~]# git clone http://192.168.1.63/jiang/jiang-web.git 
正克隆到 jiang-web... 
Username for http://192.168.1.63: zhoujiangtao
Password for http://zhoujiangtao@192.168.1.63: xxxxxxxx 
[root@c763 ~]# cd jiang-web/ 
[root@c763 jiang-web]# ls 
index.html 
注:后期可以部署 ssh 公钥,实现不输入密码直接下载和上传代码。

 

 2.3、 初次运行 Git 前的配置

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

沿用现在的配置。

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用

这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录。

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

存放在以下两个的地方:

  1、~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global选项,读写的就是这个文件。

1:修改用户信息

[root@c763 ~]# git config --global user.name "zhoujiangtao"

[root@c763 ~]# git config --global user.email "zhoujiangtao@163.com"

[root@c763 ~]# cat ~/.gitconfig #上面两条命令会生成~/.gitconfig

[user]

email = zhoujiangtao@163.com

name = zhoujiangtao 

 

  2、当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。

每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 ~/.gitconfig 中的同名变量。

  如果要在某个特定的项目中使用其他名字戒者邮件地址,先迚到项目上下,然后只要去掉 --global 选项重新配置即可。

最后配置的用户和邮件地址会保存在当前项目的 .git/config 文件里。

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

[root@c763 jiang-web]# cd jiang-web/

[root@c763 jiang-web]# vim ./.git/config #先查看一下,里面没有 user.name

和 user.email

[root@c763 jiang-web]# git config user.name "zhoujiangtao"

[root@c763 jiang-web]# git config user.email "zhoujiangtao@163.com"

[root@c763 .git]# vim ./.git/config

...

[user]

name = zhoujiangtao

email = zhoujiangtao@163.com

 2.4、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 -- file #从服务器更新某个那文件覆盖本地的文件 

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

[root@c763 test]# cd jiang-web/ 
[root@c763 jiang-web]# echo "bbs.jiang.cn" >> index.html 
[root@c763 jiang-web]# git add index.html 
[root@c763 jiang-web]# git commit -m "add bbs.jiang.cn" 
[root@c763 jiang-web]# git push -u origin master #上传到 master 主干下 
[root@c763 jiang-web]# rm -rf index.html #初除一些代码 
[root@c763 jiang-web]# git reset --hard HEAD #回滚到最新版本 
[root@c763 jiang-web]# ls 
[root@c763 jiang-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/jiang/jiang-web.git 

3.1、工作区和暂存区以及分支概述

3.1.1、 工作区就是编辑文件的目录区域,需要将工作区的修改好的文件 add 到暂存区才能提交到 git 服务器,在工作区有多个文件的时候可以将一个戒多个文件添加至暂存区,再提交到 git 服务器即可。

 

3.1.2、在服务器创建分支

[root@c763 jiang-web]# git branch bbs #创建一个分支 
[root@c763 jiang-web]# git checkout bbs #切换到分支 bbs 
[root@c763 jiang-web]# git branch #查看当前所处的分支 
[root@c763 jiang-web]# echo aaa > a.txt #随意在里面写一些内容 
[root@c763 jiang-web]# git add a.txt 
[root@c763 jiang-web]# git commit -m "add a.txt" #提交到暂存区中 
[root@c763 jiang-web]# git push -u origin bbs #上传到分支 bbs 分支上 

 

图解:

技术图片

 

 

 

 

关于 git push.default 设置的几个关键点

默认配置下,当使用 git push 命令而没有明确的指名本地分支和进程参考分支的情冴下,会有如上的提示。如果 git push 命令没有明确指定引用规格(refspec),也就是没有指定推送的源分支和目标分支, 那么 git 会采用 push.default 定义的劢作。不同的值适用于不同的工作流程模式。

  显而易见,主要是因为之前没有进行设置引用规格才出现的这种问题,现在我把 push.default的可用值与配置方法贴在下面。push.default 可用的值如下:

    1.nothing 不推送任何东西并有错误提示,除非明确指定分支引用规格。强制使用分支引用规格来避免可能潜在的错误。

    2.current 推送当前分支到接收端名字相同的分支。

    3.upstream 推送当前分支到上游@{upstream}。这个模式只适用于推送到不拉取数据相同的仓库,比如中央工作仓库流程模式。

    4.simple 在中央仓库工作流程模式下,拒绝推送到上游与本地分支名字不同的分支。也就是只有本地分支名和上游分支名字一致才可以推送, 就算是推送到不是拉取数据的进程仓库,只要名字相同也是可以的。在 GIT 2.0 中,simple 将会是 push.default 的默认值。 simple 只会推送本地当前分支。

    5.matching 推送本地仓库和进程仓库所有名字相同的分支。这是 git 当前版本的缺省值。

   配置 push.default 的命令如下: git config --global push.default simple

4.1、搭建Jenkins实现持续集成

4.1.1、安装jdk环境,Jenkins是Java 编写的,所以需要先安装jdk,这里采用yum安装(如果版本有需求,可以直接在Oracle官方下载jdk)

[root@c763 ~]# yum install -y java-1.8.0-openjdk #光盘镜像中有,也可以 rpm 直接安装 

 

4.1.2、安装Jenkins

  方法一:直接上传rpm包到服务器,并安装

[root@c763 ~]# rpm -ivh jenkins-2.93-1.1.noarch.rpm 

 

  方法二:在线安装

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

 

4.2、新版Gitlab的服务端口为8080,为了不和Gitlab端口冲突,修改Jenkins的端口为其他数值

[root@c763 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@c763 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@c763 ~]# /etc/init.d/jenkins start #启劢 
[root@c763 ~]# chkconfig jenkins on #设置开机启劢 
[root@c763 ~]# chkconfig --list jenkins 

 

4.3、访问Jenkins并安装相关插件

[root@c763 jenkins]# iptables -F # 要清空防火规则,还要关闭 selinux 
开始正常使用:http://192.168.1.63:198

 

首先需要解锁Jenkins

[root@c763 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword #查看刜始化密码文件

 

然后选择安装插件,这里安装通用的社区插件即可,其他用到的时候再安装也不迟

技术图片

 

 确保插件安装成功

技术图片

然后创建用户名,密码,全名,电子邮箱地址

技术图片

完成Jenkins的安装

5.1、插件管理

5.1.1、安装成功后,登录系统进行管理

 系统管理  -> 插件管理 -> 高级

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 5.2、插件下载地址:

  方法一:网址:https://jenkins.io/ 点击跳转

 下载好后,再把自己需要的插件本地上传

  方法二:可以把一台安装好的Jenkins插件服务器的   /var/lib/jenkins/plugins  目录下的文件复制到新的Jenkins中

把准备好的插件解压一下: 
[root@c763 jenkins]# tar czvf plugins.tar.gz plugins/ 
#cd /var/lib/jenkins/ 
#rm -rf /var/lib/jenkins/plugins 
#tar -zxvf plugins.tar.gz     #上传 plugins.tar.gz 到服务器上,解压
#chown jenkins.jenkins ./* -R 
#/etc/init.d/jenkins restart 
注:记得重启 jenkins,这个非常重要,因为不重启,插件不会生效 
登录 gitlab     http://192.168.1.63/ 用户名:root 密码: xxxxxxxx
登录 jenkins http://192.168.1.63:198/ 用户名: admin 密码: 123456 
注:虚拟机做好后创建一个快照 

 

完成! 

 
持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,
并进行自动化测试  >>>  开发  >>> 代码编译  >>> 测试
持续交付:持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境。
持续部署:在持续交付的基础上,把部署到生产环境的过程自动化。 
从而实现整个流程

以上是关于Gitlab与Jenkins结合构成持续集成(CI)环境的主要内容,如果未能解决你的问题,请参考以下文章

1.GitLab和Jenkins 结合构建持续集成(CI)环境

GitLab+Jenkins结合构建持续集成(CI)环境

CI/CD持续集成与持续交付(上)-------- git,gitee远程共有仓库和gitlab私有仓库,jenkins

CI/CD持续集成与持续交付(上)-------- git,gitee远程共有仓库和gitlab私有仓库,jenkins

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

gitlab与jenkins结合构建持续集成