DevOps学习 -- 使用 GitLab、GiLab-Runner
DevOps学习 -- 使用 GitLab、GiLab-Runner
用户推送代码到 GitLab,GitLab 将配置好的代码更新事件(流水线)发送到 GitLab-Runner或其他CI/DI软件,CI/DI软件完成自动部署。
一、安装配置部署 GitLab
安装 GitLab
-
1.获取 GitLab,官方地址:https://packages.gitlab.com/gitlab/gitlab-ce,因为我使用的是 Centos8,所以我下载了
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-15.3.2-ce.0.el8.x86_64.rpm/download.rpm
-
2.安装 GitLab,使用命令
sudo yum install gitlab-ce-15.3.2-ce.0.el8.x86_64.rpm
,如果报缺少包,则缺哪个安哪个。 -
3.执行
gitlab-ctl reconfigure
,重新配置 GitLab。 -
4.查看登陆密码(24小时后失效),使用命令
cat /etc/gitlab/initial_root_password
-
5.在网页上打开GitLab,端口号默认为80,用户名默认为:root
-
6.修改密码:右上角->Prefrences->Password
-
7.修改语言:右上角->Prefrences->Prefrences->Localization->Language
新建一个项目,并拉取
- 1.首页点击新建项目
- 2.填写相关信息,点击创建
- 3.克隆项目(需要替换域名为当前gitlab所在主机的IP)
- 4.使用
git clone http://gitlab.example.com/gitlab-instance-7a3f9f21/xlogin.git
拉取项目
二、安装配置 GitLab-Runner
前面我们讲过,GitLab-Runner 用于接收 GitLab 的更新事件,然后运行我们事先配置好的事件流程(流水线),如 build
->test
->deploy
等。由此可以看出 GitLab-Runner 只是一个执行器,它接收来自 GitLab 特定格式的元数据,然后按照配置好的执行策略(配置文件)来运行;这个配置文件默认为项目根目录下的.gitlab-ci.yml
文件。
- 1.安装 GitLab-Runner,
yum install gitlab-runner
- 2.配置 GitLab-Runner:
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
,指定了gitlab-runner的用户名和工作目录 - 3.启动 GitLab-Runner:
gitlab-runner start
- 4.将 GitLab-Runner 注册到 GitLab 上:
gitlab-runner register
。如下图:
Enter an executor:表示通过什么方式运行流水线中配置的 script,如果在本机运行编译部署等任务,则这里填写 shell;其他选项这里暂不做讨论。
注册令牌获取方式:菜单 -> 管理员 -> 管理中心 -> 概览 -> Runner -> 注册一个实例Runner
- 5.修改配置文件,配置文件地址:/etc/gitlab-runner/config.toml
添加 clone_url 项(不配置通过git拉取的时候会报错)
- 6.重新启动
gitlab-runner restart
- 7.补充:如果需要在这台机器上使用 maven、gradle 等进行构建,那么需要安装这些软件。如果在当前机器上进行构建 git 是必须安装的。
三、配置流水线
如前所述,流水线是我们配置自动化部署的关键,用户将代码推送到仓库时,GitLab会自动的调用流水线,GitLab 会将流水线中配置的行为交由 GitLab-Runner 来执行。
- 1.进入项目详情页,点击 CI/DI -> 编辑器 -> 配置流水线
- 2.在编辑器中配置流水线,模板网址https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates,我使用的简化后的配置文件如下:
分为验证和部署两个阶段,阶段一验证代码,阶段二分别部署代码到远程 maven 仓库和远程机器
- 3.现在当用户对目标仓库进行 push 的时候,GitLab 会自动运行流水线,首先将事件发送给 GitLab-Runner,然后 GitLab-Runner 拉取最新仓库并运行配置的流水线任务。
- 4.配置文件中可以使用一些预定义的 CI 环境变量,可查阅:https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
部署到远程 maven 仓库
这一步主要体现在 mvn $MAVEN_CLI_OPTS deploy -s /etc/gitlab/ci_settings.xml
,这里使用了 maven 插件,相应的 pom.xml 文件为:
上面的 project.distributionManagement.repository.id 和 ci_settings.xml 文件中的 servers.server.id 一一对应。ci_setttings.xml 文件和 .m2/settings.xml 文件类似,属于 maven 的配置文件。在 ci_settings.xml 文件中,我们配置了远程 maven 仓库的账号密码,由此 maven 可以将打包后的结果 push 到远程 maven 仓库。
ci_settings.xml文件内容为:
部署到远程机(并运行)
前面用到的部署脚本deploy.py运行环境为:至少python3.8、PyYAML包,代码如下:
部署脚本的配置文件config.yml如下:
至此,配置完毕。
四、常见问题
GitLab、Git-Runner 运行卡顿?高 IO?
添加 swap 分区
- 创建连续空间:
dd if=/dev/zero of=/data/swap bs=512 count=8388616
- 创建 swap 分区:
mkswap /data/swap
- 启动 swap 分区:
swapon /data/swap
- 在 /etc/fstab 文件中记录文件的名字,使系统重启后,swap 仍然有效
echo “/data/swap swap swap defaults 0 0” >> /etc/fstab
- 查看 swap 分区:
cat /proc/swaps
之后可以选择重新加载 gitlab:sudo gitlab-ctl reconfigure
GitLab-Runner 运行权限问题
通过 gitlab-runner 运行脚本使用的是前面配置的 gitlab-runner 用户角色,因为 gitlab-runner 在部署的时候使用了私钥文件,所以 gitlab-runner 用户角色必须有私钥文件的读权限。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求