GitLab与GitLab Runner安装(RPM与Docker方式),CI/CD初体验

背景

GitLab 是一个强大的版本控制系统和协作平台,记录一下在实际工作中关于 GitLab 的安装使用记录。

一开始使用 GitLab 时,是在 CentOS7 上直接以 rpm 包的方式进行安装,仅作为代码托管工具来使用,版本: 14.10.4

后续预研 GitLabCI/CD 及流水线时,采用 Docker 方式安装,版本: 16.2.3-jh ;引入了 GitLab Runner ,版本: 16.2.0

GitLab

系统环境

[root@gitlab1 opt]# uname -a
Linux gitlab1 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@gitlab1 opt]# cat /proc/version
Linux version 3.10.0-1127.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 31 23:36:51 UTC 2020
[root@gitlab1 opt]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
[root@gitlab2 ~]# docker -v
Docker version 20.10.18, build b40c2f6

RPM方式安装GitLab

下载地址,清华镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

[root@gitlab1 local]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm错误: 无法验证 mirrors.tuna.tsinghua.edu.cn 的由 “/C=US/O=Let's Encrypt/CN=R3” 颁发的证书:颁发的证书已经过期。
解决:将https修改为http[root@gitlab1 local]# rpm -ivh gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm 
警告:gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID f27eab47: NOKEY
错误:依赖检测失败:policycoreutils-python 被 gitlab-ce-14.10.4-ce.0.el7.x86_64 需要解决:yum install -y curl policycoreutils-python openssh-server[root@gitlab1 local]# rpm -ivh gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm 
警告:gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID f27eab47: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...1:gitlab-ce-14.10.4-ce.0.el7       ################################# [100%]
It looks like GitLab has not been configured yet; skipping the upgrade script.*.                  *.***                 ********               *****.******             ***************            ********,,,,,,,,,***********,,,,,,,,,,,,,,,,,,,,*********,,,,,,,,,,,.,,,,,,,,,,,*******,,,,,,,,,,,,,,,,,,,,,*****,,,,,,,,,.,,,,,,,****,,,,,,.,,,***,,,,,*,._______ __  __          __/ ____(_) /_/ /   ____ _/ /_/ / __/ / __/ /   / __ `/ __ \/ /_/ / / /_/ /___/ /_/ / /_/ /\____/_/\__/_____/\__,_/_.___/Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:sudo gitlab-ctl reconfigureFor a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.mdHelp us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=14-10# 编辑配置,设置访问地址
[root@gitlab1 local]# vi /etc/gitlab/gitlab.rb
external_url 'http://gitlab1'# 重新配置生效
[root@gitlab1 local]# gitlab-ctl reconfigureRunning handlers:
Running handlers complete
Chef Infra Client finished, 606/1618 resources updated in 05 minutes 34 secondsWarnings:
Rehashing of trusted certificates present in `/etc/gitlab/trusted-certs` failed. If on a FIPS-enabled machine, ensure `c_rehash` binary is available in $PATH.Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.NOTE: Because these credentials might be present in your log files in plain text, it is highly recommended to reset the password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.gitlab Reconfigured!

Note:

  1. 如何查看版本信息?在GitLab后台中查看版本:在部署域名/IP后加上help。
  2. 如果修改了ip或者端口等配置信息,每次更改完之后,务必记得重新加载配置:gitlab-ctl reconfigure。

[root@gitlab1 local]# cat /etc/gitlab/initial_root_password | grep Password

使用浏览器访问配置的地址,输入用户名与密码。

GitLab 常用命令

  1. gitlab-ctl start:启动gitlab,
  2. gitlab-ctl stop:停止gitlab。
  3. gitlab-ctl status:查看gitlab状态
  4. gitlab-ctl restart:重启服务

作为代码仓库, GitLab 使用包括了以下几方面:

  • 创建组
  • 创建项目
  • 添加SSHkey
  • 克隆
  • 用户注册
  • 用户审核
  • 加入组

这种方式下,如果想使用 CI/CD 功能,则需要接着安装 GitLab Runner (不过不建议用这种直接安装的方式来用,实际生产更多的是使用 Docker 以及 Kubernetes ),分两步:安装和注册,下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/

Note:

  1. GitLab Runner注册分两步:获取runner token,注册
  2. GitLab Runner分为共享型、分组型、项目型,分别在不同的位置
  3. 注册分为交互式和非交互式两种方式。

Docker方式安装使用GitLab

新开一台虚拟机,使用 Docker 的方式来安装和运行 GitLabGitLab Runner

[root@gitlab2 ~]# cd /opt/
[root@gitlab2 opt]# mkdir gitlab
[root@gitlab2 opt]# export GITLAB_HOME=/opt/gitlab

根据官方文档,安装运行 GitLab Runner 的命令如下:

sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish 22:22 \--name gitlab \--restart always \--volume $GITLAB_HOME/config:/etc/gitlab \--volume $GITLAB_HOME/logs:/var/log/gitlab \--volume $GITLAB_HOME/data:/var/opt/gitlab \--shm-size 256m \registry.gitlab.cn/omnibus/gitlab-jh:latest

实际执行时,简化了参数,设置了主机名,修改了映射端口号。

docker run -d \-h gitlab2 \-p 80:80 -p 222:22 \--name gitlab \--restart always \-v $GITLAB_HOME/config:/etc/gitlab \-v $GITLAB_HOME/logs:/var/log/gitlab \-v $GITLAB_HOME/data:/var/opt/gitlab \--shm-size 256m \registry.gitlab.cn/omnibus/gitlab-jh:latest

Note: 宿主机的端口22修改为222,否则报错: Error starting userland proxy: listen tcp4 0.0.0.0:22: bind: address already in use.

访问极狐 GitLab URL ,并使用用户名 root 和来自以下命令的密码登录:

[root@gitlab2 ~]# docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
Password: zIrC8HPFfuxVmGSyx27nRbgTRwLaoiIhu+a2edEySMw=

2023-08-19-GitLabHome.jpg

2023-08-19-GitLabVersion.jpg

通过 Docker 来对 GitLab 的服务管理。

docker start gitlab
docker stop gitlab
docker restart gitlab
docker rm gitlab

Docker方式安装注册gitlab-runner

安装GitLab Runner

根据 GitLab 的版本,指定了 GitLab Runner 的版本。

docker run -d --name gitlab-runner --restart always \-v /opt/gitlab-runner/config:/etc/gitlab-runner \-v /var/run/docker.sock:/var/run/docker.sock \gitlab/gitlab-runner:v16.2.0# 查看安装的GitLab Runner的版本信息
[root@gitlab2 ~]# docker exec -it gitlab-runner gitlab-runner --version
Version:      16.2.0
Git revision: 782e15da
Git branch:   16-2-stable
GO version:   go1.20.5
Built:        2023-07-21T22:52:42+0000
OS/Arch:      linux/amd64

注册GitLab Runner

接下来,创建组,创建项目,克隆,为项目注册一个 Runner

Create new group ——> Create new project ——> git clone http://gitlab2/iot/test.git

# 注册为`Shell`类型的执行器。
docker run --rm -v /opt/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v16.2.0 \register \--non-interactive \--executor "shell" \--url "http://192.168.44.149" \--registration-token "GR1348941NNVnhpcsLqgBbL-1JxPT" \--description "shell-runner" \--tag-list "shell,test" \--run-untagged="true" \--locked="false" \--access-level="not_protected"

注册过程中遇到的问题:

  1. ERROR: Registering runner… error runner=GR1348941NNVnhpcs status=only http or https scheme supported

原因是我将 --url 的值写成了主机名,得写成 HTTP 地址链接的形式。

  1. ERROR: Registering runner… failed runner=GR1348941NNVnhpcs status=couldn’t execute POST against http://gitlab2/api/v4/runners: Post “http://gitlab2/api/v4/runners”: dial tcp: lookup gitlab2 on 192.168.44.2:53: no such host

原因是我将 --url 的值写成了主机名,在容器中无法通过主机名注册成功,然后改成了 IP 地址,注册成功,以下是注册成功的效果。

[root@gitlab2 ~]# docker run --rm -v /opt/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v16.2.0 \
>  register \
>   --non-interactive \
>   --executor "shell" \
>   --url "http://192.168.44.149" \
>   --registration-token "GR1348941NNVnhpcsLqgBbL-1JxPT" \
>   --description "shell-runner" \
>   --tag-list "shell,test" \
>   --run-untagged="true" \
>   --locked="false" \
>   --access-level="not_protected"
Runtime platform                                    arch=amd64 os=linux pid=7 revision=782e15da version=16.2.0
Running in system-mode.                            WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872 
Registering runner... succeeded                     runner=GR1348941NNVnhpcs
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml" 

2023-08-19-GitLabRunner.jpg

CI/CD

为了体验下 GitLab RunnerCI/CD 功能,接下来以一段后端服务构建与部署的配置来模拟实际的流水线过程,在创建的项目根目录下新建文件: .gitlab-ci.yml (提交后项目会自动启动流水线的执行)。

stages:- build- deploybuild:stage: buildtags:- shellonly:- masterscript:- echo "mvn clean"- echo "mvn package"deploy:stage: deploytags:- testonly:- masterscript:- echo "java -jar x.jar"

CI/CD 过程中遇到的问题:

  1. 第一次添加上述配置文件并提交后,并没有触发流水线。。

原来在我用的新版 GitLab 中的主分支从 master 改为了 main ,修改 .gitlab-ci.yml 中的分支名称即可。

  1. 流水线失败,Job日志:fatal: unable to access ‘http://gitlab2/iot/test.git/’: Could not resolve host: gitlab2

2023-08-19-GitLabRunnerError.jpg

感觉还是因为 Docker 容器无法获取宿主机的主机名,进入 gitlab-runner 所在的容器, ping 宿主机 ip 是通的,但是主机名不通,简单的办法是在 config.toml 文件中添加 clone_url = "http://192.168.44.149" ,以 IP 的方式来拉取代码。

# 没有自带ping命令,自行安装
root@249b6b18ffa8:/# apt update
root@249b6b18ffa8:/# apt install -y iputils-ping# 修改配置,增加clone_url配置,跟url并列
[root@gitlab2 ~]# vi /opt/gitlab-runner/config/config.toml
clone_url = "http://192.168.44.149"# 重启gitlab-runner所在容器
[root@gitlab2 ~]# docker restart gitlab-runner
gitlab-runner

改成以上配置后,手动启动一个 Pipeline ,执行成功。

2023-08-19-PipelinePass1.jpg

2023-08-19-PipelinePass2.jpg

2023-08-19-PipelinePass3.jpg

# 进入容器
[root@gitlab2 ~]# docker exec -it gitlab-runner /bin/bash# 列出所有的runner
root@249b6b18ffa8:/# gitlab-runner list
Runtime platform                                    arch=amd64 os=linux pid=27 revision=782e15da version=16.2.0
Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
shell-runner                                        Executor=shell Token=XQEENnyfzyEVs8-2iDB9 URL=http://192.168.44.149# 查看runner的状态
root@249b6b18ffa8:/# gitlab-runner verify
Runtime platform                                    arch=amd64 os=linux pid=37 revision=782e15da version=16.2.0
Running in system-mode.                            Verifying runner... is alive                        runner=XQEENnyf

Note:

  1. CI Lint可以用来校验.gitlab-ci.yml的语法;
  2. 一个流水线包含多个作业,每个作业下至少包含一个script。
  3. 修改服务器的IP之后,Docker容器无法从服务器外部访问
# 服务器IP更改之后,linux数据包转发配置net.ipv4.ip_forward会变为0,即关闭状态。
[root@gitlab2 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0# 重启docker,docker会默认将net.ipv4.ip_forward值临时改为1(再次新增或更改IP之后会失效)
[root@gitlab2 ~]# systemctl restart docker

小总结

以上是安装和使用 GitLab 的过程,以及CI/CD初体验, GitLab 是一个功能丰富、易于使用和安全可靠的协作平台,可以帮助团队更好地管理和开发项目。

  1. 集成的工作流程:GitLab 提供了一个集成的工作流程,包括代码托管、问题跟踪、持续集成和部署等功能。这使得团队成员可以在同一个平台上协作开发和管理项目。
  2. 代码托管:GitLab 提供了强大的代码托管功能,支持 Git 分布式版本控制系统。团队成员可以轻松地共享和管理代码,进行版本控制和协作开发。
  3. 问题跟踪:GitLab 提供了问题跟踪功能,可以帮助团队成员记录和解决项目中的问题。通过问题跟踪,团队成员可以更好地协作和追踪项目进展。
  4. 持续集成和部署:GitLab 提供了强大的持续集成和部署功能,可以自动化构建、测试和部署代码。这可以大大提高开发效率和代码质量。
  5. 安全性:GitLab 提供了强大的安全性功能,包括访问控制、权限管理和代码审查等。这可以帮助团队保护代码和敏感信息的安全。

Reference

  • https://docs.gitlab.cn/runner/register/

If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

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

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

相关文章

人机界面通过RJ45口无线连接多台PLC

人机界面是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。人机界面产品由硬件和软件两部分组成,硬件部分包括处理器、显示单元、输入单元、通讯接口、数据存贮单元等,HMI软件一般分为两部分&am…

React+Typescript 父子组件事件传值

好 之前我们将 state 状态管理简单过了一下 那么 本文 我们来研究一下事假处理 点击事件上文中我们已经用过了 这里 我们就不去讲了 主要来说说 父子之间的事件 我们直接来编写一个小dom 我们父组件 编写代码如下 import Hello from "./components/hello";functio…

opencv-dnn

# utils_words.txt 标签文件 import osimage_types (".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff")def list_images(basePath, containsNone):# return the set of files that are validreturn list_file…

iPhone卫星通信SOS功能如何在灾难中拯救生命

iPhone上的卫星紧急求救信号功能在从毛伊岛野火中拯救一家人方面发挥了至关重要的作用。这是越来越多的事件的一部分,在这些事件中,iPhone正在帮助人们摆脱危及生命的情况。 卫星提供商国际通信卫星组织负责移动的高级副总裁Mark Rasmussen在接受Lifewir…

WPS office 最新未公开 0Day漏洞警示

一、事件描述 近日,网传监测发现WPS Office for Windows版本 存在0day漏洞,攻击者可以利用该0day漏洞在受害者主机上执行任意恶意文件,高危级别,官方尚未对此发布修复漏洞,目前建议只能临时弃用wps或者不要点开未知文件…

flink checkpoint时exact-one模式和atleastone模式的区别

背景: flink在开启checkpoint的时候有两种模式可以选择,exact-one和atleastone模式,那么这两种模式有什么区别呢? exact-one和atleastone模式的区别 先说结论:exact-one可以完全做到状态的一致性,而atle…

Elasticsearch 入门安装

1.Elasticsearch 是什么 The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。 Elaticsearch,简称为…

Fabric.js 元素选中状态的事件与样式

本文简介 带尬猴! 你是否在使用 Fabric.js 时希望能在选中元素后自定义元素样式或选框(控制角和辅助线)的样式? 如果是的话,可以放心往下读。 本文将手把脚和你一起过一遍 Fabric.js 在对象元素选中后常用的样式设置…

无涯教程-PHP - sql_regcase()函数

sql_regcase() - 语法 string sql_regcase (string string) 可以将sql_regcase()函数视为实用程序函数,它将输入参数字符串中的每个字符转换为包含两个字符的带括号的表达式。 sql_regcase() - 返回值 返回带括号的表达式字符串以及转换后的字符。 sql_regcase…

微信小程序 车牌号输入组件

概述 一个小组件,用于方便用户输入车牌号码 详细 概述 有时候我们开发过程中会遇到需要用户输入车牌号的情况,让客户通过自带键盘输入,体验不好且容易出错,例如车牌号是不能输入O和I的,因此需要有一个自定义的键盘…

【VR】SteamVR2.0的示例场景在哪里

💦本专栏是我关于VR开发的笔记 🈶本篇是——在哪里可以找到SteamVR2.0的示例场景 SteamVR2.0的示例场景在哪里 1. 逐步打开方式2. 快速打开方式 1. 逐步打开方式 Assets——SteamVR——InteractionSystem——Samples——>Interactions_Example 2. 快…

CDN、DNS、ADN、SCDN、DCDN、ECDN、PCDN、融合CDN傻傻分不清楚,一文全部搞懂

一、CDN是什么? CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之…

Wireshark数据抓包分析之传输层协议(TCP协议)

一、实验目的: 通过使用wireshark对TCP协议的数据包的抓取分析TCP协议的具体内容 二、预备知识: 1.需要了解TCP协议的三次握手过程 2.需要了解TCP协议的四次挥手的过程 三、网络拓扑 四、实验过程: part1:3次握手和4次挥手的数据包的获取 …

【ThingJS | 3D可视化】开发框架,一站式数字孪生

博主:_LJaXi Or 東方幻想郷 专栏: 数字孪生 | 3D可视化框架 开发工具:ThingJS在线开发工具 ThingJs 低代码开发 ThingJs 低代码开发注意点场景效果配置层级层级常用API实例化 Thing,加载场景load 加载函数ThingJs 层级关系图查找层…

睿思BI旗舰版V5.3正式发布

发布时间:2023-7-20 主要更新内容: 1.增加3D地图功能 2.增加水球图 3.增加扇形图,在数据大屏 - 自定义组件中定义。 4.增加指标引导线功能,在数据大屏 - 自定义组件中定义。 5.详情页增加回调函数功能。 6.大屏/仪表盘模版下载,…

排序算法:选择排序

选择排序的思想是&#xff1a;双重循环遍历数组&#xff0c;每经过一轮比较&#xff0c;找到最小元素的下标&#xff0c;将其交换至首位。 public static void selectionSort(int[] arr) {int minIndex;for (int i 0; i < arr.length - 1; i) {minIndex i;for (int j i …

Spring统一功能处理

1. AOP存在的问题 获取参数复杂AOP的规则相对简单 2. 拦截器 2.1. 应用(以登录为例) 2.1.1. 自定义拦截器 新建interceptor文件夹 import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http…

什么是NetDevOps

NetDevOps 是一种新兴的方法&#xff0c;它结合了 NetOps 和 DevOps 的流程&#xff0c;即将网络自动化集成到开发过程中。NetDevOps 的目标是将虚拟化、自动化和 API 集成到网络基础架构中&#xff0c;并实现开发和运营团队之间的无缝协作。 开发运营&#xff08;DevOps&…

框架分析(4)-Spring

框架分析&#xff08;4&#xff09;-Spring 专栏介绍Spring核心特点控制反转&#xff08;IoC&#xff09;面向切面编程&#xff08;AOP&#xff09;组件化集成简化开发总结 优缺点优点高度可扩展控制反转&#xff08;IoC&#xff09;面向切面编程&#xff08;AOP&#xff09;集…

Python“牵手”京东工业商品详情数据采集方法,京东工业商数据API申请步骤说明

京东工业平台介绍 京东工业平台是京东集团旗下的一个B2B电商平台&#xff0c;主要面向企业客户提供一站式的采购服务。京东工业平台依托京东强大的供应链和配送能力&#xff0c;为企业用户提供全品类、全渠道、全场景的采购解决方案&#xff0c;涵盖电子元器件、机械配件、办公…