DevOps / GitLab

GitLab部署和实战教程

浅时光 · 2月8日 · 2020年 8484次已读

1、GitLab介绍

  • gitlab是一个开源分布式版本控制系统
  • 来源(Source):https://www.dqzboy.com发语言:Ruby
  • 功能:管理项目源代码、版本控制、代码复用与查找

2、GitLab与Github的不同

  • Github分布式在线代码托管仓库,个人版本可直接在线免费使用,企业版本收费且需要服务器安装
  • GitLab分布式在线代码仓库托管仓库软件,分社区免费版和企业收费版本,都需要服务器安装

3、GitLab优势与应用场景

  • 开源免费,适合中小型公司将代码放置在该系统中
  • 差异化的版本管理,离线同步以及强大单独分支管理功能
  • 便捷的GUI操作界面以及强大的账户权限管理功能
  • 集成度很高,能够集成绝大多数的开发工具
  • 支持内置HA,保证在高并发下仍旧实现高可用性

4、GitLab主要服务过程

  • Nginx静态web服务器
  • GitLab-workhorse轻量级反向代理服务器
  • GitLab-shell用于处理Git命令和修改authorized keys列表
  • Logrotate日志文件管理工具
  • Postgresql数据库
  • Redis缓存服务器

5、GitLab工程流程

  1. 创建并克隆项目
  2. 创建项目某Featuer分支
  3. 编写代码并提交至该分支
  4. 推送该项目分支至远程GitLab服务器
  5. 进行代码检查并提交master主分支进行合并申请
  6. 项目领导审查代码并确认合并申请

6、GitLab安装部署

6.1、环境准备

6.1.1:主机名更改

[[email protected] ~]# hostnamectl set-hostname gitlab

6.1.2:防火墙配置

#放开端口
[[email protected] ~]# firewall-cmd --permanent --add-service=http

#查看放开的端口
[[email protected] ~]# firewall-cmd --zone=public --list-ports

#放开端口
[[email protected] ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp

#使其规则生效
[[email protected] ~]# firewall-cmd --reload

#查看服务是否存在
[[email protected] ~]# firewall-cmd --list-services

6.1.3:关闭SELINUX

[[email protected] ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[[email protected] ~]# setenforce 0
[[email protected] ~]# getenforce 
Permissive

6.1.4:设置epel源、安装基本操作命令

[[email protected] ~]# yum -y install wget
[[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[[email protected] ~]# yum install -y net-tools vim lrzsz tree screen lsof tcpdump ntpdate

6.1.5:时间同步

[[email protected] ~]# cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime 
[[email protected] ~]# echo "*/5 * * * *  ntpdate time1.aliyun.com &> /dev/null && hwclock -w" >> /var/spool/cron/root
[[email protected] ~]# systemctl  restart crond

6.2、下载软件

  • ce为社区办,ee为企业版

6.3、安装部署

[[email protected] ~]# mkdir /soft
[[email protected] ~]# cd /soft/
[[email protected] soft]# rz -E

#先安装依赖
[[email protected] soft]# yum install -y curl policycoreutils-python openssh-server
[[email protected] soft]# rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
GitLab部署和实战教程-浅时光博客

6.3.1:目录说明

/opt/gitlab		 #默认gitlab程序安装路径
/var/opt/gitlab/	#gitlab数据目录
/var/opt/gitlab/git-data/  #项目存储目录
/var/opt/gitlab/git-data/repositories   #代码存放路径

6.3.2:常用命令

gitlab-ctl status	#查看目前gitlab所有服务
gitlab-ctl stop		#停止gitlab服务
gitlab-ctl stop nginx	#单独停止某一个服务
gitlab-ctl tail		#查看所有服务日志

6.4、修改配置

[[email protected] ~]# vim /etc/gitlab/gitlab.rb
GitLab部署和实战教程-浅时光博客
#重载配置,需要等待
[[email protected] ~]# gitlab-ctl reconfigure
GitLab部署和实战教程-浅时光博客

6.5、检查服务

#默认端口80
[[email protected] ~]# ss -tnlp | grep 80
[[email protected] ~]# gitlab-ctl status
GitLab部署和实战教程-浅时光博客

6.6、GitLab汉化

6.6.1:下载汉化补丁

[[email protected]tlab ~]# git clone https://gitlab.com/xhang/gitlab.git
  • 如果克隆下载很慢,那么直接gitlab下载安装包上传至服务器
GitLab部署和实战教程-浅时光博客

6.6.2:解压备份

[[email protected] soft]# tar -xf gitlab-12-0-stable-zh.tar.gz

#查看版本
[[email protected] soft]# cat gitlab-12-0-stable-zh/VERSION 
12.0.3

#备份原文件,汉化失败可及时恢复
[[email protected] ~]# mkdir /gitlab_bak
[[email protected] ~]# cp -r /opt/gitlab/embedded/service/gitlab-rails/* /gitlab_bak/

6.6.3:修改别名

  • 默认cp -i
  • 拷贝完汉化包之后去掉注释
# 注释掉
[[email protected] ~]# vim /root/.bashrc
GitLab部署和实战教程-浅时光博客
# 切换下用户
[[email protected] ~]# su

6.6.4:停止服务

[[email protected] ~]# gitlab-ctl stop

6.6.5:拷贝汉化包

# 拷贝汉化包文件
[[email protected] ~]# cp -rf /soft/gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/

6.6.6:重新配置GitLab

[[email protected] ~]# gitlab-ctl reconfigure

# 需要等待一会

6.6.7:重启GitLab

[[email protected] ~]# gitlab-ctl restart

6.7、访问页面

  • 直接输入IP即可
  • 首次访问时,您将被重定向到密码重置页面。提供初始管理员帐户的密码,您将被重定向回登录页面。使用默认帐户的用户名登录。root
  • 汉化后的页面如下图
GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客
  • 注:gitlab访问监听端口为80,如果访问gitlab一直未502错误码,先检查80端口是否被占用

7、GitLab操作使用

7.1、创建代码库组

  • 先创建组方便后面进行管理

7.1.1:点击创建一个群组

GitLab部署和实战教程-浅时光博客

7.1.2:定义组

GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客

7.2、在该组创建项目

  • 或者通过如下方式建立
GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客

7.3、添加ssh公钥

GitLab部署和实战教程-浅时光博客

7.3.1:创建密钥对

[[email protected] ~]# ssh-keygen -t rsa
[[email protected] ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEP4cs5ypik4xAdTgJqROTO0Qgm43wY90hXoBXAvN/LMGGB3gSvPJjMIkrx9j+lZyiFxdHqV3SV2j+3G83ve+DLPzuGVdqNgE86i7h6+ybWsAhA+5EvlSuUQFBfDtEyEyF9QUViCnn2iTT5A6VHT64Ly43KCQSdQDmCdMOVJyekH117b6jXVKinLHROVKtO58i2GtsSJb8M5xyBd9MuF5TtVNKtY1ZFaHE3qbwnfpTFch3F/7Yw7kbiy9Y9r+OGQL2BhNzdKjGtMs1pIoj97xwVoitVcBNuA5+rIqFOFrD3O9KbE8vfuznUOKkYGaVdTF/Nz/iEYJEyX4WJaAqOdJv [email protected]

7.3.2:添加公钥至gitlab

7.3.2.1:选择设置
GitLab部署和实战教程-浅时光博客
7.3.2.2:选择SSH Keys
GitLab部署和实战教程-浅时光博客
7.3.2.3:添加公钥
  • 将上面服务器生成的密钥对中公钥添加至如下图所示的位置
GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客

7.3.3:返回项目

GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客

7.4:命令行说明

  • 您还可以使用以下说明从计算机上载现有文件。

Git 全局设置

# 第一次使用Git
git config --global user.name "Administrator"      #配置用户名
git config --global user.email "[email protected]"  #配置用户邮箱

# 示例:
[[email protected] ~]# git config --global user.name "dqz"
[[email protected] ~]# git config --global user.email "[email protected]"

创建新存储库

git clone [email protected]:webapp/webapp.git   #克隆当前服务器上的仓库到本地
cd webapp   #进入到该仓库
touch README.md	#创建代码
git add README.md		#添加到缓冲区
git commit -m "add README"	#提交到仓库
git push -u origin master    # 推送当前分支到远端仓库

# 示例:
[[email protected] ~]# git clone [email protected]:webapp/webapp.git
正克隆到 'webapp'...
The authenticity of host '192.168.66.30 (192.168.66.30)' can't be established.
ECDSA key fingerprint is SHA256:GekNYo0EMfZmAbn4DNBgmlQuHIi9lnRzDOyblNHZGv0.
ECDSA key fingerprint is MD5:93:8f:0c:56:33:af:e8:8b:91:05:8b:77:ed:bd:c2:a7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.66.30' (ECDSA) to the list of known hosts.
warning: 您似乎克隆了一个空版本库。

[[email protected] ~]# cd webapp/
[[email protected] webapp]# touch README.md

[[email protected] webapp]# git add README.md 

[[email protected] webapp]# git commit -m "add README"
[master(根提交) 0b4c1c1] add README
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md
[[email protected] webapp]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:webapp/webapp.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

推送现有文件夹

cd existing_folder	#进入到一个目录下
git init	#将该目录作为新的git仓库
git remote add origin [email protected]:webapp/webapp.git  #添加远程仓库,并取一个简短的名称
git add .  #提交工作区所有文件到暂存区
git commit -m "Initial commit"   #将暂存区中的文件提交到本地仓库中,即打上新版本
git push -u origin master   # 推送当前分支到远端仓库

推送现有的 Git 存储库

cd existing_repo
git remote rename origin old-origin
git remote add origin [email protected]:webapp/webapp.git
git push -u origin --all
git push -u origin --tags

8、GitLab外观配置

GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客
来源(Source):https://www.dqzboy.com 来源(Source):https://www.dqzboy.com
GitLab部署和实战教程-浅时光博客
  • 图表仅支持1MB大小的.png .ico文件
GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客
  • 预览
GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客
  • 注册限制
GitLab部署和实战教程-浅时光博客

9、GitLab与LDAP认证

9.1:前提工作

  • LDAP管理员账号创建

9.2:配置GitLab

[[email protected] ~]# vim /etc/gitlab/gitlab.rb
289 gitlab_rails['ldap_enabled'] = true
 290 
 291 ###! **remember to close this block with 'EOS' below**
 292 gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
 293    main: # 'main' is the GitLab 'provider ID' of this LDAP server
 294      label: 'LDAP'
 295      host: 'LDAP服务器IP'
 296      port: 389
 297      uid: 'sAMAccountName'
 298      bind_dn: 'LDAP账号'
 299      password: 'LDAP密码'
 300      encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
 301 #     verify_certificates: true
 302 #     smartcard_auth: false
 303      active_directory: true
 304      allow_username_or_email_login: true
 305 #     lowercase_usernames: false
 306      block_auto_created_users: false
 307      base: 'dc=LDAP_dc地址,dc=com'
 308      user_filter: ''
  • 配置参数说明:
    host:ldap服务器地址
    port:ldap服务端口
    uid:以哪个属性作为验证属性,可以为uid、cn等,我们使用uid
    method:如果开启了tls或ssl则填写对应的tls或ssl,都没有就填写plain
    bind_dn:search搜索账号信息的用户完整bind(需要一个有read权限的账号验证通过后搜索用户输入的用户名是否存在)
    password:bind_dn用户的密码,bind_dn和password两个参数登录ldap服务器搜索用户
    active_directory:LDAP服务是否是windows的AD,我们是用的openldap,这里写false
    allow_username_or_email_login:是否允许用户名或者邮箱认证,如果是则用户输入用户名或邮箱都可
    base:从哪个位置搜索用户,例如允许登录gitlab的用户都在ou gitlab里,name这里可以写ou=gitlab,dc=domain,dc=com
    filter:添加过滤属性,例如只过滤employeeType为developer的用户进行认证(employeeType=developer)

9.3:重载GitLab配置

[[email protected] ~]# gitlab-ctl reconfigure

9.4:获取用户列表

[[email protected] ~]# gitlab-rake gitlab:ldap:check
来源(Source):https://www.dqzboy.com

9.5:重启GitLab

[[email protected] ~]# gitlab-ctl restart

9.6:访问GitLab

GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客
GitLab部署和实战教程-浅时光博客
0 条回应
    本站已安全运行: | 耗时 0.356 秒 | 查询 80 次 | 内存 19.59 MB