代码管理工具:GitLab

  • 前言
    • 安装GitLab
      • Linux安装
        • 卡顿解决
        • 访问
    • 使用
      • 帮助
      • 创建
        • 创建项目
        • 创建分组
        • 创建片段
      • 新用户
        • 分配项目权限
        • 用户设置
      • 搜索
      • 管理员操作
      • Clone项目
    • 项目
      • 合并
      • CI/CD(持续集成/交付)
        • 确保有运行程序可用于运行作业
        • 创建 .gitlab-ci.yml 文件
      • 设置
      • .gitlab-ci.yml
        • 变量
        • 关键字
        • 示例
    • 常见问题

前言

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

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

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

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

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

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

yum install openssh-server policycoreutils-python -y


然后我们再执行安装命令

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

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


我们可以再/etc/gitlab目录下看到配置文件。

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

vim gitlab.rb

再文件中找到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 #工作进程

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

 puma['per_worker_max_memory_mb'] = 1024

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

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

然后重新加载配置文件。

gitlab-ctl reconfigure

重启服务。

gitlab-ctl restart

其它常用命令

#重新加载配置
gitlab-ctl reconfigure
#启动
gitlab-ctl start
#关闭
gitlab-ctl stop
#重启
gitlab-ctl restart
#日志
gitlab-ctl tail

访问

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

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

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

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

  • 查看Swap分区
cat /proc/swaps


可以看到没有分区。

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

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

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

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

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

然后我们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 "邮箱"

注意: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

提示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

中途输入正确的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
  • 安装最新版本的 GitLab运行器,或安装特定版本

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

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

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

yum update
yum install gitlab-runner

(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"
  • 设置权限
sudo chmod +x /usr/local/bin/gitlab-runner
  • 创建 GitLab CI 用户
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
  • 服务安装和运行

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

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

(3)注册runner

  • 执行注册命令
gitlab-runner register

  • 输入您的 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: buildscript:- echo "Hello, $GITLAB_USER_LOGIN!"test-job1:stage: testscript:- echo "This job tests something"test-job2:stage: testscript:- 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 20deploy-prod:stage: deployscript:- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."environment: production

输入文件名.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: buildscript:- echo "Hello, $GITLAB_USER_LOGIN!"- echo "Hello, $CI_JOB_STAGE"

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

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

variables:TEST_VAR: "this is test var"build-job:variables:TEST_VAR_JOB: "this is test var job"stage: buildscript:- echo "Hello, $TEST_VAR"- echo "Hello, $TEST_VAR_JOB"

  • 将 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: buildscript:- echo "Hello, $test_val"- echo "Hello, $test"

关键字

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

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

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

default:before_script:- echo "default_script"build-job:stage: buildbefore_script:- echo "build-job"script: - echo "build-script"job:script:- echo "This command executes after the job's 'before_script' commands."


我们可以很清楚了看到,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
  • stages关键字:用于定义包含作业组的阶段。使用作业中的阶段将作业配置为在特定阶段中运行。
stages:- build- test- deploy

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

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

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

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

注:以下关键字已弃用:

imageservicescachebefore_scriptafter_script

请改用默认值。例如:

default:image: ruby:3.0services:- docker:dindcache:paths: [vendor/]before_script:- bundle config set path vendor/bundle- bundle installafter_script:- rm -rf tmp/

示例

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.jartags:- testonly:- master

执行结果:

这里只是简单的执行了jar文件,可以看到成功打印。当然也可以执行一些脚本文件等。

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

常见问题

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

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

仓库管理系统:GitLab相关推荐

  1. 仓库管理系统gitlab

    为什么80%的码农都做不了架构师?>>>    一.简介 GitLab 是一个用于仓库管理系统的开源项目. 二.安装准备工作 系统:ubuntu 12.04 三.安装步骤 1.安装依 ...

  2. c语言仓库管理系统链表,仓库管理系统 C语言 C++ 数据结构 链表 课程设计

    仓库管理系统 C语言 C++ 数据结构 链表 课程设计 #include #include #include #include #define MAX 64 typedef struct node{ ...

  3. 甲骨文宣布供应链管理云平台支持LogFire仓库管理系统

    本文讲的是 :甲骨文宣布供应链管理云平台支持LogFire仓库管理系统    ,[IT168 资讯]甲骨文发布了一系列对其供应链管理产品的更新,并表示,云平台现在支持去年收购LogFire的仓库管理系 ...

  4. STM32项目(七) —— 智能仓库管理系统

    智能仓库管理系统 随着经济的发展,对企业的生产经营要求提高,企业必须综合利用各种先进技术,在网络与信息技术的支持下,改进现在的生产经营模式和组织结构,增加利润.随着企业规模的扩大.高效方便的仓库管理系 ...

  5. XX公司定制开发的仓库管理系统

    XX公司定制的仓库管理系统,可设置多用户登录,软件简洁小巧美观 链接:https://pan.baidu.com/s/1Ha9e9630wYzVJCphG3xF-g  提取码:hlw1

  6. boot客户管理系统源码_「计算机毕设」基于SpringBoot开发的仓库管理系统

    前言 大家好,我是it分享师,今天给大家带来一个计算机的毕设项目.基于Springboot开发的仓库管理系统,底层权限控制已经基于shiro实现了,直接可以作为二次开发框架使用! 使用技术 本套系统采 ...

  7. Android Studio实现功能丰富的仓库管理系统

    项目目录 一.项目概述 二.开发环境 三.项目结构 四.数据库文件 五.项目演示 六.源码获取 一.项目概述 本次项目实现了一个简单的仓库管理系统.用户身份分为超级管理员.出入库人员和商品管理员这三种 ...

  8. python wms系统源码_jeewms仓库管理系统 v2.4.0

    jeewms是一个基于JAVA的仓库管理系统,是由灵鹿谷科技主导的开源项目,WMS在经过多家公司上线运行后,为了降低物流仓储企业的信息化成本,决定全面开源此产品.针对有特殊信息化需求的企业,提供高性价 ...

  9. [附源码]计算机毕业设计JAVA社区生鲜仓库管理系统

    [附源码]计算机毕业设计JAVA社区生鲜仓库管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...

  10. SSM框架超市进销存出库入库仓库管理系统(idea开发javaweb-javaee-j2ee-springboot) 退货管理 销售管理 供应商管理 客户管理 员工管理 以及库存统计和盘存统计

    0.效果展示 1.概述 2.搭建环境 本文以实现一个超市进销存出库入库仓库管理系统为目标,从环境搭建到编码实现全过程讲述 我们使用javaweb.J2EE来构建超市进销存出库入库仓库管理系统,环境使用 ...

最新文章

  1. Docker(一):这可能是最为详细的Docker入门总结
  2. python的优缺点有哪些-那么多人选择Python,它的优缺点有哪些?
  3. 推荐系统炼丹笔记:Embedding在内存问题上的一种解法
  4. 经典:编程面试的 10 大算法概念汇总
  5. linux脚本监控某一进程,linux监控某个进程的运行shell脚本
  6. Python开发环境Anaconda3使用指南(入门篇)
  7. 产品研发过程管理专题——软件项目范围变更流程与过程控制研究
  8. 语言百马百担求马匹数_C语言经典编程题(下)
  9. java性能调优原因和因素
  10. Zip文件压缩与解压
  11. Linux C程序实现查看文件夹大小
  12. 世达03017数字万用表的使用
  13. 用产品思维设计API(二)——数据解耦,才是前后分离的本质
  14. oracle无法进入nomount状态,数据库进入nomount状态
  15. win10卸载软件_教你彻底关闭Win10自动更新,以及卸载预装应用
  16. 电商RPA:直播行业必不可少的工具
  17. 转账到支付宝账户接口常见问题
  18. 宇视NVR录像机下载录像没有声音如何解决
  19. 中文分词jieba学习笔记
  20. 看我如何偷取别人的云储币(Siacoin)

热门文章

  1. 第一次出省经历--美丽成都之行
  2. 学习英语01——听力——剑雅12 T8S2
  3. 计算机网络第二章物理层笔记 值得收藏
  4. Centos下堡垒机Jumpserver V3.0环境部署
  5. C++ 中的左值和右值
  6. 网络传输是怎么保证安全的
  7. 手游问道服务器维护到几点,问道手游10月27日更新什么?维护到几点?
  8. [附源码]计算机毕业设计springboot右脑开发教育课程管理系统
  9. 计算机账务处理流程图,账务处理流程图
  10. dubbo的轮询机制说明