DevOps系列文章之 GitLabCI汇总

GitlabCI环境搭建

前提 先安装 docker

Docker容器化安装

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

创建挂载目录

java 复制代码
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

访问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>

    Gitlab CICD 测试!!!

    </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

可以看到如下:

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/

相关推荐
七夜zippoe6 分钟前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6482 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满2 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠2 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9032 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技3 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀3 小时前
Linux环境变量
linux·运维·服务器
zzzsde4 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º5 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~5 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化