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
访问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
可以看到如下:
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/