DevOps系列文章之 GitLabCI汇总

GitlabCI环境搭建

前提 先安装 docker

Docker容器化安装

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

DevOps系列文章之 GitLabCI汇总_第1张图片

创建挂载目录

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

DevOps系列文章之 GitLabCI汇总_第2张图片

启动容器

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

DevOps系列文章之 GitLabCI汇总_第3张图片

修改配置信息

vi /srv/gitlab/config/gitlab.rb

DevOps系列文章之 GitLabCI汇总_第4张图片

修改后重启容器

docker restart gitlab2

DevOps系列文章之 GitLabCI汇总_第5张图片

访问Gitlab登录页面

DevOps系列文章之 GitLabCI汇总_第6张图片

使用模板创建一个项目

DevOps系列文章之 GitLabCI汇总_第7张图片

DevOps系列文章之 GitLabCI汇总_第8张图片

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'

DevOps系列文章之 GitLabCI汇总_第9张图片

启动安装

cd /home/dukang

docker-compose -f docker-compose.yml up

DevOps系列文章之 GitLabCI汇总_第10张图片

在这里插入图片描述

访问Gitlab登录页面

DevOps系列文章之 GitLabCI汇总_第11张图片

DevOps系列文章之 GitLabCI汇总_第12张图片

安装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

DevOps系列文章之 GitLabCI汇总_第13张图片

首先在官网下载对应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注册

DevOps系列文章之 GitLabCI汇总_第14张图片

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

DevOps系列文章之 GitLabCI汇总_第15张图片

ssh-keygen -t rsa -b 4096 -C “[email protected]

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

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

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

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

DevOps系列文章之 GitLabCI汇总_第16张图片

DevOps系列文章之 GitLabCI汇总_第17张图片

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

DevOps系列文章之 GitLabCI汇总_第18张图片

点击添加密钥

DevOps系列文章之 GitLabCI汇总_第19张图片

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

DevOps系列文章之 GitLabCI汇总_第20张图片

接下来回到注册runner操作

DevOps系列文章之 GitLabCI汇总_第21张图片

DevOps系列文章之 GitLabCI汇总_第22张图片

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

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

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

DevOps系列文章之 GitLabCI汇总_第23张图片

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

注意,在要求输入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:

DevOps系列文章之 GitLabCI汇总_第24张图片

DevOps系列文章之 GitLabCI汇总_第25张图片

Gitlab Runner使用

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

  • index.html,用来表示项目的主页;



    
    CICD测试


Gitlab CICD 测试!!!

DevOps系列文章之 GitLabCI汇总_第26张图片

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分支:

DevOps系列文章之 GitLabCI汇总_第27张图片

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

DevOps系列文章之 GitLabCI汇总_第28张图片

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

DevOps系列文章之 GitLabCI汇总_第29张图片

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

DevOps系列文章之 GitLabCI汇总_第30张图片

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

DevOps系列文章之 GitLabCI汇总_第31张图片

DevOps系列文章之 GitLabCI汇总_第32张图片

至此,我们完成了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

DevOps系列文章之 GitLabCI汇总_第33张图片

Linux环境下Runner

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

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

DevOps系列文章之 GitLabCI汇总_第34张图片

DevOps系列文章之 GitLabCI汇总_第35张图片

DevOps系列文章之 GitLabCI汇总_第36张图片

# 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

DevOps系列文章之 GitLabCI汇总_第37张图片

安装好以后,如上图所示

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

sudo gitlab-runner start

如何注册使用gitlab-runner:

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

DevOps系列文章之 GitLabCI汇总_第38张图片

可以看到如下:

DevOps系列文章之 GitLabCI汇总_第39张图片

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

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

gitlab-runner register

填写刚刚上面看到的URL

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

输入完token后,回车

DevOps系列文章之 GitLabCI汇总_第40张图片

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

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

在这里插入图片描述

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

DevOps系列文章之 GitLabCI汇总_第41张图片

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

DevOps系列文章之 GitLabCI汇总_第42张图片

可以看到,这里就是我们刚刚注册的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."

运行流水线

DevOps系列文章之 GitLabCI汇总_第43张图片

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

DevOps系列文章之 GitLabCI汇总_第44张图片

安装Git后即可

DevOps系列文章之 GitLabCI汇总_第45张图片

DevOps系列文章之 GitLabCI汇总_第46张图片

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

DevOps系列文章之 GitLabCI汇总_第47张图片

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

你可能感兴趣的:(DevOps,Java技术架构师,容器化,devops,运维)