Gitlab 安装部署

目录

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.mzph.cn/news/721012.shtml

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

相关文章

Git问题处理汇总

问题1: 出现:Permission denied (publickey).fatal: Could not read from remote repository. 原因:服务器公钥(publickey)未添加至github, 所以无法识别。因而需要获取本地电脑公钥,然后登录github账号&a…

基于SpringBoot+Apache POI的前后端分离外卖项目-苍穹外卖(十九)

数据导出 1. 工作台1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.2.1 Controller层1.2.2 Service层接口1.2.3 Service层实现类1.2.4 Mapper层 1.3 功能测试 2. Apache POI2.1 介绍2.2 入门案例2.2.1 将数据写入Excel文件2.2.2 读取Excel文件中的数据 3. 导出运营数据Excel…

交友盲盒系统PHP开源的盲盒源码

源码介绍: 交友盲盒系统是一款基于PHP开发的开源免费盲盒系统,旨在为用户提供一个充满乐趣和惊喜的社交体验。该系统具有丰富的功能和灵活的扩展性,可以轻松地满足各种线上交友、抽奖活动等场景的需求。 安装说明: PHP版本&…

iptables中的SNAT、DNAT与Firewalld

目录 引言 一、SNAT与DNAT简介 (一)SNAT 1.SNAT的工作原理 2.SNAT的应用 (二)DNAT 1.DNAT的工作原理 2.DNAT的应用 二、实现NAT转换 (一)实现SNAT 1.配置网关服务器 2.修改网关 3.设置SNAT规则…

【leetcode】删除链接的倒数第N个节点

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} head* param {number} n* return {ListNode}*/ var removeNthFromEnd fun…

Java面试题总结8:springboot

Spring Boot自动配置原理 importConfigurationSpring spi 自动配置类由各个starter提供,使用ConfigurationBean定义配置类,放到META-INF/spring.factories下 使用Spring spi扫描META-INF/Spring.factories下的配置类 如何理解Spring Boot中Starter …

04-JNI函数

上一篇:03-JNI 类型和数据结构 本章是 JNI 函数的参考章节。它提供了所有 JNI 函数的完整列表。它还介绍了 JNI 函数表的具体布局。 注意:使用 "必须 "一词来描述对 JNI 程序员的限制。例如,当你看到某个 JNI 函数必须接收一个非 N…

7款炫酷的前端动画特效分享(三)(附效果图及在线演示)

分享7款好玩的前端动画特效 其中有CSS动画、SVG动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 CSS3模仿四季交替动画 基于HTML5CSS3实现的卡通风格一年四季交替动画特效 以下效果图只能体现框架的…

超全Chat GPT论文修改指令

文献综述指令润色修改指令论文选题指令论文大指令研究理论指令论文致谢指令参考文献指令论文润色整体逻辑论文整体优化提问指令 1.文献综述指令 请你帮我写一份关于(研究主题)的文献综述。我的论文选题方向是 XXXX ,我已经找到了…

Shell编程——条件测试(五)

在shell编程中,if语句本身不执行任何判断,它实际上接受一个程序作为参数,然后执行这个程序,并依据这个程序的返回值来判断是否执行相应的语句。 程序的返回值是0,则为真,反之则为假。 目录 test命令&…

YOLOv8-Openvino-ByteTrack【CPU】

YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 注:YOLOv8和YOLOv9代码内容基本一致! 全部代码Github:https://gith…

对于网络IO的理解

网络IO理解 首先服务端将本机地址和端口bind在listensock上,再用listen()去将listensock套接字设置为listen状态,然后调用accept,进入阻塞状态。如果此时有客户端请求连接,就是第一次握手的开始。 客户端会先调用connect来申请连…

BUUCTF crypto做题记录(13)新手向

一、[MRCTF2020]vigenere 这是一道维吉尼亚密码,但由于不知道密钥,所以我们需要采用爆破的方式。Vigenere Solver | guballa.de 答案:flag{vigenere_crypto_crack_man} 二、[MRCTF2020]keyboard 之前做过一个类似的题目,用九宫格…

97 spring 中的泛型类型注入

前言 呵呵 同样是 最近同事碰到的一个问题 他不太懂 英语, 看到的说明是 缺少一个 RedisTemplate 的实例, 但是找到了一个 RedisTemplate 的实例 呵呵 和我这里 spring 版本似乎是不太一样, 错误信息 有一些差异 以下环境基于 jdk8 spring-5.0.4-RELEASE 测试用例 BeanCon…

高效备考一级数据分析师考试《CDA Level I 实操训练营》3月30日开课!

曾经报名了考试,买了教程辅导书,却因为各种原因没有坚持学习,这样的经历可能让你感到沮丧和失望。但是,失败并不代表终结,而是迈向成功的必经之路。为了帮助大家能够快速学习考试相关知识,特别为CDA LEVEL …

transformer--解码器

在编码器中实现了编码器的各种组件,其实解码器中使用的也是这些组件,如下图: 解码器组成部分: 由N个解码器层堆叠而成每个解码器层由三个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接第二个子层连…

小巧且强大,一键批量操作谁不爱?

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! 两款Office批量打印工具展现了优秀的人性化设计:其界面清晰、操作简便。这些工具支持Word、Excel、PPT等多种文档格式进行批量打印&#…

VMware虚拟机安装linux教程

CentOS7下载 下载 (centos.org)https://www.centos.org/download/新建虚拟机 选择自定义安装 这里要注意兼容性,如果是VMware12创建的虚拟机复制到VM11、10或者更低的版本会出现一不兼容的现象。如果是用VMware10创建的虚拟机在VMware12中打开则不会出现兼容性问题…

vue中使用echarts实现人体动态图

最近一直处于开发大屏的项目,在开发中遇到了一个小知识点,在大屏中如何实现人体动态图。然后看了下echarts官方文档,根据文档中的示例调整出来自己想要的效果。 根据文档上发现 series 中 type 类型设置为 象形柱形图,象形柱图是…

SpringCloud之Nacos入门与实战系列

目录 一、Nacos介绍 1.1、配置中心和注册中心的概念 1.2 Nacos 优点 二、Nacos的使用 2.1 以单机模式启动Nacos 2.2 Nacos部署方式介绍 2.3 配置数据源 2.4 开启控制台权限登录 三、配置中心的使用 3.1 创建配置信息 3.2 SpringBoot使用配置中心 四、注册中心的使用 4…