Gitlab 安装部署

news2024/9/24 7:17:06

目录

1、Jenkins 结合 Gitlab 构建 CI/CD 环境

CI/CD 介绍

CI/CD 流程

Jenkins 简介

GitLab 简介

项目部署方式

CI系统的工作流程

2、搭建 GitLab

安装 GitLab

配置 GitLab

修改root密码

访问 GitLab

开机自启

3、使用 GitLab

管理 GitLab

关闭 GitLab 注册功能

设置 邮箱报警

创建一个群组

创建一个账号

在组里添加用户

4、新建仓库

创建一个项目

仓库使用说明

新建一个文件

生成公钥导入GitLab(测试失败)


1、Jenkins 结合 Gitlab 构建 CI/CD 环境

常用的构建工具如 Jenkins、Travis、Codeship、Bamboo、gitlab、GitHub、Bitbucket。

CI/CD 介绍

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。

CI/CD 的核心概念是持续集成、持续交付和持续部署。

CI/CD 主要针对在集成新代码时所引发的问题,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。

持续集成 CI

CI (CI-Continuous integration)是指持续集成,开发者在代码的开发过程中,可以频繁的(一天多次)将代码合并到主干源码仓库,并进行自动化测试。

持续交付 CD

CD (Continuous Delivery)持续交付通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后由运维团队将其部署到测试环境或生产环境中。目的就是确保尽可能减少部署新代码时所需的工作量。

持续部署 CD

CD-continuous deployment,持续部署(另一种“CD”)是指自动将开发人员更改的代码从存储库发布到生产环境,以供客户使用。它主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。持续部署以持续交付的优势为根基,实现了管道后续阶段的自动化。

CI/CD 流程

提交代码到仓库:开发者提交代码到仓库(commit)

代码测试

对代码仓库 commit 操作配置了钩子(hook),只要提交代码或者合并进主干,开始拉取代码进行代码测试。

1、代码质量测试(SonarQube)
2、代码单元测试:针对函数或模块的测试
3、集成测试:针对整体产品的某个功能的测试,又称功能测试
4、端对端测试:从用户界面直达数据库的全链路测试

构建(编译)

通过第一轮测试,代码可以交付了。交付后,就先进行构建(build)。所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS 脚本、图片)等等。

部署代码到测试环境:构建完成把产品部署到测试环境进行

测试(第二轮)

构建完成,就要进行第二轮测试。第二轮是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。所有测试以自动化为主,少数无法自动化的测试用例,就要人工跑。 需要强调的是,新版本的每一个更新点都必须测试到。如果测试的覆盖率不高, 进入后面的部署阶段后,很可能会出现严重的问题。

部署代码到生产环境

通过了第二轮测试,当前代码就是一个可以直接部署的版本了。将这个版本的所有文件发布到生产服务器。 部署工具有 shell 脚本,Ansible,Chef,Puppet 等。

回滚

一旦当前版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法就是修改一下符号链接,指向上一个版本的目录。

Jenkins 简介

网方网站:https://jenkins.io/zh/

Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成、交付、部署的基于 web 界面的平台,用于自动化各种任务,包括构建、测试和部署软件。

GitLab 简介

gitlab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。

GitLab 拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管 理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

项目部署方式

手动部署

自动部署

搭建上述持续集成环境可以把整个构建、部署过程自动化,很大程度上减轻工作量。对于程序员的日常开发来说不会造成任何额外负担,自己把代码提交上去之后,服务器上运行的马上就是最新版本。

CI系统的工作流程

系统的工作流程大概分为以下几步:

开发者将新版本 push 到 git server (Gitlab)。

Gitlab 随后触发 jenkins master 结点进行一次 build。(通过 web hook 或者定时检测)

jenkins master结点将这个build任务分配给若干个注册的slave结点中的一个,这个 slave 结点根据一个事先设置好的脚本进行 build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给 jenkins 来做。

我们在 build 中要进行编译,这里使用了分布式编译器 distcc 来加快编译速度。

注: jenkins 的工作原理是先将源代码从 gitlab 中拷贝一份到本地,然后根据设置的脚本进行 build。我们可以看出,整个系统的关键就是那个 build 脚本,用来告诉 jenkins 在一次集成中需要执行的任务。

2、搭建 GitLab

主机

IP

角色

安装软件

node-15

192.168.137.115

GitLab

GitLab

node-16

192.168.137.116

Jenkins

Jenkins、Apache

node-17

192.168.137.117

Apache

Apache

注意:gitlab 主机内存给大一点,最好是 4G,不然后面会报错关闭所有主机的防火墙和 selinux

安装 GitLab
# 安装依赖环境
yum install -y curl policycoreutils \
openssh-server openssh-clients postfix policycoreutils-python cronie

# 启动 Postfix
systemctl enable postfix 
systemctl start postfix

# 下载GitLab
wget \
http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.3.2-ce.0.el7.x86_64.rpm
# 安装GitLab
rpm -ivh gitlab-ce-15.3.2-ce.0.el7.x86_64.rpm

配置 GitLab
# 配置 gitlab 访问地址:修改 gitlab 外部访问地址
vim /etc/gitlab/gitlab.rb 

# 重置 GitLab
# 重新配置应用程序。修改了 gitlab 服务配置文件后,都需要执行一下这个命令。
# 让各个服务的配置文件,重新加载一下配置文件。这里等个 4 分钟左右。
gitlab-ctl reconfigure 

# 查看服务器状态
gitlab-ctl status

查看登陆密码

# 查看登陆密码
cat /etc/gitlab/initial_root_password
Password: e2pmqEAMFfiptvpfE6W8iZr98Kgn7nJ+UUUM6DauQ04=

修改root密码

默认密码有效期 24 小时, 修改 root 密码为 12345678

gitlab-rake "gitlab:password:reset"

访问 GitLab
# 查看端口: 默认使用 nginx 做为 web 界面。
netstat -antup | grep 80

注意:如果后期 web 界面访问时,总报 502,要把防火墙清空规则,另外内存要大于 4G,不然以后内存不足,也报 502

开机自启
systemctl enable gitlab-runsvdir 
systemctl status gitlab-runsvdir
3、使用 GitLab
管理 GitLab

主配置文件: /etc/gitlab/gitlab.rb #可以自定义一些邮件服务等

日志地址: /var/log/gitlab/ #对应各服务

服务地址: /var/opt/gitlab/ #对应各服务的主目录

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

gitlab-ctl stop

关闭 gitlab

gitlab-ctl start

启动 gitlab

gitlab-ctl restart

重启 gitlab

gitlab-ctl reconfigure

重置配置,#不要乱用

gitlab-ctl tail

查看所有日志

gitlab-ctl tail nginx/gitlab_access.log

查看 nginx 访问日志

关闭 GitLab 注册功能

设置 邮箱报警

linux 运维最注重的一点就是告警邮件,所以 Gitlab 一样提供了邮件发送的功能。 使用默认设置可能收不到邮件,这里使用第三方 SMTP 服务器。

官网各种邮箱配置实例: https://docs.gitlab.com/omnibus/settings/smtp.html

修改配置文件:

# 这里我配置的是新浪邮箱 SMTP: c8a8ec186ad388cb
vim /etc/gitlab/gitlab.rb #在第 108 行后添加以下内容
gitlab_rails['smtp_enable'] = true 
gitlab_rails['smtp_address'] = "smtp.sina.com" 
gitlab_rails['smtp_port'] = 465 
gitlab_rails['smtp_user_name'] = "codelemon@sina.com" 
gitlab_rails['smtp_password'] = "c8a8ec186ad388cb" # 授权码(8e0dc7bd66fba002)
gitlab_rails['smtp_authentication'] = "login" 
gitlab_rails['smtp_enable_starttls_auto'] = true 
gitlab_rails['smtp_tls'] = true 
gitlab_rails['gitlab_email_enabled'] = true 
gitlab_rails['gitlab_email_display_name'] = 'gitlab' 
gitlab_rails['gitlab_email_from'] = 'codelemon@sina.com' 
gitlab_rails['gitlab_email_reply_to'] = 'codelemon@sina.com'
# 重载 gitlab 
gitlab-ctl reconfigure


# 登陆控制台发送测试邮件 
gitlab-rails console #登陆控制台,注意写你自己的邮箱
irb(main):002:0> Notify.test_email('codelemon@sina.com','test','test').deliver_now

创建一个群组

创建一个账号

在组里添加用户

4、新建仓库
创建一个项目

可以在群组里创建项目,也可以创建私有的项目,然后使用,使用方法跟 github 一样。

仓库使用说明

跟使用 github 方法一样。需要注意没有在账号中新建 SSH 公钥之前将无法通过 SSH 拉取或推送代码。Gitlab 自己也支持 CI/CD,这里我们采用 jenkins 来做 CI/CD。

新建一个文件

生成公钥导入GitLab(测试失败)

在本地打开Git Bash

TortoiseGit 使用扩展名为 ppk 的密钥,而不是 ssh-keygen 生成的 rsa 密钥。使用命令 ssh-keygen -C "邮箱地址" -t rsa 产生的密钥在 TortoiseGit 中不能用。

而基于 git 的开发必须要用到 rsa 密钥,因此需要用到 TortoiseGit 的 putty key generator 工具来生成既适用于 git 的 rsa 密钥也适用于 TortoiseGit 的 ppk 密钥。

运行 TortoiseGit 开始菜单中的 puttygen 程序

点击“Generate”按钮,鼠标在上图的空白地方来回移动直到进度条完毕,就会自动生一个随机的 key

保存公钥

保存私钥:点击上图中的“Save private key”按钮,将生成的 key 保存为适用于 TortoiseGit 的私钥(扩展名为.ppk)

把私钥加入 TortoiseGit,在开始菜单打开Pageant

⑥ 把公钥导入Gitlab

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1490087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git分支补充

我们在合并分支时并不总是一帆风顺,有些时候也会遇到“合并冲突”的问题。 下面我们来还原一下: 创建分支dev $ git checkout -b dev 切换到一个新分支 dev $ git branch * devmaster我们将 text.txt 内容改为 欢迎关注CSDNkeduo并将修改的内容提交到 d…

【Oracle Database】如何远程连接服务器、创建用户、从本地dmp导入表

C:\Users\test>imp test/123456ip/orcl:1521 fileE:\db.dmp tablestable1,table2Import: Release 11.2.0.3.0 - Production on 星期一 3月 4 12:59:09 2024Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.IMP-00058: 遇到 ORACLE 错误 1263…

EdgeX Foundry 安全模式安装部署

文章目录 一、安装准备1.官方文档2. 克隆服务器3.安装 Docker4.安装 docker-compose 二、安装部署1.docker-comepse2.启动 EdgeX Foundry3.访问 UI3.1. consul3.2. EdgeX Console EdgeX Foundry # EdgeX Foundryhttps://iothub.org.cn/docs/edgex/ https://iothub.org.cn/docs…

CUDA学习笔记02:测试程序hello world

参考资料 Win10下在VS2019中配置使用CUDA进行加速的C项目 (配置.h文件,.dll以及.lib文件等)_vs2019 cuda-CSDN博客 配置流程 1. 新建一个一般的项目 2. 项目建好后,在项目里添加.cu测试文件 测试的.cu文件命名为cuda_utils.cu&…

bert 相似度任务训练简单版本,faiss 寻找相似 topk

目录 任务 代码 train.py predit.py faiss 最相似的 topk 数 任务 使用 bert-base-chinese 训练相似度任务,参考:微调BERT模型实现相似性判断 - 知乎 参考他上面代码,他使用的是 BertForNextSentencePrediction 模型,Bert…

在idea中用模板骨架初始创建maven管理的web项目时没有src有关的目录的解决方案

一.问题如下 二.解决方法 首先关闭当前项目,接着修改全局设置,重新创建项目 在VM Options中添加"-DarchetypeCataloginternal",点击ok保存 点击创建,如果创建成功没报错且有src,就ok了。 当然如果出现以下…

【C++】十大排序算法之 插入排序 希尔排序

本次介绍内容参考自:十大经典排序算法(C实现) - fengMisaka - 博客园 (cnblogs.com) 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序…

大厂报价查询系统性能优化之道!

0 前言 机票查询系统,日均亿级流量,要求高吞吐,低延迟架构设计。提升缓存的效率以及实时计算模块长尾延迟,成为制约机票查询系统性能关键。本文介绍机票查询系统在缓存和实时计算两个领域的架构提升。 1 机票搜索服务概述 1.1 …

C++的类与对象(二)

目录 结构体内存对其规则 相关面试题 this指针 相关面试题 结构体内存对其规则 1、第一个成员在与结构体偏移量为0的地址处 2、其它成员变量要对齐到某个数字(对齐数)的整数倍的地址处 对齐数 编译器默认对齐数与该成员大小的较小值(v…

学习记录12-单片机代码几种常见命名规则

良好的编程习惯,决定了今后代码的质量。 有很多人平时不注意自己的代码规范,函数和变量命命随心所欲,造成一个星期就不认识自己的代码,于是今天就来分享一点关于软件代码常见的几种命名规则。 匈牙利命名法 匈牙利命名法广泛应用…

RBAC实战

一、权限控制概述 1.1、访问控制目的 在实际的组织中,为了完成组织的业务工作,需要在组织内部设置不同的职位,职位既表示一种业务分工,又表示一种责任与权利。根据业务分工的需要,职位被划分给不同群体,各…

C++:Vector的模拟实现

创作不易,感谢三连 !! 一,前言 在学习string类的时候,我们可能会发现遍历的话下标访问特别香,比迭代器用的舒服,但是下标其实只能是支持连续的空间,他的使用是非常具有局限性的&am…

迷不迷糊?前后端、三层架构和MVC傻傻分不清

现在的项目都讲究前后端分离,那到底什么是前后端,前后端和以前的MVC以及三层架构啥关系呢?今天就这个问题展开一下,方面后面的学习,因为前面讲的jsp、servlet和javabean根据实例,基本上有一个框架的理解了&…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘…

【如何在Docker中,修改已经挂载的卷(Volume)】

曾梦想执剑走天涯,我是程序猿【AK】 提示:添加投票!!! 目录 简述概要知识图谱 简述概要 如何在Docker中,修改已经挂载的卷(Volume) 知识图谱 在Docker中,修改已经挂载…

消息队列-kafka-消息发送流程(源码跟踪)

官方网址 源码:https://kafka.apache.org/downloads 快速开始:https://kafka.apache.org/documentation/#gettingStarted springcloud整合 发送消息流程 主线程:主线程只负责组织消息,如果是同步发送会阻塞,如果是异…

安装Proxmox VE虚拟机平台

PVE是专业的虚拟机平台,可以利用它安装操作系统,如:Win、Linux、Mac、群晖等。 1. 下载镜像 访问PVE官网,下载最新的PVE镜像。 https://www.proxmox.com/en/downloads 2. 下载balenaEtcher balenaEtcher用于将镜像文件&#…

【Vue3】3-6 : 仿ElementPlus框架的el-button按钮组件实

文章目录 前言 本节内容实现需求完整代码如下: 前言 上节,我们学习了 slot插槽,组件内容的分发处理 本节内容 本小节利用前面学习的组件通信知识,来完成一个仿Element Plus框架的el-button按钮组件实现。 仿造的地址:uhttps://…

docker pull 拉取失败,设置docker国内镜像

遇到的问题 最近在拉取nginx时,显示如下错误:Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled (Client.Timeout exceeded while awaiting headers)。 这个的问题是拉取镜像超时,通过检索…

基于Golang客户端实现Nacos服务注册发现和配置管理

基于Golang客户端实现Nacos服务注册发现和配置管理 背景 最近需要把Golang实现的一个web项目集成到基于Spring Cloud Alibaba的微服务体系中,走Spring Cloud Gateway网关路由实现统一的鉴权入口。 软件版本 组件名称组件版本Nacos2.2.0Go1.21.0Ginv1.9.1Nacos-s…