一:Gitlab概述
GitLab概述:
是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。
GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
GitLab官网:https://about.gitlab.com/
二:GitLab和GitHub的区别
相同点: 二者都是基于web的Git仓库,在很大程度上GitLab是仿照GitHub来做的,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。
不同点:
1、GitHub如果要使用私有仓库,是需要付费的。GitLab可以在上面创建私人的免费仓库。
2、GitLab让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色:允许免费设置仓库权限;允许用户选择分享一个project的部分代码;允许用户设置project的获取权限,进一步的提升安全性;可以设置获取到团队整体的改进进度;通过innersourcing让不在权限范围内的人访问不到该资源。
从代码私有性方面来看,有时公司并不希望员工获取到全部的代码,这个时候GitLab无疑是更好的选择。但对于开源项目而言,GitHub依然是代码托管的首选。
git相关概念:
git 是一种版本控制系统,是一个命令,是一种工具
gitlib 是用于实现git功能的开发库
github 是一个基于git实现的在线代码托管仓库,包含一个网站界面,向互联网开放
gitlab 是一个基于git实现的在线代码仓库托管软件,一般用于在企业内网搭建git私服
注:gitlab-ce 社区版 ;gitlab-ee是企业版,收费
三:搭建GitLab平台
3.1:环境介绍
系统:CentOS7.5X64
下载gitlab 最新版
https://packages.gitlab.com/gitlab/gitlab-ce/
3.2:安装环境初始化
yum install curl policycoreutils openssh-server openssh-clients postfix -y
默认,使用 Postfix 发送邮件
service postfix start
chkconfig postfix on
iptables -F #清空规则
systemctl stop firewalld
systemctl disable firewalld
3.3 安装gitlab-ce
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.0.3-ce.0.el7.x86_64.rpm/download.rpm
rpm -ivh gitlab-ce-11.0.3-ce.0.el7.x86_64.rpm
3.4 配置并启动GitLab
gitlab-ctl reconfigure #重新配置应用程序。相当于初始化一下
gitlab-ctl status
netstat -nultp |grep :80
vim /etc/gitlab/gitlab.rb
改:13 external_url 'http://gitlab.example.com'
为:13 external_url 'http://172.17.100.11'
gitlab的管理
关闭gitlab: # gitlab-ctl stop
启动gitlab: # gitlab-ctl start
重启gitlab: # gitlab-ctl restart
默认第一次启动需要设置密码的: 这里配置密码为admin123456
默认配置的是root用户的密码
安装中出现的问题
(1)、在浏览器中访问GitLab出现502
错误
原因:内存不足。
解决办法:检查系统的虚拟内存是否随机启动了,如果系统无虚拟内存,则增加虚拟内存,再重新启动系统。
(2)、80
端口冲突
原因:Nginx默认使用了80
端口。
解决办法:为了使Nginx与Apache能够共存,并且为了简化GitLab的URL地址,Nginx端口保持不变,修改Apache的端口为4040。这样就可以直接用使用ip访问Gitlab。而禅道则可以使用4040
端口进行访问,像这样:xxx.xx.xxx.xx:4040/zentao
。具体修改的地方在/etc/httpd/conf/httpd.conf
这个文件中,找到Listen 80
这一句并将之注释掉,在底下添加一句Listen 4040
,保存后执行service httpd restart
重启apache服务即可。
-
#Listen 80
-
Listen 4040
(3)、8080
端口冲突
原因:由于unicorn默认使用的是8080
端口。
解决办法:打开/etc/gitlab/gitlab.rb
,打开# unicorn['port'] = 8080
的注释,将8080
修改为9090
,保存后运行sudo gitlab-ctl reconfigure
即可。
(4)、STMP设置
配置无效,暂时不知道原因。
(5)、GitLab头像无法正常显示
原因:gravatar被墙
解决办法:
编辑 /etc/gitlab/gitlab.rb
,将
#gitlab_rails['gravatar_plain_url'] = 'http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&d=identicon'
修改为:
gitlab_rails['gravatar_plain_url'] = 'http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&d=identicon'
然后在命令行执行:
-
sudo gitlab-ctl reconfigure
-
sudo gitlab-rake cache:clear RAILS_ENV=production
安装中文语言包(汉化)
以下汉化步骤参考此篇文章,首先确认当前安装版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
当前安装版本是8.5.7
,因此中文补丁需要打8.5版本
。
克隆 GitLab 源码仓库:
# 克隆 GitLab.com 仓库
git clone https://gitlab.com/larryli/gitlab.git
#或 Gitcafe.com 镜像,速度更快
git clone https://gitcafe.com/larryli/gitlab.git
运行汉化补丁:
# 8.5 版本的汉化补丁(8-5-stable是英文稳定版,8-5-zh是中文版,两个 diff 结果便是汉化补丁)
sudo git diff origin/8-5-stable..8-5-zh > /tmp/8.5.diff
# 停止 gitlab
sudo gitlab-ctl stop
# 应用汉化补丁
cd /opt/gitlab/embedded/service/gitlab-rails
git apply /tmp/8.5.diff
# 启动gitlab
sudo gitlab-ctl start
至此,汉化完毕。打开地址http://git.home.com
,便会看到中文版的GitLab
。如下
安装完成。
3.5 设置gitlab的群组
3.6 创建用户
3.7 为群组创建项目
3.8 从gitlab 上面 拉取项目 然后配置提交到master主线
mkdir -p /root/project
cd project
git clone http://172.17.100.11/TL-flyfish/solo.git
去公网下载一个博客的的项目
mkdir -p /soft/
cd /soft
git clone https://github.com/b3log/solo.git
cd /soft/solo/src/main/resouce/
vim late.latke.properties
----
serverhost = 172.17.100.11
----
cd solo/
cp -ap * /root/project/solo/
cd /root/project/solo/
git add .
git commit -m "all"
git push origin master
备份
如果是生产环境,备份是必须的。需要备份的文件:配置文件和数据文件。
备份配置文件
配置文件含密码等敏感信息,不要和数据备份文件放在一起。
sh -c 'umask 0077; tar -cf $(date "+etc-gitlab-%s.tar") -C /etc/gitlab'
备份数据文件
默认数据备份目录是/var/opt/gitlab/backups
,手动创建备份文件:
# Omnibus 方式安装使用以下命令备份
sudo gitlab-rake gitlab:backup:create
日常备份,添加 crontab,运行crontab -e
# 每天2点执行备份
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
如要修改备份周期和目录,在/etc/gitlab/gitlab.rb
中修改以下两个选项
# 设置备份周期为7天 - 604800秒
gitlab_rails['backup_keep_time'] = 604800
# 备份目录
gitlab_rails['backup_path'] = '/mnt/backups'
恢复
恢复之前,确保备份文件所安装 GitLab 和当前要恢复的 GitLab 版本一致。首先,恢复配置文件:
sudo mv /etc/gitlab /etc/gitlab.$(date +%s)
# 将下面配置备份文件的时间戳改为你所备份的文件的时间戳
sudo tar -xf etc-gitlab-1399948539.tar -C /
恢复数据文件
# 将数据备份文件拷贝至备份目录
sudo cp 1393513186_gitlab_backup.tar /var/opt/gitlab/backups/
# 停止连接数据库的进程
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
# 恢复1393513186这个备份文件,将覆盖GitLab数据库!
sudo gitlab-rake gitlab:backup:restore BACKUP=1393513186
# 启动 GitLab
sudo gitlab-ctl start
# 检查 GitLab
sudo gitlab-rake gitlab:check SANITIZE=true
一: gitlab CI/CD介绍
1.1 gitlab CI/CD概述
Gitlab是常用的开源git代码管理工具之一,随着发展也推出了ci/cd解决方案.
顾名思义具体来说ci/cd主要完成以下两个工作.
ci(持续构建)
代码提交后触发自动化的单元测试,代码预编译,构建镜像,上传镜像等.
cd(持续发布)
持续发布则指将构建好的程序发布到各种环境,如预发布环境,正式环境.
官网: https://docs.gitlab.com/ee/ci/README.html
1.2 特性
gitlab ci/cd是由独立的runner程序完成,runner采用go语言编写,因此可以很好的进行跨平台,通常可以将runner部署到任何gitlab server之外的服务器,从而避免对gitlab server的影响.
官网:https://docs.gitlab.com/runner/
二:配置gitlab的CI/CD 的runner
2.1 安装gitlab-runner
参考:
https://docs.gitlab.com/runner/install/linux-repository.html
在 CentOS 7 上面的安装
Add GitLab's official repository:
# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
安装runner
# For RHEL/CentOS/Fedora
sudo yum install gitlab-runner
2.2 项目注册到到runner
参考官网:
https://docs.gitlab.com/runner/register/index.html
找到要发布项目的注册信息
Setup a specific Runner manually
安装一个与 GitLab CI 兼容的 Runner (如需了解更多的安装信息,请查看 GitLab Runner)
在 Runner 设置时指定以下 URL: http://172.17.100.11/
在安装过程中使用以下注册令牌: kA5JA5myz4aZR6MRgEBm
启动 Runner!
gitlab-runner register
service gitlab-runner start
chkconfig gitlab-runner on
在gitlab 上面找到runner 将项目添加到runner里面去
这边如果有多个项目都可以添加到这个runner 里面去
##三:代码的MAVEN打包环境
配置 maven
tar -zxvf apache-maven-3.5.3-bin.tar.gz
mv apache-maven-3.5.3 /usr/local/maven
vim /etc/profile
---
在Java环境变量下面加上 maven的环境变量
## maven
export MAVEN_HOME=/usr/local/maven
PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin
---
source /etc/profile
mvn -version
mkdir -p /deploy/solo # 创建 打出solo.war 的目录
cd /root/project/
rm -rf solo
git clone http://172.17.100.11/TL-flyfish/solo.git
尝试使用 命令行的方式编译项目:
首次编译会下载包会很慢
cd solo
mvn clean package
mvn install
mvn install package -Dmaven.test.skip=true
最后会打出solo.war包
表示命令行打包完成
maven 到默认下载的依赖包在/root/.m2/repository
四:配置gitlab的CI 文件
4.1 配置CI 的 运行文件gitlab-ci.yml 打出war包测试
stages:
- build
- run
- deploy
variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
cache:
paths:
- .m2/repository/
.solo-build-job: &solo-build-job
script:
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- ls -ld *
solo-build:
when: manual
stage: build
script:
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- cd $CI_PROJECT_DIR/target/
- ls -ld *
执行构建
最后打出solo.war的包
五: 发布项目
5.1: 部署一台tomcat 中间件的服务器
tomcat 服务器 IP: 172.17.100.12
打通172.17.100.11 和172.17.100.12 的无密码登录认证。
下载:tomcat
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz
tar -zxvf apache-tomcat-8.5.32.tar.gz
mv apache-tomcat-8.5.32 /usr/local/tomcat
启动tomcat:
cd /usr/local/tomcat/bin
./startup.sh
访问: 172.17.100.12:8080
5.2 在gitlab-ci.yml 增加发布步骤
stages:
- build
- run
- deploy
variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
cache:
paths:
- .m2/repository/
.solo-build-job: &solo-build-job
script:
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- ls -ld *
solo-build:
when: manual
stage: build
script:
- sudo rm -rf /deploy/solo/solo.war
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- cd $CI_PROJECT_DIR/target/
- ls -ld *
- cp -ap solo.war /deploy/solo/
solo-run:
when: manual
stage: run
script:
- cd /deploy/solo
- md5sum solo.war
solo-deploy:
when: manual
stage: deploy
script:
- cd /deploy/solo/
- scp solo.war [email protected]:/root
- cd /deploy/script
- sh -x deploy-solo.sh
发布需要配置 一个发布脚本:
在 172.17.100.11 上面写编写脚本:
mkdir /deploy/script -p
---
#!/bin/bash
DATE=`date +%Y-%m-%d-%H-%M`
ssh [email protected] << eof
cd /usr/local/tomcat/bin/
sh -x shutdown.sh
cd /usr/local/tomcat/webapps/
mv solo.war /data/backup/solo.war$DATE
cp /root/solo.war /usr/local/tomcat/webapps/
cd /usr/local/tomcat/bin/
sh -x startup.sh
ps -ef |grep tomcat
eof
---
在 tomcat 服务器上面新建一个solo.war 包的备份目录
172.17.100.12
mkdir -p /data/backup
客户端从git服务器(172.17.100.11) 下载代码
cd /soft
rm -rf *
git clone [email protected]:TL-flyfish/solo-project.git
cd solo-project
cd src/main/resources/
vim latke.properties
---
修改 这个 serverHost 改为 172.17.100.12
serverHost=172.17.100.12
---
提交项目:
cd /soft/solo-project
git add *
git commit -m "add solo"
git push -u origin master
发布项目:
点击执行
开始build
此处报一个 权限不够
是因为默认构建的时候是gitlab-runner 这个用户 去执行这个命令的
所以要为gitlab-runner 用户提权
chmod +x /etc/sudoers
vim /etc/sudoers
gitlab-runner ALL=(ALL) NOPASSWD:ALL
并要 做gitlab-runner 用户与 172.17.100.12 的root的用户的无密钥登录
gitlab-cli.yaml 构建 脚本应该为sudo
stages:
- build
- run
- deploy
variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
cache:
paths:
- .m2/repository/
.solo-build-job: &solo-build-job
script:
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- ls -ld *
solo-build:
when: manual
stage: build
script:
- sudo rm -rf /deploy/solo/solo.war
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- cd $CI_PROJECT_DIR/target/
- ls -ld *
- sudo cp -ap solo.war /deploy/solo/
solo-run:
when: manual
stage: run
script:
- cd /deploy/solo
- md5sum solo.war
solo-deploy:
when: manual
stage: deploy
script:
- cd /deploy/solo/
- sudo scp solo.war [email protected]:/root
- cd /deploy/script
- sudo sh -x deploy-solo.sh
从新执行build的构建
执行 步骤 run:
执行步骤:deploy
访问测试:
©著作权归作者所有:来自51CTO博客作者flyfish225的原创作品,谢绝转载,否则将追究法律责任