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
选择创建新项目(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 注:虚拟机做好后创建一个快照
完成!