DevOps系列文章之 GitLabCI汇总

GitlabCI环境搭建

前提 先安装 docker

Docker容器化安装

docker pull gitlab/gitlab-ee:12.4.0-ee.0

在这里插入图片描述

创建挂载目录

mkdir -p /srv/gitlab   
mkdir -p /srv/gitlab/config # 映射到 Glitlab 容器中的配置目录
mkdir -p /srv/gitlab/logs # 映射到 Glitlab 容器中的日志目录
mkdir -p /srv/gitlab/data # 映射到 Glitlab 容器中的数据目录

在这里插入图片描述

启动容器

--publish 8929:8929 #/srv/gitlab/config/gitlab.rb里面添加端口这边也要改一致,也就是下面的配置

external_url ‘http://192.168.52.129:8929’ 不然默认是80端口

docker run --name gitlab2 -d \
--hostname=192.168.52.129 \
--publish 8929:8929 \
--publish 2224:22 \
--publish 2443:443 \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
--volume /etc/localtime:/etc/localtime:ro \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.52.129:8929'" \
--env GITLAB_OMNIBUS_CONFIG="gitlab_rails['gitlab_shell_ssh_port'] = 2224" \
--privileged=true \
--restart=always gitlab/gitlab-ee:12.4.0-ee.0
docker run --name gitlab2 -d \
--hostname=192.168.52.129 \
--publish 8929:8929 \
--publish 2224:22 \
--publish 2443:443 \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
--volume /etc/localtime:/etc/localtime:ro \
--privileged=true \
--restart=always gitlab/gitlab-ee:12.4.0-ee.0

在这里插入图片描述

查看启动日志 docker logs gitlab2

在这里插入图片描述

修改配置信息

vi /srv/gitlab/config/gitlab.rb

在这里插入图片描述

修改后重启容器

docker restart gitlab2

2749240)

访问Gitlab登录页面

在这里插入图片描述

使用模板创建一个项目

在这里插入图片描述

在这里插入图片描述

Docker-Compose安装Gitlab

前提:安装docker-compose

创建 docker-compose.yml

version: '3'
services:
  web:
    image: 'gitlab/gitlab-ee:12.4.0-ee.0'
    restart: always
    hostname: '192.168.52.129' # 此处填写所在服务器 ip
    environment:
      # 此处 ip 须与上面 hostname 一致,端口号自定义
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.52.129:8929' 
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929' # 此处端口号须与 external_url 中保持一致
      - '2224:22' # 同理
    volumes:
      - '/opt/gitlab/config:/etc/gitlab'
      - '/opt/gitlab/logs:/var/log/gitlab'
      - '/opt/gitlab/data:/var/opt/gitlab'

在这里插入图片描述

启动安装

cd /home/dukang

docker-compose -f docker-compose.yml up

在这里插入图片描述

在这里插入图片描述

访问Gitlab登录页面

在这里插入图片描述

在这里插入图片描述

安装Gitlab Runner

Gitlab实现CICD的方式有很多,比如通过Jenkins,通过Gitlab Runner等,今天主要介绍后者。Gitlab在安装的时候,就默认包含了Gitlab CI的能力,但是该能力只是用于协调作业,并不能真的去执行作业,因此需要搭配Gitlab Runner来作为执行器实现具体的CICD工作。Gitlab Runner可以被安装在任意支持的系统上,比如Linux、Windows、Mac,甚至也可以运行在Docker、Kubernetes集群上。

不同操作系统对应用不同版本Runner,这里演示Windows下的Runner使用

其他版本Runer下载

# Linux x86-64
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

 # Linux x86
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386

 # Linux arm
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm

https://docs.gitlab.com/runner/install/windows.html

在这里插入图片描述

首先在官网下载对应gitlab一致版本的windows安装包,放到某个文件夹下面,比如D:\gitlab-runner\gitlab-runner-windows-amd64.exe,然后依次执行如下注册和启动命令:

PS C:\Windows\system32> cd D:\gitlab-runner
# 执行注册命令
PS D:\gitlab-runner> .\gitlab-runner-windows-amd64.exe register
Runtime platform                                    arch=amd64 os=windows pid=15984 revision=bbcb5aba version=12.4.0
# 填写gitlab的地址,确保容器内能够顺利访问到该地址
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.52.129/
# 填写需要注册的runner token,此处选择shared runner token
Enter the registration token:
BHRagrsztQAxdMPPhxGm
Enter a description for the runner:
[GLIC-IT-ZX02]: gitlab-runner-02
Enter tags for the runner (comma-separated):

Enter optional maintenance note for the runner:

Registering runner... succeeded                     runner=BHRagrsz
Enter an executor: custom, docker, docker-windows, docker-ssh, parallels, shell, ssh, docker+machine, kubernetes, virtualbox, docker-ssh+machine:
docker
Enter the default Docker image (for example, ruby:2.7):
docker:latest
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 "D:\\gitlab-runner\\config.toml"
# 执行安装命令(作为windows系统服务)
PS D:\gitlab-runner> .\gitlab-runner-windows-amd64.exe install
Runtime platform                                    arch=amd64 os=windows pid=12800 revision=bbcb5aba version=12.4.0
# 执行启动命令
PS D:\gitlab-runner> .\gitlab-runner-windows-amd64.exe start
Runtime platform                                    arch=amd64 os=windows pid=9932 revision=bbcb5aba version=12.4.0

我这里下载 32位,在64位系统也可以运行的,先启动runner注册

在这里插入图片描述

在注册之前我们需要确认下必须的配置

在这里插入图片描述

ssh-keygen -t rsa -b 4096 -C “your_email@example.com”

其中,-t参数指定了要生成的密钥类型为RSA算法;-b参数设置了密钥长度为4096位;-C参数后面跟着的是注释信息,可根据需求进行修改。

运行该命令后,会提示输入保存密钥文件的路径和名称,默认情况下会将公钥保存到~/.ssh/id_rsa.pub文件中,私钥则保存到同目录下的id_rsa文件中。如果不想更改默认路径和名称,直接按Enter键即可。然后还会要求输入一个安全性高的密码,这样每次连接时都需要输入该密码才能使用相应的私钥。(直接回车忽悠不填密码)

完成上述操作后,就可以得到所需的SSH公钥和私钥了。

在用户目录下可以找到生成的文件

在这里插入图片描述

在这里插入图片描述

将 id_rsa.pub 中内容 复制到gitlab 如下位置

在这里插入图片描述

点击添加密钥

在这里插入图片描述

Gitlab Runner 拉取代码需要保证runner所在机器安装Git(官网下载一个windows安装包安装即可)

在这里插入图片描述

接下来回到注册runner操作

在这里插入图片描述

在这里插入图片描述

这里有三类Runner。我们这里演示使用specific Runner

Gitlab Runner分为三种类型,在注册Runner过程中使用不同类型的token就能区分不同的类型。

Shared Runners,共享Runner,可以被仓库里面的任意项目使用;token获取位置为全局管理中心-Runner-注册令牌;
Group Runners,组Runner,仅能被某个组中的任意项目使用;token获取位置为项目群组-CICD-Runner-注册令牌;
Specific Runners,特定Runner,仅能被指定的项目使用;token获取位置为项目-设置-CICD-Runner-注册令牌;

在这里插入图片描述

接下来会提示你输入一系列配置内容

注意,在要求输入tag时,想好tag的名字,这个就相当于你的runner的id

## 输入url
a、Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
 
## 输入token
b、Please enter the gitlab-ci token for this runner
 
## 写个描述
c、Please enter the gitlab-ci description for this runner
 
## 这个tag很重要,好好想个名字并记住,随后在ci配置中需要对应上。
d、Please enter the gitlab-ci tags for this runner (comma separated)
 
## ci没有配置tags时是否执行这个runner?建议采用默认值。            
e、Whether to run untagged builds [true/false]
 
## 是否只对当前工程有效?理论上讲只有“Shared runners”才有效。选true。            
f、Whether to lock Runner to current project [true/false]
 
## 选择一个执行器。我们接来下的方案是基于shell的,输入shell。    
g、Please enter the executor: virtualbox, docker+machine, kubernetes, parallels, docker-ssh, shell, ssh, docker-ssh+machine, docker:

在这里插入图片描述

在这里插入图片描述

Gitlab Runner使用

我们首先准备一个项目,这个项目内容很简单,只是作为runner演示使用,总共两个文件:

  • index.html,用来表示项目的主页;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CICD测试</title>
</head>
<body>
<h1>Gitlab CICD 测试!!!</h1>
</body>
</html>

在这里插入图片描述

Gitlab Runner的运行需要的.gitlab-ci.yml,定义CICD流程的文件;

build-job:
  stage: build
  tags:
   - demo
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"

test-job1:
  stage: test
  tags:
   - demo
  script:
    - echo "This job tests something"

test-job2:
  stage: test
  tags:
   - demo
  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
  tags:
   - demo
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

大致的意思是,build阶段启动一个作业,输出一段文本;test阶段并行启动两个作业,也是分别输出一段文本;deploy阶段启动一个作业,输出一段文本;这三个阶段分别模拟了构建、测试、部署流程,具体的语法关键词等内容不属于本文范畴,可以参考官网。

以上项目内容提交到gitlab后,显示如下,仅有master分支:

在这里插入图片描述

此时,任意的提交行为、合并行为都会触发流水线的执行,但是也可以手动执行,我们此时选择项目中的CICD,流水线,并点击运行流水线。

在这里插入图片描述

如下是运行中的流水线状态,可以查看各个阶段的任务,点击任务图标还可以查看具体的任务执行明细。

在这里插入图片描述

点击执行的圆圈就可以查看执行日志

在这里插入图片描述

如下是运行四次流水线,runner的任务执行数量统计:

在这里插入图片描述

在这里插入图片描述

至此,我们完成了runner的搭建和注册,并运行了示例项目中的流水线。

提示:配置项目流水线需要用户拥有项目的Maintainer权限

Gitlab-runner的配置

GitLab-CI会为这个Runner生成一个唯一的token,以后Runner就通过这个token与GitLab-CI进行通信。

那么,问题来了。注册好了的Runner的信息存放在哪儿了呢?

原来,Runner的信息是存放在一个配置文件里面的,配置文件的格式一般是.toml。这个配置文件的存放位置有以下几种情况:

  • 在类Unix操作系统下(0.5.0之后版本)
    • 如果是以root用户身份运行gitlab-runner register,那么配置文件默认是/etc/gitlab-runner/config.toml
    • 如果是以非root用户身份运行gitlab-runner register,那么配置文件默认是~/.gitlab-runner/config.toml
  • 在其他操作系统下以及0.5.0之前版本

配置文件默认在当前工作目录下./config.toml

在这里插入图片描述

Linux环境下Runner

下载runner,根据自己对应服务器的型号自行选择下载:

https://docs.gitlab.com/runner/install/linux-manually.html

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# Linux x86-64
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

 # Linux x86
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386

 # Linux arm
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm

我选择对应Gitlab版本12.4.0的https://gitlab-runner-downloads.s3.amazonaws.com/v12.4.0/binaries/gitlab-runner-linux-amd64

下载完之后,需要给gitlab-runner执行权限,

sudo chmod +x /usr/local/bin/gitlab-runner

之后创建一个gitlab-runner用户,使用CI/CD时,都是在这个用户下进行的。

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

创建好了用户之后,接下来安装gitlab-runner

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

在这里插入图片描述

安装好以后,如上图所示

安装成功以后,启动gitlab-runner

sudo gitlab-runner start

如何注册使用gitlab-runner:

首先找到自己的gitlab项目下设置,CI/CD,Runner

img

可以看到如下:

在这里插入图片描述

URL,和注册令牌一会在注册runner的时候需要用到,

在自己的runner服务器上,输入如下命令,开始注册runner:

gitlab-runner register

填写刚刚上面看到的URL

回车后,输入URL下面的gitlab-ci token

输入完token后,回车

在这里插入图片描述

填写runner描述,这里自己填写

之后填写runner的tags,用于在之后CI/CD操作时标识使用哪个runner来进行流水线

在这里插入图片描述

之后选择需要以哪种方式运行runner,这里我选择用shell方式运行runner,大家可以自行根据自己需要选择

在这里插入图片描述

到此,runner就注册完毕了。可以到gitlab上看下,刚刚注册的runner是否存在

在这里插入图片描述

可以看到,这里就是我们刚刚注册的runner。

编写gitlab-ci.yaml验证

前提:安装Git、配置SSH密钥 (和上文windows操作类似)

build-job:
  stage: build
  tags:
   - demo
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"

test-job1:
  stage: test
  tags:
   - demo
  script:
    - echo "This job tests something"

test-job2:
  stage: test
  tags:
   - demo
  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
  tags:
   - demo
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

运行流水线

在这里插入图片描述

如果没有安装git 会报如下错误

在这里插入图片描述

安装Git后即可

在这里插入图片描述

在这里插入图片描述

配置文件位置(注册信息)

在这里插入图片描述

关于Gitlab-ci的yaml更多配置,可以参考官方参考文档:https://docs.gitlab.com/ee/ci/yaml/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力. 来自加利福利亚大学戴维斯分校计算机科学系的IFM实验室发表在arXiv上的文章:“Graph-ToolFormer: To Empower LLMs with Graph Reasoning Ability via Prompt Augmented by ChatGPT”。 文章的…

P1045 [NOIP2003 普及组] 麦森数题解

题目 形如的素数称为麦森数&#xff0c;这时P一定也是个素数。但反过来不一定&#xff0c;即如果P是个素数&#xff0c;不一定也是素数。到1998年底&#xff0c;人们已找到了37个麦森数。最大的一个是P3021377&#xff0c;它有909526位。麦森数有许多重要应用&#xff0c;它与…

pcl之滤波器(三)

pcl滤波器 pcl一共是有十二个主要模块&#xff0c;详细了解可以查看官网。https://pcl.readthedocs.io/projects/tutorials/en/latest/#basic-usage 今天学习一下pcl的滤波器模块。 滤波器模块&#xff0c;官网一共是提供了6个例程&#xff0c;今天看第五个、第六个。 从一…

P2246 SAC#1 - Hello World(升级版)

网址如下&#xff1a; P2246 SAC#1 - Hello World&#xff08;升级版&#xff09; - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 刚开始是用递归做的&#xff0c;虽然用了哈希表优化&#xff0c;但是超时&#xff0c;只得了50 后面想到了一个新的算法&#xff0c;时间复杂度…

Java笔记 --- 三、方法引用

三、方法引用 概述 分类 引用静态方法 引用成员方法 本类中注意&#xff0c;静态方法中没有this&#xff0c;需要创建本类的对象 引用构造方法 其他的调用方式 使用类名引用成员方法 引用数组的构造方法

【遥感专题系列】影像信息提取之——基于专家知识的决策树分类

可以将多源数据用于影像分类当中&#xff0c;这就是专家知识的决策树分类器&#xff0c;本专题以ENVI中Decision Tree为例来叙述这一分类器。 本专题包括以下内容&#xff1a; 专家知识分类器概述知识&#xff08;规则&#xff09;定义ENVI中Decision Tree的使用 概述 基于知…

微信小程序(二十)Vant组件库的配置

教程很详细&#xff0c;直接上过程 上一篇 官方文档也有&#xff0c;但是因为版本的更新&#xff0c;官方文档并没有跟着改变&#xff0c;这里我写一份最新版能用的教程 &#xff08;口头禅还是不能少的&#x1f923;&#x1f923;&#x1f923;&#xff09; 灵魂拷问&#xf…

jsp原理与EL,JSTL表达式基础内容整理

2024年了&#xff0c;vue都到了灌篮高手的版本&#xff0c;真的没想到我还会在这个时间整理一篇关于jsp页面操作的文章。技术就是一个不用就忘的东西&#xff0c;既然工作中还有用武之地&#xff0c;那就整理一下以备不时之需。 长话短说&#xff0c;不展开叙述&#xff0c;只记…

嘿嘿,vue之输出土味情话

有点好玩&#xff0c;记录一下。通过按钮调用网站接口&#xff0c;然后解构数据输出土味情话。 lovetalk.vue: <!--vue简单框架--> <template> <!-- 这是一个div容器&#xff0c;用于显示土味情话 --> <div class"talk"> <!-- 当点…

华为机考入门python3--(4)牛客4-字符串分隔

分类&#xff1a;字符串 知识点&#xff1a; 复制符号* 复制3个0 0*3 000 字符串截取 截取第i位到j-1位 str[i:j] 题目来自【牛客】 input_str input().strip()# 先补齐 if len(input_str) % 8 ! 0: input_str 0 * (8 - len(input_str) % 8) # 每8个分 out…

第15次修改了可删除可持久保存的前端html备忘录:换了一个容器时钟,匹配背景主题:现代深色

第15次修改了可删除可持久保存的前端html备忘录&#xff1a;换了一个容器时钟&#xff0c;匹配背景主题&#xff1a;现代深色 备忘录代码 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv&qu…

【安卓】不需要魔法使用AuthenticationApp解决Github报2FA双重验证警告的问题

如果你也收到了类似的警告信息&#xff0c;那就一起启用2FA吧​。 背景介绍 Github提供了四种2FA方式&#xff1a; AuthenticatorApp(今天要分享的就是这个)SMS/Text message: 由于SMS不支持国内手机号, 不可用Security keys: 由于该方式需要物理设备等&#xff0c;不好Githu…

数据库查询3

目录 1. 多表查询 1.1.1 介绍 1.1.2 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 2. 事务 2.1 操作 2.2 四大特性 数据库总结2 数据库总结1 1. 多表查询 1.1.1 介绍 多表查询&#xff…

vue3使用最新的属性defineModel实现父子组件数据响应式绑定

子父之间使用v-model双向绑定数据&#xff0c;子组件每次都要写emit和props觉得麻烦&#xff1f;以前&#xff0c;为了使组件支持与v-model双向绑定&#xff0c;它需要&#xff08;1&#xff09;声明prop&#xff0c;&#xff08;2&#xff09;在打算更新prop时发出相应的updat…

Keil导入文件的操作步骤

本文以STM32G431R8T6导入lcd.c文件为例 1 背景 作为最常用的单片机程序编辑工具&#xff0c;全球有超过10万的工程师在使用Keil&#xff0c;但初学者很有可能对Keil的各种信息和操作一无所知&#xff0c;我便是其中一员&#xff0c;由于最近看了很多Keil相关的教程&#xf…

3DGS 其二:Street Gaussians for Modeling Dynamic Urban Scenes

3DGS 其二&#xff1a;Street Gaussians for Modeling Dynamic Urban Scenes 1. 背景介绍1.1 静态场景建模1.2 动态场景建模 2. 算法2.1 背景模型2.2 目标模型 3. 训练3.1 跟踪优化 4. 下游任务 Reference&#xff1a; Street Gaussians for Modeling Dynamic Urban Scenes 1.…

微信小程序之页面导航、生命周期和WXS脚本

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

Genome-wide association studies in R

全基因组关联&#xff08;GWA&#xff09;研究扫描整个物种基因组&#xff0c;寻找多达数百万个SNPs与特定感兴趣特征之间的关联。值得注意的是&#xff0c;感兴趣的性状实际上可以是归因于群体的任何类型的表型&#xff0c;无论是定性的&#xff08;例如疾病状态&#xff09;还…

分布式数据实现跨设备数据同步的N个秘密 | 分布式数据管理解析(二)

上期我们给大家带来分布式数据管理如何完成数据存储&#xff0c;数据同步&#xff0c;数据跨端访问&#xff0c;并保证整个过程中跨设备数据安全的解读。 这都得益于分布式数据管理平台抽象出的三大关键技术——分布式数据库&#xff0c;分布式文件系统和融合搜索。 那么这三…

Scrapy IP()类 编程指南(基础)

Scrapy IP()类 编程指南&#xff08;基础&#xff09; IP简介 工欲善其事&#xff0c;必先利其器&#xff0c;在聊Scapy IP类时&#xff0c;我们先要了解IP是什么。 IP指的是Internet Protocol&#xff08;互联网协议&#xff09;的数据包。Internet Protocol是互联网上用于在…