Gitlab利用Ruby on Rails开发的开元应用程序,从而实现一个代码项目仓库,可以通过web界面进行访问公开的或者私有的项目

Ruby on Rails是一个可以使开发,部署,维护web应用程序变得简单的框架

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

非常易于浏览提交过的版本并提供一个文件历史库,另外还提供了一个代码片段收集功能,可以轻松的实现代码复用,便于日后需要的时候可以进行查找


相同点:两者都是基于web的GIt仓库,在很多大程度上Gitlab是模仿github来做的,都是分享开源项目的平台,为开发团队提供了存储,分享,发布以及合作开发项目的中心化云存储的场所

不同点:GitHub在使用私有仓库需要收费的,而Gitlab可在在上面创建免费的私有仓库,另外Gitlab对于开发团队来说,拥有很多的控制权限;

相对于github,有着更多的特色,如免费甚至仓库权限,允许用户选择分享一个project的部分代码;允许用户设置project的获取权限从而进一步提升安全性;可以有选择性的控制访问权限;

代码性能方面:如果不希望公司员工获取全部的代码,这个时候Gitlab是最好的首选,如果是个人开源项目而言,Github是代码的首选


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

gitlib:用于实现git功能的开发库

github:一个基于git实现的在线代码仓库,包含一个网站界面,开放面广

gitlab:一个基于git实现的在线代码仓库,一般用于企业内网搭建git私服

PS:Gitlab-ce社区版本;gitlab-ee是企业版,收费


实验环境

centos7.3_x64

git/gitlab+jenkins+http_master  192.168.2.117

http_slave                                   192.168.2.113


验软件

jdk-8u172-linux-x64.tar.gz

apache-maven-3.0.3-bin.tar.gz

jenkins-2.191-1.1.noarch.rpm

gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm

gitlab-patch-zh.tat.gz   gitlab汉化包


软件安装

cat /etc/redhat-release 

CentOS Linux release 7.3.1611 (Core)

free -m

                    total        used        free      shared  buff/cache   available

Mem:           3783         103        3542           8         137        3479

Swap:           2047           0        2047     物理内存必须4G以及4G以上以免发生访问时出现502错误


ssh-keygen -r rsa  

scp -r /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys    http_master端操作

scp -r /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys    http_slave端操作  

touch /root/test.txt && echo testfile > /root/test.txt

scp -r /root/test.txt  [email protected]:/root/ 


yum install -y curl curl-delve git  policycoreutils  policycoreutils-python  patch patch-devel  openssh-server openssh-clients postfix

rpm -ivh /root/gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm

systemctl start sshd && systemctl enable sshd

systemctl start postfix && system enable posfix


gitlab主配置文件:/etc/gitlab/gitlab.rb     自定义邮件服务等

/var/log/gitlab                         对应各服务

/var/opt/gitlab/                       服务的主目录

/var/opt/gitlab/git-data           记录项目仓库等提交信息


tar zxvf gitlab-patch-zh.tat.gz -C /usr/src/

cat /usr/src/gitlab/VERSION 

10.2.3

cd /usr/src/gitlab/

git diff  v10.2.3 v10.2.3-zh > ../10.2.3-zh.diff

patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /usr/src/10.2.3-zh.diff    打汉化补丁


git --version

git version 1.8.3.1

cp -pv   /etc/gitlab/gitlab.rb  vim /etc/gitlab/gitlab.rb.bak

external_url 'http://gitlab.example.com'

external_url 'http://xx.xx.xx.xx'  修改为服务器ip,如绑定域名忽律


gitlab-ctl reconfigure  加载配置从新初始化

Running handlers:

Running handlers complete

Chef Client finished, 382/541 resources updated in 01 minutes 54 seconds

gitlab Reconfigured!

gitlab-ctl status

run: gitaly: (pid 3467) 166s; run: log: (pid 3210) 198s

run: gitlab-monitor: (pid 3488) 166s; run: log: (pid 3305) 190s

run: gitlab-workhorse: (pid 3454) 167s; run: log: (pid 3166) 207s

run: logrotate: (pid 3195) 200s; run: log: (pid 3194) 200s

run: nginx: (pid 3172) 206s; run: log: (pid 3171) 206s

run: node-exporter: (pid 3292) 192s; run: log: (pid 3291) 192s

run: postgres-exporter: (pid 3510) 165s; run: log: (pid 3352) 180s

run: postgresql: (pid 2943) 245s; run: log: (pid 2942) 245s

run: prometheus: (pid 3498) 165s; run: log: (pid 3334) 182s

run: redis: (pid 2876) 256s; run: log: (pid 2875) 256s

run: redis-exporter: (pid 3319) 188s; run: log: (pid 3318) 188s

run: sidekiq: (pid 3149) 213s; run: log: (pid 3148) 213s

run: unicorn: (pid 3108) 219s; run: log: (pid 3107) 219s

netstat -tuplna | grep 80

tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      3127/unicorn master 

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3172/nginx: master  

tcp        0      0 0.0.0.0:8060            0.0.0.0:*               LISTEN      3172/nginx: master  

tcp        0      0 127.0.0.1:8080          127.0.0.1:57626         TIME_WAIT   -                   

tcp        0      0 127.0.0.1:8080          127.0.0.1:57698         TIME_WAIT   -                   

tcp        0      0 127.0.0.1:8080          127.0.0.1:57674         TIME_WAIT   -                   

tcp        0      0 127.0.0.1:8080          127.0.0.1:57650         TIME_WAIT   -                   

udp6       0      0 fe80::3888:124b:494:123 :::*                                640/ntpd 


gitlab常用命令

gitlab-ctl start:启动全部服务

gitlab-ctl restart:重启全部服务

gitlab-ctl stop:停止全部服务

gitlab-ctl reconfigure: 使配置文件生效(一般修改完主配置文件/etc/gitlab/gitlab.rb,需要执行此命令)

gitlab-ctl show-config :验证配置文件

gitlab-ctl uninstall:删除gitlab(保留数据)

gitlab-ctl cleanse:删除所有数据,从新开始


jenkins+git/gitab_第1张图片


http://192.168.2.117/

jenkins+git/gitab_第2张图片

用户名为 root 密码为新密码设置


创建项目

jenkins+git/gitab_第3张图片

jenkins+git/gitab_第4张图片


jenkins+git/gitab_第5张图片


jenkins+git/gitab_第6张图片


创建登入用户 修改登入密码

jenkins+git/gitab_第7张图片


jenkins+git/gitab_第8张图片


3.jpg


jenkins+git/gitab_第9张图片


jenkins+git/gitab_第10张图片


jenkins+git/gitab_第11张图片


jenkins+git/gitab_第12张图片


创建gitlab root_ssh 秘钥

ssh-keygen  -t rsa

ls /root/.ssh/id_rsa  | grep id

id_rsa    id_rsa.pub

cat /root/.ssh/id_rsa.pub 

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjJsMzxdHh7Ow2K7xDkjufzsT+4kmKnfugTQVyH9bPiHzUnmZZlGcq2ByybNdiHaE+M1dvoFVNfJj2qiP4fxOS1ng54fmbMk7d1xlYSWMQkHIvjAIQssqIneAMA3alwpgQ0BQEtOXlNx/grmRZWiGfjjUVmztNV96wQs3rw2Yqd0l4PkxtCYeJ6JN3JUcfJnG+o7897BDtH2BOC5WXrU5AbF6ivky+NjtrX4gdTF+Tq585bO40rgj16FNyewo8AbJ/0Lm3vpeIhbtLZFzRMslLibkXUX8aqD+tqrAXIyc54uQ/nlt8zYQRqk8+hcf8D1/loLTCsChCkPw4mf2+rBnR root@centos7


jenkins+git/gitab_第13张图片


jenkins+git/gitab_第14张图片


cd /var/www/html/   此目录为测试按照环境变化

git clone http://gitlab.example.com/root/test.git

Cloning into 'test'...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Unpacking objects: 100% (3/3), done.

ll /var/www/html/test/index.html 

/var/www/html/test/index.html   

less /var/www/html/test/index.html 

welcome to gitlab server      测试服务端是否可以从服务端下载代码


cd /var/www/html/

git config --global user.name "xx"   用户名     

git config --global user.email "[email protected]"   用户邮箱

cat /root/.gitconfig 

[user]

        name = xx

        email = [email protected]


git branch www    创建分支

git checkout www   切换到分支

git branch    查看当前所有分支

touch aa.txt && echo welcome to test > aa.txt

git add aa.txt   分支测试文件

git commit -m "add aa.txt"   测试文件暂存区

git push -u origin www    上传文件到bbs分支

jenkins+git/gitab_第15张图片


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                                查看操作日志

git branch                             查看当前所处分支

git checkout -- file                   服务器更新文件覆盖本地的文件


tar zxvf  /root/jdk-8u172-linux-x64.tar.gz  &&  tar zxvf /root/apache-maven-3.0.3-bin.tar.gz  

mv  /root/jdk1.8.0_172 /usr/local/java  && mv /root/apache-maven-3.0.3 /usr/local/maven

rpm -ivh /root/jenkins-2.191-1.1.noarch.rpm

cp -pv  /etc/profile /etc/profile.bak

echo  "export JAVA_HOME=/usr/local/java"  >> /etc/profile

echo  "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile

echo  "export MAVEN_HOME=/usr/local/maven"  >> /etc/profile

echo  "export PATH=$PATH:$MAVEN_HOME/bin"  >> /etc/profile

source /etc/profile

ln -s /usr/local/java/bin/java /usr/bin/  &&   ln -s /usr/local/maven/bin/mvn /usr/bin/

java -version && mvn --version

java version "1.8.0_172"

Apache Maven 3.5.0 


cp -pv /etc/init.d/jenkins /etc/init.d/jenkins.bak

cp -pv /etc/sysconfig/jenkins /etc/sysconfig/jenkins.bak

cat /etc/sysconfig/jenkins | grep USER

JENKINS_USER="root"    修改root默认为jenkins  以免出现权限不足的情况

JENKINS_PORT="8088"   默认为8080 防止端口冲突

cat /etc/init.d/jenkins | grep  /usr/local/java

/usr/local/java/bin/java     修改默认配置文件java路径 

systemctl  jenkins restart  && chkconfig --level  35 jenkins on


netstat -tuplna | grep 8088

tcp6       0      0 :::8088                 :::*                    LISTEN      2327/java           

tcp6       0      0 192.168.2.117:8088      192.168.2.112:57000     TIME_WAIT   -                             

ps -ef | grep 8088

root      2327     1  1 13:04 ?        00:02:32 /usr/local/java/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8088 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20

root     27936  2151  0 16:49 pts/0    00:00:00 grep --color=auto 8088


http://192.168.1.160:8088/

jenkins+git/gitab_第16张图片

cat /var/lib/jenkins/secrets/initialAdminPassword 

add8e0af88184a21820b07da181933ff


jenkins+git/gitab_第17张图片


jenkins+git/gitab_第18张图片


添加从节点

tar zxvf  /root/jdk-8u172-linux-x64.tar.gz       http_slave端操作

mv  /root/jdk1.8.0_172 /usr/local/java

cp -pv  /etc/profile /etc/profile.bak

echo  "export JAVA_HOME=/usr/local/java"  >> /etc/profile

echo  "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile

source /etc/profile

java -version

java version "1.8.0_172"


jenkins+git/gitab_第19张图片


2.jpg



全局工具配置

jenkins+git/gitab_第20张图片



cat /root/.ssh/id_rsa         文件为jenkins服务端私钥

-----BEGIN RSA PRIVATE KEY-----

MIIEpAIBAAKCAQEAoybDM8XR4ezsNiu8Q5I7n87E/uJJip37oE0Fch/Wz4h81J5m

WZRnKtgcsmzXYh2hPjNXb6BVTXyY9qoj+H8TktZ4OeH5mzJO3dcZWEljEJByL4wC

ELLKiJ3gDAN2pcKYENAUBLTl5Tcf4K5kWVohn441FZs7TVfesELN68NmKndJeD5M

bQmHieiTdyVHHyZxvqO/PewQ7R9gTguVl61OQGxeor5MvjY7a1+IHUxfk6ufOWzu

jenkins+git/gitab_第21张图片


jenkins配置中,点击“系统管理” → “系统设置”,下拉页面,大概在网页的最下面可以找到 “Publish Over SSH”

jenkins+git/gitab_第22张图片

秘钥文件为jenkins id_rsa的内容


jenkins+git/gitab_第23张图片

点击-testconfiguration 出现sucess 为正确配置


jenkins+git/gitab_第24张图片



2.jpg



jenkins+git/gitab_第25张图片


jenkins+git/gitab_第26张图片


jenkins+git/gitab_第27张图片


jenkins+git/gitab_第28张图片


jenkins+git/gitab_第29张图片



jenkins+git/gitab_第30张图片