Gitlab Server部署及代码提交处理流程


前言

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 用来进行对项目的管理,而Github同样可以实现版本控制,为什么不用更受欢迎的GitHub呢?

二者在操作上基本相同,功能与底层实现上也差不多,但如果你用GitHub,即便使用私有库,你的代码(存储在GitHub的服务器中)仍然掌握在别人手中(运营GitHub公司,目前是微软),对于一些对私密性要求较高的企业,这是无法忍受的。而GitLab则不同,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发。因此,本次来介绍一下Gitlab Server的部署过程及代码提交处理流程。

一、环境准备

  1. 系统版本:CentOS 7.4
  2. 关闭防火墙
  3. 关闭SELinux
  4. 初始化系统环境
  5. 开启邮件服务
  6. Gitlab版本:gitlab-ce-13.5.1

二、Gitlab Server部署

2.1 安装Gitlab

(1)安装gitlab依赖包

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

(2)开启postfix服务

[root@gitlab ~]# systemctl start postfix
[root@gitlab ~]# systemctl enable postfix

(3)添加yum源

选择添加yum源安装gitlab(根据需求配置源),这里选择阿里源。

[root@gitlab ~]# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key

(4)yum安装gitlab

gitlab安装包下载:

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el7/

[root@gitlab ~]# yum -y install gitlab-ce    # 自动安装gitlab最新版

在这里插入图片描述

(5)查看gitlab版本

[root@gitlab ~]# head -1 /opt/gitlab/version-manifest.txt
gitlab-ce 13.5.1

2.2 配置Gitlab

(1)Gitlab配置登录链接

[root@localhost ~]# vim /etc/gitlab/gitlab.rb
***
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'http://10.20.151.99'   # 没有域名,可以设置为本机IP地址
***

在这里插入图片描述

(2)Gitlab初始化

如果对Gitlab配置进行了修改,则必须要重新执行初始化操作,否则修改无效。

[root@gitlab ~]# gitlab-ctl reconfigure   
# 等待时间稍长,在13新版本中,初始化完后会自启动gitlab

在这里插入图片描述

(3)Gitlab设置HTTPS方式

如果想要以上的 https 方式正常生效使用,则需要把 letsencrypt 自动生成证书的配置打开,这样在执行重
新让配置生效命令(gitlab-ctl reconfigure)的时候会自动给域名生成免费的证书并自动在 gitlab 自带的
nginx 中加上相关的跳转配置,都是全自动的,非常方便。

letsencrypt['enable'] = true 
letsencrypt['contact_emails'] = ['caryyu@qq.com']    # 联系人的电子邮件地址

我这里由于没有域名,因此这一步没操作。

2.3 Gitlab常用管理命令

gitlab-ctl start                     # 启动所有 gitlab 组件;
gitlab-ctl stop                      # 停止所有 gitlab 组件;
gitlab-ctl restart                   # 重启所有 gitlab 组件;
gitlab-ctl status                    # 查看服务状态;
gitlab-ctl reconfigure               # 启动服务;
vim /etc/gitlab/gitlab.rb            # 修改默认的配置文件;
gitlab-ctl tail                      # 查看日志;

2.4 Gitlab发送邮件测试

[root@gitlab ~]# gitlab-rails console 
Loading production environment (Rails 4.2.10)
irb(main):001:0>  Notify.test_email('xxxx@163.com', 'sz2002', 'test').deliver_now

在这里插入图片描述

2.5 浏览器访问Gitlab

在这里插入图片描述

三、Gitlab基本操作

3.1 设置密码

第一次登陆gitlab时在主页面需要设置新密码。

在这里插入图片描述

3.2 登录Gitlab

默认登陆用户:root

在这里插入图片描述

3.3 语言设置

(1)第一步

在这里插入图片描述

(2)第二步

在这里插入图片描述

3.4 新建群组

(1)第一步,点击创建群组

在这里插入图片描述

(2)第二步,给群组起名并创建

在这里插入图片描述

(3)第三步,完成群组创建

在这里插入图片描述

(4)最后,去掉用户的自动注册功能(安全)

在这里插入图片描述

取消勾选后,保存即可:
在这里插入图片描述

四、Gitlab代码提交流程

首先来开一下开发代码提交的整个流程:

  1. PM(项目主管/项目经理)在gitlab创建任务,分配给开发人员;
  2. 开发人员领取任务后,在本地使用git clone拉取代码库;
  3. 开发人员创建开发分支(git checkout -b dev),并进行开发;
  4. 开发人员完成之后,提交到本地仓库(git commit );
  5. 开发人员在gitlab界面上申请分支合并请求(Merge request);
  6. PM在gitlab上查看提交和代码修改情况,确认无误后,确认将开发人员的分支合并到主分支(master);
  7. 开发人员在gitlab上Mark done确认开发完成,并关闭issue。这一步在提交合并请求时可以通过描述中填写"close #1"等字样,可以直接关闭issue。

4.1 Gitlab创建用户

这里的用户就是我的项目主管/项目经理以及相关的研发人员。

(1)创建用户

在这里插入图片描述

(2)设置用户

分别设置多个用户,这里仅展示一个用户的设置方法,其他用户类似。

在这里插入图片描述

按照上述方法依次创建其他用户,上面仅以一个用户来演示。

(3)将创建的用户添加到群组中

在这里插入图片描述

其他用户也是按照这种方式依次添加到群组,注意在添加的过程中指明对应成员的工作属性,如上图添加的成员为Owner,那么我其他成员就填Developer(开发)。

如果收不到邮件或不使用邮箱(这里的邮箱用来修改密码的),可进行依次编辑用户修改密码。

在这里插入图片描述

这里以一个用户为例,其他用户同样操作:

在这里插入图片描述

以上所有操作有我们运维工程师部署操作,包括账户密码的创建修改。用户和密码都创建修改好后,我们就可以将创建好的用户及密码发给开发项目经理及相关主要成员,用于登录查看。

4.2 Gitlab创建项目

创建项目这个步骤不是我们运维工程师的工作,当我们把账号交给项目项目主管/经理时,由他们来立项。比如以下由项目主管/经理登录他的账号及密码去登录Gitlab,并创建相关项目。

(1)项目主管/经理登录Gitlab

在这里插入图片描述

(2)修改初始密码

这里的初始密码就是我们在上面给设置的密码,当我们将账号密码给别人,被人登录Gitlab时,会再次提示登录者修改初始密码(为了保证安全),修改完之后再次登录即可。

在这里插入图片描述

(3)创建项目

  • 点击创建:

在这里插入图片描述

  • 创建中:

在这里插入图片描述

  • 创建完成:

在这里插入图片描述

4.3 项目需求

在项目研发前,一般会由我们的项目主管/经理创建相应的目录结构、阅读手册等。创建好后他们会推到Gitlab上,然后由我们的研发人员进行clone到本地进行各自的工作,研发人员完成任务后上传至Gitlab即可。比如这里我就以zhurongsen(我们的Owner)用户来演示如何创建项目的一些需求(包括阅读手册等)。

(1)创建账户并上传公钥

[root@database ~]# useradd zhurongsen
[root@database ~]# su zhurongsen    # 切换到普通用户
[zhurongsen@database root]$ ssh-keygen -C "xxxx@163.com"   # 生成公钥

在这里插入图片描述

[zhurongsen@database root]$ cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKnUSz3T3tXGWZnYvkP+hJ7sFN1ezclv9N3l0e/V29VuE+NpQyKHYLTY26mV8i4Ztc2oN4m2IfEFNk3s52yUb8+JeGfQiS/E4eHDaKEheS9sdtPI9ILz3kXm2aFZTrwrkltEBcuKOm/A9DRyYE+nPSQ
28iAy4nnLClT+XOiRmmMiUgBm+JsQFeB0HTlEppww75mSpkk5MQxy4X6q33c0iQY5m9VN+5pwjp1edSNARJSlcltqXDupO1qQt+OPT4nm+a/jujuVrxknOI5e45tKeXx/F0nGxL6/VIhyLntcz55+RIJFClQtocKbcwQ81exqgh22UYsQytveAFN9v0WOUR xxxx@163.com

将上面cat的公钥复制,然后粘贴到zhurongsen用户登录的Gitlab平台上,目的是为了免密。

在这里插入图片描述
在这里插入图片描述

(2)为zhurongsen用户配置git

[zhurongsen@database ~]$ git config --global user.email "xxxx@163.com"   # zhurongsen邮箱
[zhurongsen@database ~]$ git config --global user.name "zhurongsen"      # 上图中的title

(3)clone项目到本地

在这里插入图片描述

[zhurongsen@database ~]$ git clone git@10.20.151.99:rab/my-rab.git
[zhurongsen@database ~]$ ls
my-rab
[zhurongsen@database ~]$ cd my-rab/
[zhurongsen@database my-rab]$ ls
README.md

(4)创建/修改文件内容

  • 创建/修改

    [zhurongsen@database my-rab]$ vim README.md
    

    在这里插入图片描述

  • 添加到暂存区

    [zhurongsen@database my-rab]$ git add .
    [zhurongsen@database my-rab]$ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #	modified:   README.md
    #
    
  • 添加到本地仓库(.git)

    [zhurongsen@database my-rab]$ git commit -m 'README.md 第二次修改 2020.11.02'
    [master a6e9ad9] README.md 第二次修改 2020.11.02
     1 file changed, 5 insertions(+), 1 deletion(-)
    
  • 推到远程仓库(Gitlab)

    [zhurongsen@database my-rab]$ git remote -v
    origin	git@10.20.151.99:rab/my-rab.git (fetch)
    origin	git@10.20.151.99:rab/my-rab.git (push)
    
    [zhurongsen@database my-rab]$ git push -u origin master
    Counting objects: 5, done.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 424 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To git@10.20.151.99:rab/my-rab.git
       2c0551d..a6e9ad9  master -> master
    Branch master set up to track remote branch master from origin.
    

(5)回到浏览器端(刷新一下页面)

在这里插入图片描述

以上就是我们管理者对项目的一个创建,目录的结构的定义并上传至我们的Gitlab服务端,供我们相关开发人进行clone到本地,然后进行相应的代码编写、提交 。

注意一点的是:如果仅仅创建一个空目录,那是无法推到Gitlab上的,而一般在我们实际生产中,每个目录基本下都会创建一个README.md的参考文档或帮助手册。

4.4 研发过程

项目立项完成,接下来就是开发工程师们进行研发。这个时候开发工程师们拿上自己得账号密码(我们运维工程师已经创建好的将账号和密码发给了他们)在自己的机器上进行代码编写,他们会在自己得电脑上创建一个用户(这个用户就是我们提供的用户,实际上这个用户就是他们自己),然后将编写、修改的内容提交到Gitlab平台,然后通过申请合并相关分支,完成代码提交。比如这里我就以zhuxiaojie(我们的普通开发人员)用户来演示项目的开发流程。

(1)管理者创建分支(Branch)

在总的管理账号(administrator)或zhurongsen管理者(项目主管/经理)下创建相应分支。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(2)切换到普通程序员登录Gitlab

同理,第一次登录需要重新修改登录密码,和上面一样,这里省略修改新密码的步骤。

在这里插入图片描述

(3)创建账户并上传公钥

[root@database ~]# useradd zhuxiaojie
[root@database ~]# su zhuxiaojie
[zhuxiaojie@database root]$ ssh-keygen -C "xxxx@163.com"
[zhuxiaojie@database root]$ cat ~/.ssh/id_rsa.pub     # 将公钥复制粘贴到Gitlab上

在这里插入图片描述

(4)为zhuxiaojie用户配置git

[zhuxiaojie@database ~]$ git config --global user.email "xxxx@163.com"  # 邮箱地址
[zhuxiaojie@database ~]$ git config --global user.name "xxxx@163.com"   # 对应Title名

(5)clone项目到本地

本次我们以HTTP方式克隆,不过这种方式每次都是需要密码验证的。

在这里插入图片描述

[zhuxiaojie@database ~]$ git clone http://10.20.151.99/rab/my-rab.git

在这里插入图片描述

[zhuxiaojie@database ~]$ ls
my-rab

注意和SSH方式clone的对比:你会发现这里origin后面跟的是HTTP格式。这种方式不太方便的一点就是每次都需要拉取/推送都需要输入密码。

[zhuxiaojie@database my-rab]$ git remote -v
origin	http://10.20.151.99/rab/my-rab.git (fetch)
origin	http://10.20.151.99/rab/my-rab.git (push)

那如何解决呢?方法就是改成SSH格式(到这里也许你会说,那你这个HTTP的方式岂不是多此一举吗?),没错,这只不过是想告诉你我们clone的方式不只是仅限于SSH方式,HTTP也可。

[zhuxiaojie@database my-rab]$ git remote remove origin
[zhuxiaojie@database my-rab]$ git remote -v
[zhuxiaojie@database my-rab]$ git remote add sz git@10.20.151.99:/rab/my-rab.git
[zhuxiaojie@database my-rab]$ git remote -v
sz	git@10.20.151.99:/rab/my-rab.git (fetch)
sz	git@10.20.151.99:/rab/my-rab.git (push)

可以看到上面已经成功修改为SSH方式了。

(6)创建并切换到dev分支

[zhuxiaojie@database my-rab]$ git branch   # 没有dev分支
* master
[zhuxiaojie@database my-rab]$ git checkout -b dev  # 创建并切换到dev分支
Switched to a new branch 'dev'
[zhuxiaojie@database my-rab]$ git branch
* dev     # 已切换到dev分支
  master

接下来就是写代码了。

[zhuxiaojie@database my-rab]$ mkdir html
[zhuxiaojie@database my-rab]$ vim html/index.html

在这里插入图片描述

(7)代码提交

[zhuxiaojie@database my-rab]$ git commit -m '第一次提交代码'
[dev a797b63] 第一次提交代码
 1 file changed, 3 insertions(+)
 create mode 100644 html/index.html
[zhuxiaojie@database my-rab]$ git push sz dev   # 推到Gitlab上

可去我们的Gitlab上看看是否已推送

在这里插入图片描述

需要注意的是:如果有其他研发人员需要编写或修改代码时,每次都需要先pull一下,将最新的代码下载下来再进行相应操作。

(8)合并dev分支

在这里插入图片描述

在这里插入图片描述

(9)项目主管/经理会收到请求

这里登录项目主管/经理的Gitlab账号zhurongsen,通过/拒绝请求。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

合并完成后发现有问题,怎么办?可回滚:

在这里插入图片描述

(10)这时可去项目中查看master分支是否已合并完成

在这里插入图片描述

以上就是我们Gitlab平台的搭建、用户创建、项目创建、代码修改/提交、分支合并的整个项目流程。

总结

到最后我们要清楚的就是什么是 GitLab?GitLab 的作用等等。GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具。通过 GitLab 我们可以创建账户密码供研发人员登录使用,同时很方便地对项目的管理,如代码的编写、修改、回滚和提交等等。以上仅仅是比较简单的一些常见操作,很多用法还有待我们继续去学习。

<点击跳转至开头>

<think>好的,我现在需要帮助用户了解如何在GitLab CI/CD中进行部署,并提供教程和配置示例。首先,我得回顾一下用户提供的引用内容,看看里面有没有相关的信息可以整合。 用户提到了引用[1]、[2]、[3]、[4],其中引用[3]详细介绍了GitLab CI/CD的工作流程、快速开始步骤以及示例,特别是部署Spring Boot和Maven应用的部分。引用[1]和[2]则解释了CI/CD的基本概念和GitLab CI/CD的作用,而引用[4]是关于配置Docker镜像源的命令,可能在部署过程中需要用到。 首先,我应该从基础开始,解释部署的基本流程。用户需要知道如何创建.gitlab-ci.yml文件,配置Runner,以及编写部署阶段的脚本。根据引用[3],创建.gitlab-ci.yml并推送到GitLab是关键步骤,同时需要配置Runner来执行任务。 然后,考虑不同的部署目标,比如SSH服务器、Kubernetes或者云服务。例如,SSH部署可能需要配置密钥和rsync命令,而Kubernetes部署可能需要kubectl和配置文件。引用[3]中的示例部分提到了部署到Kubernetes,可以借鉴这部分内容。 另外,用户可能需要具体的配置示例。比如,部署Spring Boot应用通常涉及构建JAR包,然后通过SSH传输到服务器。这里需要确保在.gitlab-ci.yml中定义正确的阶段,如build和deploy,并正确设置环境变量,如SSH_PRIVATE_KEY和SERVER_IP。 还要注意安全性问题,比如敏感信息(私钥)应该通过GitLab的CI/CD变量来存储,而不是硬编码在文件中。引用[3]提到配置Runner时需要注册,这可能需要设置执行环境,比如Docker或Shell。 另外,引用[4]中的Docker镜像源配置可能在构建Docker镜像时有用,特别是如果部署过程中需要拉取镜像或者构建镜像的话,配置国内镜像源可以加速过程。 用户可能还想知道如何查看部署的状态,引用[3]指出可以在GitLab的Pipeline界面查看pipeline和job的状态,这需要在回答中提到。 最后,生成相关问题,可能涉及部署的其他方面,比如环境变量管理、部署回滚、不同环境的配置差异等,这些问题可以帮助用户进一步探索。</think>### GitLab CI/CD 部署教程及配置示例 #### 1. 部署流程概述 GitLab CI/CD 的部署流程通过定义 `.gitlab-ci.yml` 文件实现自动化,主要包括以下步骤: 1. **代码提交**:触发 Pipeline 执行 2. **构建阶段**:编译代码或打包应用 3. **测试阶段**:运行自动化测试 4. **部署阶段**:将构建产物发布到目标环境(如服务器、Kubernetes 集群等) 引用 GitLab CI/CD 的核心原理是“通过 YAML 文件定义 Pipeline 的各个阶段”[^3]。 --- #### 2. 基础部署配置示例 以下是一个部署到 SSH 服务器的配置示例: ```yaml stages: - build - deploy build_job: stage: build image: maven:3.8.6 script: - mvn clean package artifacts: paths: - target/*.jar deploy_job: stage: deploy image: alpine:3.16 script: - apk add openssh-client rsync - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - rsync -avz --progress target/*.jar user@server_ip:/deploy/path ``` **关键配置说明**: - `artifacts`:将构建产物传递给后续阶段 - `SSH_PRIVATE_KEY`:需在 GitLab 项目的 **Settings > CI/CD > Variables** 中配置 - 部署阶段使用轻量级 Alpine 镜像减少执行时间 --- #### 3. 部署到 Kubernetes 集群 ```yaml deploy_k8s: stage: deploy image: bitnami/kubectl:latest script: - kubectl config set-cluster my-cluster --server=$KUBE_SERVER - kubectl config set-credentials ci-user --token=$KUBE_TOKEN - kubectl apply -f deployment.yaml only: - main ``` **环境变量配置**: - `KUBE_SERVER`: Kubernetes API 地址 - `KUBE_TOKEN`: 服务账号 Token 建议通过 **Kubernetes 集成**自动配置集群连接[^3]。 --- #### 4. 部署优化技巧 1. **镜像加速**:在 Docker 构建阶段使用国内镜像源 ```yaml before_script: - echo 'registry-mirrors = ["https://mirrors.aliyun.com"]' > /etc/docker/daemon.json ``` 参考镜像加速配置方法[^4] 2. **部署回滚**:通过 `rollback` 阶段实现 ```yaml rollback_job: stage: deploy script: - kubectl rollout undo deployment/my-app when: manual ``` --- #### 5. 查看部署状态 在 GitLab 项目页面中: 1. 进入 **CI/CD > Pipelines** 查看整体状态 2. 点击具体 Job 查看部署日志 3. 通过 **Environments** 页面追踪部署历史 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值