• 仓库管理系统:GitLab


    前言

    GitLabGitHubGitee 都是市面上常见的与代码托管有关的平台。2008 年上线GitHub,十年后,也就是2018年被微软收购;2011年GitLab上线;Gitee由开源中国2013年推出。

    • GitLab:是一个一体化的 DevOps 平台。提供覆盖软件全开发生命周期的管理功能。提高企业 DevOps 能力。

    • GitHub:是一个开发者平台。目前是开源项目的主要集散地。

    • Gitee:是一个代码托管平台。

    GitLab 是采取“核心开放”的开源模式(即核心代码开源,企业版代码源码可见),GitLab支持私有化部署,用户可以在各自的官方下载页面下载安装包,安装部署即可完成私有化部署。这也是GitLab 受用户欢迎的重要原因之一。

    安装GitLab

    GitLab分为社区版(CE)和企业版(EE),本文主要以社区版进行讲解(企业版不免费,懂得都懂)。

    我们可以通过两种方式去下载GitLab

    在这里插入图片描述

    在这里插入图片描述

    Linux安装

    我们可以通过先下载到本地的方式再上传到服务器或者通过wget命令下载。

    wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.4.2-ce.0.el7.x86_64.rpm
    
    • 1

    下载完成后,开始安装(RPMRedHat Package ManagerRedHat软件包管理工具)用于管理Linux下软件包的软件,RPM 有五种操作模式,分别为:安装、卸载、升级、查询和验证)。

    使用命令rpm -ivh *.rpm进行安装,-ivh命令表示显示安装的信息和进度。

    rpm -ivh gitlab-ce-15.4.0-ce.0.el7.x86_64.rpm
    
    • 1

    你可能会遇到缺少依赖的错误,就像这样。

    在这里插入图片描述

    我们使用yum命令去安装这两个所需的依赖。

    yum install openssh-server policycoreutils-python -y
    
    • 1

    在这里插入图片描述
    然后我们再执行安装命令

    rpm -ivh gitlab-ce-15.4.0-ce.0.el7.x86_64.rpm
    
    • 1

    当出现如下标志时,说明安装完成。

    在这里插入图片描述
    我们可以再/etc/gitlab目录下看到配置文件。

    在这里插入图片描述

    接来下我们修改配置文件中的访问地址。

    vim gitlab.rb
    
    • 1

    再文件中找到external_url所在位置,将external_url 'http://gitlab.example.com'修改为自己的服务器IP地址。

    在这里插入图片描述
    保存后,执行gitlab-ctl reconfigure命令(重新加载配置文件),第一次执行此命令等待时间较久,正在进行初始化操作,当看到gitlab Reconfigured表示成功。
    在这里插入图片描述

    卡顿解决

    如果你的内存只有2G(4GB RAM 是所需的最小内存大小,最多支持 500 个用户;8GB 内存支持多达 1000 个用户),你就会发现,你的命令会变得特别的卡顿,通过命令free -m查看内存大小,发现可用运行内存非常少。
    在这里插入图片描述
    如果你想解决这个问题,先查看gitlab的进程有哪些,执行ps -aux|grep gitlab
    在这里插入图片描述
    然后把第一个进程杀掉,比如图片中进程号为18239,执行kill -9 18239命令,杀掉进程,然后赶快执行(如果不快点执行可能会重新开启这个进程)gitlab停止服务命令gitlab-ctl stop
    在这里插入图片描述
    停止后,再次查看可用运行内存,恢复正常。
    在这里插入图片描述
    /etc/gitlab/目录下gitlab.rb文件数值修改

    在可用 RAM 小于 4GB 的内存受限环境中,请考虑禁用 Puma 群集模式。与默认设置的群集模式不同,只有一个 Puma 进程将为应用程序提供服务。

     puma['worker_processes'] = 0 #工作进程
    
    • 1

    更改内存限制设置,内存使用量会随着时间的推移而增加。

     puma['per_worker_max_memory_mb'] = 1024
    
    • 1

    如果你觉得数据库缓存太大,可以设置小点。

     postgresql['shared_buffers'] = "60MB" #数据库缓存
    
    • 1

    然后重新加载配置文件。

    gitlab-ctl reconfigure
    
    • 1

    重启服务。

    gitlab-ctl restart
    
    • 1

    其它常用命令

    #重新加载配置
    gitlab-ctl reconfigure 
    #启动
    gitlab-ctl start 
    #关闭
    gitlab-ctl stop 
    #重启
    gitlab-ctl restart 
    #日志
    gitlab-ctl tail
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    访问

    在浏览器输入,配置external_url的地址。

    如果足够幸运的话,你也会报502的错误。

    在这里插入图片描述

    根据网上给的答案,要么端口被占用,要么就是内存不够。服务器也没几个应用,那就是内存的原因。我们使用swap分区解决这个问题。

    Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。

    • 查看Swap分区
    cat /proc/swaps
    
    • 1

    在这里插入图片描述
    可以看到没有分区。

    • 创建Swap分区文件,这里创建一个4G大小的分区
    dd if=/dev/zero of=/data/swap bs=1M count=4096
    
    • 1

    在这里插入图片描述

    简单介绍下每个语句的含义:

    1. if=/dev/zero:表示指定源文件
    2. of=/data/swap:表示指定目的文件,可以自己去设定目标文件路径。
    3. bs=1M:同时设置读入/写出的“块”大小。
    4. count=4096:表示拷贝多少个“块”

    bs * count 为拷贝的文件大小,即Swap分区大小。

    • 设置交换空间
    mkswap /data/swap
    
    • 1
    • 激活交换分区
    swapon /data/swap
    
    • 1
    • 设置开机自动挂载Swap分区
    echo "/data/swap swap swap defaults 0 0" >> /etc/fstab
    
    • 1
    • 查看分区是否启用

    然后我们cat /proc/swaps命令或者free命令查看分区是否启用。

    在这里插入图片描述

    • 重新刷新Gitlab,登入。

    在这里插入图片描述
    初始用户名是root,初始密码在/etc/gitlab/initial_root_password下。

    在这里插入图片描述
    注意:此文件将在24小时后的第一次重新配置运行中自动删除。

    登录成功后,你将看到首页。

    在这里插入图片描述
    可以看到已存在一个系统项目,这个项目是自动生成的,并帮助监控这个GitLab实例。学习更多的知识。

    使用

    我们可以看到首页的最上方工具栏有很多的操作(每个Gitlab版本不同,所以可能看到的位置不同,本文使用版本15.4),下面争对这些用途进行一个讲解。
    在这里插入图片描述

    帮助

    在最右侧有个问号的下拉按钮,里面包含了:当前版本、新功能介绍、帮助、支持、反馈等功能。

    在这里插入图片描述
    (1)What’s new(新功能):可以看到这个版本的一些新功能介绍。

    在这里插入图片描述
    (2)Help(帮助):当前版本的帮助文档。

    全方面帮助你了解GitLab非常重要,如果有不会的地方多看看这里。
    在这里插入图片描述
    (3)Support(支持):从官网获取帮助。
    (4)Community forum(社区论坛):再社区论坛学习。
    (5)KeyBoard shortcuts(快捷键)GitLab中所用的快捷键。
    (6)Submit feedback(反馈):向GitLab反馈你的问题。
    (7)Contribute to GitLab(贡献):成为GitLab贡献者。为开发、文档、翻译和设计做出贡献。

    创建

    我们先从创建讲起,再工具栏的最右侧有一个创建下拉按钮,创建主要分为:创建项目、创建组、创建片段

    在这里插入图片描述
    可以创建的地方有很多,比如首页就有一个New project按钮可以创建项目
    在这里插入图片描述

    创建项目

    点击任意位置的New project,跳转新页面,有三种选项:创建空白项目、创建模版项目、导入项目
    在这里插入图片描述

    (1)Create blank project(创建空白项目):一个空白的项目

    输入项目名—>选择项目组—>设置可见级别—>项目配置(可选)—>点击Create project按钮。

    Visibility Level(可见级别)有三种状态:

    • Private(私有的):必须将项目访问权限明确授予每个用户。
    • Internal(内部的):除外部用户外,任何登录用户都可以访问该项目(前提拥有这个组的权限)。如果此项目是组的一部分,则授予组成员访问权限。
    • Public(公共的):该项目无需任何身份验证即可访问。

    Project Configuration(项目配置)有两个可选项:

    • Initialize repository with a README:默认,非必填。使用 README 初始化存储库。
    • Enable Static Application Security Testing (SAST):非必填。启用静态应用程序安全测试 (SAST)。

    在这里插入图片描述
    可以再首页看到我们创建好的项目。

    在这里插入图片描述

    (2)Create from template(创建模版项目)

    你可以通过已提供的内置模版,帮助快速构建项目(不做详细讲解,自行操作)。

    在这里插入图片描述

    (3)Import project(导入项目)

    你可以从 GitHubBitbucket 或其他 GitLab 实例等外部源迁移数据(不做详细讲解,自行操作)。
    在这里插入图片描述

    创建分组

    点击任意位置的New group,跳转新页面,有两种选项:创建组、导入组

    在这里插入图片描述
    (1)Create group(创建组)

    组里面可以创建子组,组允许您跨多个项目进行管理和协作。组的成员可以访问其所有项目。

    • Group name(组名):必须以字母、数字、表情符号或下划线开头。还可以包含句点、破折号、空格和括号。

    除了组名、权限以外其他都是非必填项,这里不做详细讲解。

    在这里插入图片描述

    (2)Import group(导入组)

    从另一个 GitLab 实例迁移现有组。一共有两种导入方式:从 GitLab 的另一个实例导入组、从文件导入组。将信息填写好即可。

    在这里插入图片描述

    创建片段

    将一些你认为有用的代码片段功能,发布出来。填写信息,勾选查看权限,供团队成员参考。
    在这里插入图片描述

    新用户

    你的团队会加入新的成员,有两种方式注册注册用户,一种用户自己注册,另一种提供邮箱由管理员注册。

    (1)用户自己注册

    访问公司提供的首页后,点击Register now链接。
    在这里插入图片描述
    填写好你的姓名、邮箱、密码等信息,点击提交按钮,等待管理员审核。
    在这里插入图片描述
    管理员登入首页,点击左侧隐藏列表,找到Admin选项。

    在这里插入图片描述
    进入管理界面,点击Overview—>User菜单,再页面中选择Pending approval标签,进行用户审核或者拒绝。

    在这里插入图片描述

    (2)提供邮箱由管理员注册

    管理员再管理页面中,点击Overview—>User菜单,左侧点击New user按钮。
    在这里插入图片描述
    管理员填写好姓名、用户名、邮箱、权限,密码将生成重置链接并发送给用户。用户第一次登录时将被迫设置密码。
    在这里插入图片描述
    Access level(访问级别)

    • Regular(常规的):普通用户可以访问他们的组和项目。
    • Administrator(行政人员):用户可以无限制地访问所有组、项目、用户和功能。
    • External(外部的):非必填。除非明确授予访问权限,否则外部用户无法查看内部或私人项目。此外,外部用户不能创建项目、组或个人片段。
    • Validate user account(验证用户帐户):非必填。用户可以通过输入信用卡/借记卡来验证自己,或者管理员可以手动验证用户。经过验证的用户可以在共享跑步者上使用免费的 CI 分钟数。

    还有其他一些非必填信息,这里不做详细讲解。

    分配项目权限

    (1)按组分配

    刚开始进来的用户没有分配项目,所以首页只能看到四个操作:创建项目、创建组、探索公共项目、了解GitLab

    在这里插入图片描述
    管理员需要再管理页面分配项目组,点击Overview—>Groups菜单。
    在这里插入图片描述点击需要分配的项目组,再红框处,选择用户,分配角色权限,点击按钮,完成添加。
    在这里插入图片描述

    然后用户刷新当前页面,可以看到组下面所有的项目以及每个项目对应的角色权限。
    在这里插入图片描述
    (2)按项目分配

    当然如果你不希望用户看到这么多项目,也可以分配指定项目权限。点击Overview—>Projects菜单,选择某个项目,点击红框处按钮
    在这里插入图片描述
    然后会跳转到项目配置中(当然管理员可以直接点项目进行配置),点击右侧Invite members按钮,填写用户名,设置好权限即可。

    在这里插入图片描述

    不同的角色拥有不同的权限,简单介绍下每个角色权限。

    操作Guest(来宾)Reporter(记者)Developer(开发)Maintainer()Owner
    查看问题分析
    查看合并请求分析
    查看CI/CD 分析
    创建、编辑、删除清理策略
    管理操作
    创建事件
    创建问题
    合并操作
    下载项目
    创建里程碑、片段
    拉取、查看项目代码
    提交项目代码
    创建、提交分支
    用户设置

    用户设置分为两个部分,一部分是用户个人设置,另一部分是管理帮助用户设置。

    (1)用户个人设置

    每个登入进来的用户,再工具栏最右侧,点击头像处,可以对状态、个人资料、喜好进行一些设置。

    在这里插入图片描述

    点击Edit profile

    • Profile菜单:基本信息页面,可以设置头像、工作状态、时区、社交账号等信息。

    在这里插入图片描述

    • Account菜单:用户账号设置,可以开启账号安全、修改账号名称、删除账号。

    在这里插入图片描述

    • Application菜单:将 GitLab 用作 OAuth 提供程序的应用程序,以及您已授权使用您的帐户的应用程序(自行了解)。
    • Chat菜单:您可以查看您的聊天帐户(自行了解)。
    • Access Tokens菜单:主要用于Api接口访问及身份校验(自行了解)。
    • Emails菜单:邮件管理,主要用于通知等操作(自行了解)。
    • Password菜单:修改你的密码。

    在这里插入图片描述

    • Notifications菜单:通知设置,用于介绍活动消息,默认情况下,所有项目和组都将使用全局通知设置。

    在这里插入图片描述

    • SSH Keys菜单:SSH 密钥允许您在计算机和 GitLab 之间建立安全连接。
    • GPG Keys菜单:GPG 密钥允许您验证已签名的提交。
    • Preferences菜单:设置工作时个人的喜好。

    在这里插入图片描述

    • Active Sessions菜单:这是已登录您帐户的设备列表。撤消您无法识别的任何会话。

    在这里插入图片描述

    • Authentication log菜单:这是涉及您帐户的身份验证事件的安全日志。

    在这里插入图片描述
    (2)管理帮助用户设置

    管理员还可以编辑此用户的信息,如果用户忘记了自己的密码,可以帮忙重置。

    点击Overview—>User菜单—>点击Edit修改按钮。
    在这里插入图片描述
    可以帮忙修改账户信息、密码、权限等信息。
    在这里插入图片描述
    如果管理员帮忙修改了账号密码,用户登陆时会强制修改密码。
    在这里插入图片描述

    搜索

    再工具栏的最左侧有个搜索框,它可以搜索全局Gitlab的一些问题以及合并请求、项目等。

    在这里插入图片描述
    旁边的隐藏按钮也可以查看很多功能,比如:查看项目、组、里程碑、片段、活动注:Admin菜单只有管理员才有。

    在这里插入图片描述
    除此之外右侧还可以查看问题、合并请求、待办事清单

    • Issues(问题):查看用户创建的一些问题。

    在这里插入图片描述

    • Merge Requests(合并请求):查看合并请求记录等信息。

    在这里插入图片描述

    • To-Do List(待办清单列表):记录未完成和已完成的记录信息。

    在这里插入图片描述

    管理员操作

    点击左侧,隐藏列表里的Admin菜单,进入管理员操作页面,主要介绍一些经常用到的菜单。

    在这里插入图片描述
    (1) Overview菜单

    • Dashboard菜单:子菜单,默认进入。展示的一些汇总的信息,比如项目数、用户数、组数等。
      在这里插入图片描述
    • Projects菜单:展示所有项目信息,你可以在这个页面创建新的项目或者删除项目、编辑项目、分配用户等操作。

    在这里插入图片描述

    • Users菜单:你可以添加新的用户或者审核新用户、删除用户和编辑用户等。

    在这里插入图片描述

    • Groups菜单:管理组。可对组进行新增、删除、编辑、分配用户等操作。

    在这里插入图片描述

    • Topics菜单:向项目添加主题以帮助用户找到它们(自行了解)。
    • Jobs菜单:记录管理员的一些操作(自行了解)。
    • Runners菜单:具体有啥用也不清楚,开发中没用(自行了解)。
    • Gitaly Servers菜单:Git服务器,记录Git版本信息。

    在这里插入图片描述
    (2) Analytics菜单

    记录项目的运行报告。

    • DevOps Reports菜单:介绍您的 DevOps 报告(自行了解)。
    • Usage Trends菜单:已图表的形式展示项目、用户等使用情况(自行了解)。

    (3) Monitoring菜单

    监控你的系统信息等(自行了解)。

    在这里插入图片描述
    (4) Messages菜单

    使用横幅和通知通知您的用户有关定期维护、最近升级等的信息。
    在这里插入图片描述
    (5) System Hooks菜单

    您能够向 Web 应用程序发送通知,以响应组或项目中的事件(自行了解)。

    (6) Applications菜单

    可以将 GitLab 用作OAuth 提供程序的实例的应用程序,通过Api接口的形式(自行了解)。

    (7) Abuse Reports菜单

    监测滥用的用户(自行了解)。

    (8) Deploy Keys菜单

    部署密钥授予对实例中所有存储库的读/写访问权限(自行了解)。

    (9) Labels菜单

    此处创建的标签将自动添加到新项目中。它们可用于对问题进行分类和合并请求。

    (10) Settings菜单

    主要包含配置大小限制。

    • General菜单:包含项目访问控制、账户、注册、登录配置等。

    在这里插入图片描述

    比如:可见性和访问控制,可以设置默认的可见性配置等。其它的可以自行了解。
    在这里插入图片描述

    • Integration菜单:管理员可以设置所有组和项目默认继承和使用的集成。

    可以集成工具有很多,每个公司按需配置
    在这里插入图片描述
    比如:配置邮件通知。
    在这里插入图片描述

    • Repository菜单:包含分支配置、数据库配置等。

    讲个比较重要的,GitLab新版的默认主分支名为main,我们可以修改默认的分支名,比如:master

    在这里插入图片描述

    • CI/CD菜单:持续集成的一些配置,一般也不会动这些(自行了解)。
    • Reporting菜单:类似于行为异常监控通知(自行了解)。
    • Metrics and profiling菜单:监控GitLab的使用情况,可以集成PrometheusGrafana
    • Service usage data菜单:一些json数据。
    • Network菜单:争对用户的网络速度等一些限制。
    • Appearance菜单:针对页面的外观设置。
    • Preferences菜单:一些基本的设置。

    Clone项目

    clone项目的方式有两种:SSH克隆和HTTP克隆。

    在这里插入图片描述
    以项目组成员的权限去操作。

    • SSH克隆

    (1)第一步:生成ssh密钥。

    ssh-keygen -t rsa -C "邮箱"
    
    • 1

    在这里插入图片描述

    注意:Windows系统和Linux系统.ssh文件保存的位置不一样(看生成的内容提示)。

    (2)第二步:找到User Settings—>选择SSH Keys,把生成的id_rsa.pub内容复制到Key的文本框中。

    在这里插入图片描述
    (3)第三步:复制GitLabSSHClone内容。

    在这里插入图片描述

    (4)第四步:执行clone命令。

    $ git clone git@124.000.***.**:group_1/project_1.git
    
    • 1

    提示Are you sure you want to continue connecting (yes/no) 输入yes,继续执行。

    在这里插入图片描述

    (5)第五步:查看项目是否clone成功。

    在这里插入图片描述

    • HTTP克隆

    Http的方式就相对SSH简单。

    (1)第一步:复制GitLab项目中HTTPClone内容。

    在这里插入图片描述
    (2)第二步:执行clone命令。

    $ git clone http://124.221.***.**/group_1/project_1.git
    
    • 1

    中途输入正确的GitLab账号密码。
    在这里插入图片描述
    (3)第三步:查看项目是否clone成功。

    在这里插入图片描述

    项目克隆完成后,可以尝试是否正常的拉取或提交代码。

    • 拉取

    执行git pull命令。

    在这里插入图片描述
    拉取没问题,已经是最新的代码。

    • 提交

    修改文件后,执行git push命令。

    在这里插入图片描述
    提交也没问题,可以正常的开展工作了。

    项目

    我们点击某一个项目,项目里也有很多的配置。
    在这里插入图片描述
    下面就主要对项目中的配置,进行讲解。

    (1)Project information

    • Activity菜单:默认展示页。可以看到此项目的所有操作活动。
    • Labels菜单:查看项目的标签,标签可以应用于问题和合并请求以对其进行分类。
    • Members菜单:管理项目成员,分配权限(再权限分配章节中有介绍)。

    在这里插入图片描述
    (2)Repository

    • File菜单:默认展示菜单。展示项目架构,克隆项目等操作。

    在这里插入图片描述

    • Commits菜单:展示提交记录。
    • Branches菜单:分支管理,创建、查询分支。

    在这里插入图片描述

    • Tags菜单:标签管理,创建、删除、查询标签,标签赋予了将特定历史点标记为重要的能力。
    • Contributors菜单:记录、统计提交代码次数。
    • Graph菜单:Git提交、合并、更新记录。
    • Compare菜单:比较 Git 修订版。查看更改的内容或创建合并请求。

    (3)Issues

    问题操作栏,可以查看提交的问题或新建问题,创建里程碑等(不做过多讲解)。

    (4)Security & Compliance

    一些安全配置,比如:安全测试、扫描等等(自行了解)。

    (5)Deployments

    项目部署的一些状态、策略、环境灯(自行了解)。

    (6)Packages and registries

    使用 GitLab 包注册表,您可以将 GitLab 用作各种受支持的包管理器的私有或公共注册表。可以发布和共享包,这些包可以作为下游项目中的依赖项使用(自行了解)。

    (7)Infrastructure

    包含Kubernetes集群将GitLab结合等(自行了解)。

    (8)Monitor

    查看监测环境、错误跟踪、警报、事件等(自行了解)。

    (9)Analytics

    统计代码提交次数等(自行了解)。

    (10)Wiki

    您可以存储有关项目的所有详细信息。这可能包括您创建它的原因,其原理,如何使用它等(自行了解)。

    (11)Snippets

    代码片段,存储、共享和嵌入小段代码和文本(自行了解)。

    合并

    一般在分支上提交完代码后,GitLab首页或项目首页都会出现相应的合并请求提示。
    在这里插入图片描述
    在这里插入图片描述
    如果没有提示,可以自行点击项目的Merge requests菜单。

    在这里插入图片描述
    点击 New merge request按钮,创建一个新的合并请求。左边选择需要合并的分支,右边默认主分支(目标分支)。点击提交按钮,跳转新页面。

    在这里插入图片描述
    填写好项目描述(非必填,为了解释本次提交,方便管理员了解),点击Create merge request按钮,完成创建,等待管理员审核。

    管理员也是一样操作,点击Merge requests菜单,点击对应的合并请求。

    在这里插入图片描述
    点击Merge按钮完成合并。有一些可以的勾选项,比如删除源分支,编辑描述等等。
    在这里插入图片描述

    CI/CD(持续集成/交付)

    CI(持续集成)服务是GitLab的一部分,每当开发人员将代码推送到应用程序时,它都会构建和测试软件。 CD(连续部署)是一项软件服务,它将生产中的每一个代码的变化放在每天生产的部署中。

    要使用 GitLab CI/CD,请执行以下操作:

    1. 确保有运行程序可用于运行作业。
    2. 在存储库的根目录下创建一个 .gitlab-ci.yml 文件。在此文件中定义 CI/CD 作业。
    确保有运行程序可用于运行作业

    Linux为例,进行讲解。

    (1)yum安装

    • 安装 GitLab运行器
    curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
    
    • 1
    • 安装最新版本的 GitLab运行器,或安装特定版本

    这种安装方式会下载git,会把本地已安装的git版本替换掉。

    yum install gitlab-runner
    
    • 1
    • 安装指定版本
    yum list gitlab-runner --showduplicates | sort -r
    sudo yum install gitlab-runner-10.0.0-1
    
    • 1
    • 2

    如果你需要更新最新的GitLab 运行器。

    yum update
    yum install gitlab-runner
    
    • 1
    • 2

    (2)手动安装

    不想使用yum安装的,可以使用手动安装。具体可以参考官方文档

    • 以Linux安装为例,先下载包
    # Linux x86-64
    sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"
    
    • 1
    • 2
    • 设置权限
    sudo chmod +x /usr/local/bin/gitlab-runner
    
    • 1
    • 创建 GitLab CI 用户
    useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    
    • 1
    • 服务安装和运行

    注:将用户权限改为--user=root,否则执行脚本时会报没权限。

    gitlab-runner install --user=root --working-directory=/home/gitlab-runner
    gitlab-runner start
    
    • 1
    • 2

    (3)注册runner

    • 执行注册命令
    gitlab-runner register
    
    • 1

    在这里插入图片描述

    • 输入您的 GitLab 实例网址

    在这里插入图片描述

    • 您获得的令牌以注册运行器

    再项目的Settings菜单—>点击CI/CD—>找到Runners,获取token。

    在这里插入图片描述
    将复制的token输入。
    在这里插入图片描述

    • 输入描述

    管理员可以再GitLab的设置中修改。

    在这里插入图片描述

    • 输入标签

    管理员可以再GitLab的设置中修改。

    在这里插入图片描述

    • 输入维护说明

    管理员可以再GitLab的设置中修改。
    在这里插入图片描述

    • 根据提示输入运行器执行程序

    简单介绍几种运行器他们的区别:

    shell:最简单的执行程序。构建所需的所有依赖项都需要在安装 GitLab 运行器的同一台计算机上手动安装。可以以非特权用户身份运行脚本。

    docker:允许一个干净的构建环境,具有简单的依赖关系管理(构建项目的所有依赖关系都可以放在 Docker 映像中)。Docker 执行器允许您轻松创建具有依赖服务(如 MySQL)的构建环境。

    ssh:添加 SSH 执行程序是为了完整性,但它是所有执行器中支持最少的。它使GitLab运行器连接到外部服务器并在那里运行构建。我们有一些来自使用此执行器的组织的成功案例,但通常我们建议使用其他类型之一。SSH 执行器仅支持在 Bash 中生成的脚本。

    kubernetes:允许您使用现有的Kubernetes集群进行构建。执行器将调用 Kubernetes 集群 API,并为每个 GitLab CI 作业创建一个新的 Pod(带有构建容器和服务容器)。

    custom:自定义执行程序允许您指定自己的执行环境。当 GitLab 运行器不提供执行器(例如,LXC 容器)时,您可以向 GitLab 运行器提供自己的可执行文件,以预配和清理要使用的任何环境。
    在这里插入图片描述

    完成后,点击Settings菜单中—>CI/CD菜单的Runners选项。

    在这里插入图片描述
    可以看到当前项目启动了runner,不过这个注册的runner只是单独项目的使用,管理员可以将runner共享多个项目。

    首先确保开启共享器开关,再红框处。

    在这里插入图片描述
    找到项目组。
    在这里插入图片描述
    点击CI/CD菜单—>Runners—>点击编辑按钮。
    在这里插入图片描述
    默认选项是Lock to current projects(锁定当前项目),将它修改为受保护的,点击保存。
    在这里插入图片描述
    我们点击其它项目配置Runners,就可以选择已存在的,如图中红框所示,点击启用。
    在这里插入图片描述

    创建 .gitlab-ci.yml 文件

    点击项目兴趣,创建文件。
    在这里插入图片描述
    复制以下内容到文件里。

    build-job:
      stage: build
      script:
        - echo "Hello, $GITLAB_USER_LOGIN!"
    
    test-job1:
      stage: test
      script:
        - echo "This job tests something"
    
    test-job2:
      stage: test
      script:
        - echo "This job tests something, but takes more time than test-job1."
        - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
        - echo "which simulates a test that runs 20 seconds longer than test-job1"
        - sleep 20
    
    deploy-prod:
      stage: deploy
      script:
        - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
      environment: production
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    输入文件名.gitlab-ci.yml,点击保存。
    在这里插入图片描述
    点击菜单CI/CD菜单—>Editor菜单,可以编辑.gitlab-ci.yml,也能可视化任务。
    在这里插入图片描述

    我们点击项目详情 CI/CD菜单—>Pipelines菜单,可以看到管道的运行状态。
    在这里插入图片描述
    点击任意管道,查看每个管道运行状态,如果是蓝色表示正在编译,红色表示编译出现问题,绿色表示编译通过。
    在这里插入图片描述
    点击 CI/CD菜单—>Jobs菜单。

    在这里插入图片描述
    点击任意job查看详情,如果有错误的话,能快速知道问题的原因。
    在这里插入图片描述

    设置

    如果你是管理员,你可以为指定项目进行一些设置。

    (1)General菜单

    默认菜单。可对项目进行名称、描述、头像、权限修改,项目转移、删除等操作。

    在这里插入图片描述

    (2)Integration菜单

    集成使您能够使第三方应用程序成为 GitLab 工作流程的一部分。

    在这里插入图片描述

    (3)Webhook菜单

    Webhook 使您能够向 Web 应用程序发送通知,以响应组或项目中的事件。我们建议优先使用集成而不是 Webhook(自行了解)。

    (4)Access Tokens菜单

    为需要访问 GitLab API 的应用程序生成范围为此项目范围内的项目访问令牌(自行了解)。

    (5)Repository菜单

    针对项目(分支、标签、代码)的访问进行设置。

    在这里插入图片描述

    (6)Merge requests菜单

    分支合并请求时默认配置项。
    在这里插入图片描述

    (7)CI/CD菜单

    持续集成交付设置项设置,比如:管道设置、运行器设置、环境变量等。

    在这里插入图片描述

    (8)Package and registry菜单

    将具有相同名称和版本的包上载到注册表时,会将更多资产添加到包中。为了节省存储空间,请仅保留最新的资产。

    (9)Monitor菜单

    配置监测错误、警报、事件等,访问地址(自行了解)。

    (10)Usage Quotas菜单

    项目资源使用情况(自行了解)。

    .gitlab-ci.yml

    前面只是简单的介绍了.gitlab-ci.yml文件的使用,下面将进行更详细的讲解。

    变量
    • 预定义CI/CD变量

    GitLab CI/CD 具有一组默认的预定义 CI/CD 变量,可用于管道配置和作业脚本(可在帮助中心中找到)。

    在这里插入图片描述
    我们可以在.gitlab-ci.yml中使用它。

    build-job:
      stage: build
      script:
        - echo "Hello, $GITLAB_USER_LOGIN!"
        - echo "Hello, $CI_JOB_STAGE"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    • 文件中创建自定义 CI/CD 变量

    使用关键字variables,定义变量和值。

    variables:
      TEST_VAR: "this is test var"
    
    build-job:
      variables:
        TEST_VAR_JOB: "this is test var job"
      stage: build
      script:
        - echo "Hello, $TEST_VAR"
        - echo "Hello, $TEST_VAR_JOB"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    • 将 CI/CD 变量添加到项目

    具有维护者角色的项目成员可以添加或更新项目 CI/CD 变量,除此之外,管理员还可以按组创建整个组的全局CI/CD 变量或者再Admin菜单创建全局的CI/CD 变量。

    我们点击项目详情—>Settings—>CI/CD菜单,找到Variables选项。

    在这里插入图片描述
    点击添加按钮。
    在这里插入图片描述

    • Key:不能有空格,只能使用字母、数字或 ._
    • Value:内容。
    • Type:类型,文件或变量。
    • Environment scope:默认全部或指定环境。
    • Protect variable:如果选中,则该变量仅在受保护分支或受保护标记上运行的管道中可用。
    • Mask variable:如果选中,变量的值将在作业日志中屏蔽。如果值不满足掩码要求,则无法保存变量。

    在这里插入图片描述

    build-job:
      stage: build
      script:
        - echo "Hello, $test_val"
        - echo "Hello, $test"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    关键字

    GitLab提供了很多关键字,你需要了解它们的作用是什么,下面针对常用一些关键字进行讲解(你可以查看帮助)。

    • default关键字:自定义默认值。可设置默认值的关键字:after_scriptartifactsbefore_scriptcacheimageinterruptibleretryservicestagstimeout

    我们定义两个job任务,一个不用默认值,一个用默认值。

    default:
      before_script:
        - echo "default_script"
    
    build-job:
      stage: build
      before_script:
        - echo "build-job"
      script: 
        - echo "build-script"
    
    job:
      script:
        - echo "This command executes after the job's 'before_script' commands."
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    在这里插入图片描述
    我们可以很清楚了看到,job任务中定义的默认关键字会被覆盖掉。

    • include关键字:用于在 CI/CD 配置中包含外部 YAML 文件。您可以将一个长文件拆分为多个文件以提高可读性,或减少同一配置在多个位置的重复。
    # 用于包含与该文件位于同一存储库中的文件。
    include:
      - local: '/templates/.gitlab-ci-template.yml'
    # 要在同一 GitLab 实例上包含来自另一个私有项目的文件
    include:
      - project: 'my-group/my-project'
        file: '/templates/.gitlab-ci-template.yml'
    # 可通过 HTTP/HTTPS 请求访问的公共 URL
    include:
      - remote: 'https://gitlab.com/example-project/-/raw/main/.gitlab-ci.yml'
    # 用于包含 .gitlab-ci.yml 模板。可以有多个模板
    include:
      - template: Auto-DevOps.gitlab-ci.yml
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • stages关键字:用于定义包含作业组的阶段。使用作业中的阶段将作业配置为在特定阶段中运行。
    stages:
      - build
      - test
      - deploy
    
    • 1
    • 2
    • 3
    • 4

    如果作业未指定阶段,默认分配:test。如果定义三种不同的作业阶段,任何作业失败,后续阶段的作业不会启动。

    • script关键字:用于定义在每个作业运行的操作。除此之外还有after_script关键字表示执行作业前、script关键字表示执行作业中、before_script关键字表示执行作业后,after_script关键字和before_script关键字需要搭配script关键字。
    build-job:
      stage: build
      before_script:
        - echo "before-script"
      script: 
        - echo "build-script"
      after_script:
        - echo "after-script"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • allow_failure关键字:用于确定在作业失败时管道是否应继续运行。默认为false。
    job1:
      stage: test
      script:
        - execute_script_2
      allow_failure: true
    job2:
      stage: deploy
      script:
        - deploy_script_2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • image关键字:用于指定运行作业的 Docker 映像。
    default:
      image: ruby:3.0
    
    • 1
    • 2
    • only/except关键字:only用于定义作业的运行时间。except用于定义作业何时不运行。用的最常见的就是分支。
    job1:
      stage: test
      script:
        - echo "execute_script_2"
      only: 
        - main
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这样表示只有main分支的时候才会执行job任务。

    • retry关键字:用于配置作业失败时重试的次数。如果未定义,则默认为作业不会重试。
    test:
      script: rspec
      retry: 2
    
    • 1
    • 2
    • 3
    • tags关键字:用于从可用于项目的所有运行器列表中选择特定的运行器。
    job:
      tags:
        - test
    
    • 1
    • 2
    • 3
    • timeout关键字:用于配置特定作业的超时。如果作业运行的时间超过超时时间,则作业将失败。
    build:
      script: build.sh
      timeout: 3 hours 30 minutes
    
    test:
      script: rspec
      timeout: 3h 30m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • variables关键字:CI/CD 变量是传递给作业的可配置值。用于创建自定义变量。
    variables:
      DEPLOY_SITE: "https://example.com/"
    
    deploy_job:
      stage: deploy
      script:
        - echo "$DEPLOY_SITE"
      environment: production
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注:以下关键字已弃用:

    imageservicescachebefore_scriptafter_script

    请改用默认值。例如:

    default:
      image: ruby:3.0
      services:
        - docker:dind
      cache:
        paths: [vendor/]
      before_script:
        - bundle config set path vendor/bundle
        - bundle install
      after_script:
        - rm -rf tmp/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    示例

    GitLab 提供了很多.gitlab-ci.yml的模板文件,适用于许多常见的框架和编程语言(你可以再帮助中心找到你需要的模板)。

    在这里插入图片描述
    再创建.gitlab-ci.yml时候,可以选择使用模板文件。
    在这里插入图片描述
    Maven项目为例,讲解比较简单的用法。

    通过编译后的Jar包,复制到其它地方或者复制到其它服务器(如果是其它服务需要通过ssh操作),执行一系列操作。

    比如:复制指定位置后执行启动操作。

    服务器目录:
    在这里插入图片描述
    脚本文件:

    build: 
      script:
      	# 编译
        - mvn clean install
    	#查看当前路径
        - pwd
        #将本路径下编译好的jar包复制到指定目录
        - scp -r target/maven-test-1.0-SNAPSHOT.jar /home/mavenTest/test.jar
        #跳转到指定目录
        - cd /home/mavenTest
        #启动jar包
        - java -jar test.jar
      tags:
        - test
      only:
        - master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    执行结果:
    在这里插入图片描述
    这里只是简单的执行了jar文件,可以看到成功打印。当然也可以执行一些脚本文件等。

    可以看到文件目录下也成功复制了jar文件。

    在这里插入图片描述

    常见问题

    如果你再运行脚本的过程中出现Permission denied(没有权限 拒绝访问)问题。

    可以参考这篇文章【汇总】解决GitLab-Runner执行脚本命令无权限

  • 相关阅读:
    Java架构师内功数据库
    MATLAB算法实战应用案例精讲-【优化算法】榛树搜索算法(HTS)(附MATLAB代码实现)
    成功案例(IF=12.2)| 肠道代谢组、微生物组和脑功能的综合分析揭示了肠-脑轴在长寿中的作用
    LeetCode75-05:压缩字符串
    分享一组前端实用的网站
    html在线商城购物网站制作——基于HTML+CSS+JavaScript鲜花礼品电商网站
    MyLife - Docker安装rabbitmq
    【思维构造】Neutral Tonality—CF1894D
    虚拟机VMware的使用流程以及出现的问题附解决方法
    第52天:Web应用、手写Web框架、Django的下载安装
  • 原文地址:https://blog.csdn.net/qq_39940674/article/details/126810554