舍得
2022/05/07阅读:44主题:丘比特忙
实战:Terraform 部署GitLab-2022.5.7

目录
实验环境
win10笔记本
2台centos7.6虚机(1台用作部署gitlab server(需要具有docker/terraform环境),一台用作跑gitlab runner)
Terraform版本: v1.1.8
docker版本: v20.10.11
gitlab版本:gitlab/gitlab-ce:14.9.3-ce.0
gitlab-ruuner版本:gitlab-runner-14.9.1-1.x86_64.rpm
实验软件
链接:https://pan.baidu.com/s/1vGpLqcTR-6Db0OaUr9LH8Q?pwd=puoj 提取码:puoj 2022.5.7-Terraform 部署GitLab-code

前置条件
-
centos7 机器需要提前安装好 terraform 环境、docker 环境;
1、部署 gitlab server
1.创建本地持久化目录
-
本次测试目录:
[root@devops remote-vscode]#pwd
/root/remote-vscode
[root@devops remote-vscode]#ls
gitlab.tf
-
创建本地目录:
[root@devops remote-vscode]#mkdir -p /data/devops4/gitlab/logs
[root@devops remote-vscode]#mkdir -p /data/devops4/gitlab/data
[root@devops remote-vscode]#mkdir -p /data/devops4/gitlab/config

-
先确认本地主机端口是否被占用
[root@devops remote-vscode]#netstat -antlp|grep 80
[root@devops remote-vscode]#netstat -antlp|grep 443
[root@devops remote-vscode]#netstat -antlp|grep 2222

2.使用 terraform 部署 gitlab
-
准备好 terraform 需要用到的配置文件
cat main.tf :
# 定义provider(main.tf)
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.13.0"
}
}
}
cat gitlab.tf:
resource "docker_image" "gitlab" {
name = "gitlab/gitlab-ce:14.9.3-ce.0"
keep_locally = true //销毁时不删除本地镜像
}
resource "docker_container" "gitlab" {
image = docker_image.gitlab.name
name = "devops_tutorial_gitlab"
ports { #本次课程目前只用到80端口
internal = 80
external = 80
}
ports {
internal = 443
external = 443
}
ports {
internal = 22
external = 2222
}
volumes{
container_path = "/etc/gitlab" #gitlab配置文件
host_path = "/data/devops4/gitlab/config"
}
volumes{
container_path = "/var/log/gitlab" #gitlab日志文件
host_path = "/data/devops4/gitlab/logs"
}
volumes{
container_path = "/var/opt/gitlab" #gitlab数据
host_path = "/data/devops4/gitlab/data"
}
}
-
terraform init
[root@devops remote-vscode]#terraform init

-
terraform plan
[root@devops remote-vscode]#terraform plan

-
terraform apply
[root@devops remote-vscode]#terraform apply

:warning: 注意:gitlab 的镜像很大的,需要 2.45GB,因此这里需要等好久,耐心等待即可!(如果实在不行,可先用 docker 把近线拉取下下来,再执行 terraroem 命令)


3.验证
-
查看容器状态
[root@devops remote-vscode]#docker ps

-
查看 gitlab 容器日志
[root@devops remote-vscode]#docker logs -f 790a4c992c45

-
网页验证
登录http://宿主机ip/
http://172.29.9.101/

-
输入密码
默认密码: 进入容器:/etc/gitlab/initial_root_password #14 版本以后发生了变化!
root 密码
新的密码:Devops123456
[root@devops remote-vscode]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
790a4c992c45 gitlab/gitlab-ce:14.9.3-ce.0 "/assets/wrapper" 12 minutes ago Up 12 minutes (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:2222->22/tcp devops_tutorial_gitlab
[root@devops remote-vscode]#docker exec devops_tutorial_gitlab cat /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
# 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
# 2. Password hasn't been changed manually, either via UI or via command line.
#
# If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
Password: cO/jgYrZ1JBxjHxVwCjXbh/a2HxTRMGpuLUfo9XYLJM=
# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
[root@devops remote-vscode]#
-
修改 root 密码:
点击头像-Preferences-Passsword
,修改密码:

使用修改后的额密码登录 gitlab:


结束。😘
2、部署 GitLab Runner
什么是 Gitlab runner
-
GitLab Runner 是一个开源项目,用于运行作业并将结果发送回 GitLab。 -
与 GitLabCI 结合使用,GitLabCI 是 GitLab 随附的用于协调作业的开源持续集成服务。 -
GitLab Runner 是用 Go 编写的,可以在 Linux,macOS 和 Windows 操作系统上运行。 -
容器部署需使用最新 Docker 版本。GitLab Runner 需要最少的 Docker v1.13.0。 -
GitLab Runner 版本应与 GitLab 版本同步。(避免版本不一致导致差异化) -
可以根据需要配置任意数量的 Runner。

注意:建议将 runner 和 gitlab server 放在不同机器上运行,否则可能不能正常运行,并且也会给 servre 带来性能上的影响。
类型
-
shared 共享类型,运行整个平台项目的作业(gitlab) -
group 项目组类型,运行特定 group 下的所有项目的作业(group) -
specific 项目类型,运行指定的项目作业(project)
后面我们都是在平台类型上注册 runner 的:(注册时需要带上 token)

状态
-
locked: 锁定状态,无法运行项目作业 -
paused: 暂停状态,暂时不会接受新的作业
步骤:
-
安装 gitlab-runner
工具 -
使用 gitlab-runner
工具向GitLab Server
注册 Runner 节点。
1.在 Linux 系统安装 GR
🍀 基于 Linux CentOS8 操作系统, 部署 GitLabRunner。
GitLab 部署包下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/
Runner 部署包下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el8-x86_64/
🍀 自己本次测试:
-
Runner 部署包下载:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7-x86_64/
## 安装runner
rpm -ivh gitlab-runner-14.0.0-1.x86_64.rpm
## 查看进程
[root@zeyang-nuc-service gitlab-runner]# ps aux | grep -v grep | grep runner
root 694811 0.1 0.1 152232 35720 ? Ssl 22:04 0:00 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner
-
下载并安装 gitlab-runner rpm 安装包
[root@gitlab-runner ~]#ll -h gitlab-runner-14.9.1-1.x86_64.rpm
-rw-r--r-- 1 root root 415M May 5 07:00 gitlab-runner-14.9.1-1.x86_64.rpm
[root@gitlab-runner ~]#rpm -ivh gitlab-runner-14.9.1-1.x86_64.rpm
warning: gitlab-runner-14.9.1-1.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 35dfa027: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:gitlab-runner-14.9.1-1 ################################# [100%]
GitLab Runner: creating gitlab-runner...
Home directory skeleton not used
Runtime platform arch=amd64 os=linux pid=7555 revision=f188edd7 version=14.9.1
gitlab-runner: the service is not installed
Runtime platform arch=amd64 os=linux pid=7561 revision=f188edd7 version=14.9.1
gitlab-ci-multi-runner: the service is not installed
Runtime platform arch=amd64 os=linux pid=7579 revision=f188edd7 version=14.9.1
Runtime platform arch=amd64 os=linux pid=7613 revision=f188edd7 version=14.9.1
INFO: Docker installation not found, skipping clear-docker-cache
-
验证
#查看进程
[root@gitlab-runner ~]#ps -aux|grep gitlab-runner
root 7619 0.1 1.3 748044 25544 ? Ssl 12:44 0:00 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner
root 7629 0.0 0.0 112708 976 pts/1 S+ 12:45 0:00 grep --color=auto gitlab-runner
#查看版本
[root@gitlab-runner ~]#gitlab-runner -v
Version: 14.9.1
Git revision: f188edd7
Git branch: 14-9-stable
GO version: go1.17.7
Built: 2022-03-22T20:45:44+0000
OS/Arch: linux/amd64
:warning: 注意:
[root@gitlab-runner ~]#cat /etc/gitlab-runner/config.toml #gitlab-runner的配置文件
concurrent = 1 #并发数
check_interval = 0
[session_server]
session_timeout = 1800
2.Runner 注册配置使用
1、获取 GitLab 地址和 Runner 注册 token
随便打开一个项目:

来到Settings-CI/CD-Runners
:

或者使用如下方法来获取 token:
点击Menu/Admin/Runners
:


保存下上面这个 token:
9Yni-g-svEdGJqZrs2Vv
🍀 自己安装测试过程

#再查看下当前环境
[root@gitlab-runner ~]#cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@gitlab-runner ~]#git version
git version 1.8.3.1
[root@gitlab-runner ~]#gitlab-runner --version
Version: 14.9.1
Git revision: f188edd7
Git branch: 14-9-stable
GO version: go1.17.7
Built: 2022-03-22T20:45:44+0000
OS/Arch: linux/amd64
#自己gitlab server是在容器里跑的,gitlab-runner是另外一台虚机!
2、运行注册命令
🍀 源课件内容
[root@zeyang-nuc-service gitlab-runner]# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=40969 revision=f188edd7 version=14.9.1
Running in system-mode.
## 输入GitLab实例的URL
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.1.200
## 输入Runner注册Token
Enter the registration token:
m5ucdGk2_uPJ2K9BP8-d
## 填写该注册Runner的描述信息
Enter a description for the runner:
[zeyang-nuc-service]: build runner
## 为该Runner配置一个标签(后续作业可以通过tag指定在哪个runner上面运行构建)
Enter tags for the runner (comma-separated):
build,go,maven
Enter optional maintenance note for the runner:
Registering runner... succeeded runner=m5ucdGk2
## 为Runner选择一个执行器
Enter an executor: docker, parallels, ssh, docker+machine, docker-ssh+machine, custom, docker-ssh, shell, virtualbox, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
默认注册采用的交互式,需要交互填写信息。 m5ucdGk2_uPJ2K9BP8-d
-
使用非交互模式注册:
gitlab-runner register \
--non-interactive \
--url "http://192.168.1.200/" \
--registration-token "m5ucdGk2_uPJ2K9BP8-d" \
--executor "shell" \
--description "buildrunner" \
--tag-list "build,k8s,go" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
🍀 自己本次实践过程
gitlab-runner register \
--non-interactive \
--url "http://172.29.9.101/" \
--registration-token "9Yni-g-svEdGJqZrs2Vv" \
--executor "shell" \
--description "buildrunner" \
--tag-list "build,k8s,go" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"

可以,看到,也注册成功了:

3、刷新 GitLab 管理页面

gitlab Runner 常用命令
-
gitlab Runner 常用命令
gitlab-runner register #默认交互模式下使用,非交互模式添加 --non-interactive
gitlab-runner list #此命令列出了保存在配置文件中的所有运行程序
gitlab-runner verify #此命令检查注册的runner是否可以连接,但不验证GitLab服务是否正在使用runner。 --delete 删除
gitlab-runner unregister #该命令使用GitLab取消已注册的runner。
#使用令牌注销
gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n
#使用名称注销(同名删除第一个)
gitlab-runner unregister --name test-runner
#注销所有
gitlab-runner unregister --all-runners
-
Runner 配置文件
通过 Gitlab 后台可以看下 runner 的配置:

Path: /etc/gitlab-runner/config.toml
concurrent = 1 ## 可并行运行作业的数量, 0表示不限制;
check_interval = 0 ## 检查新作业的时间间隔, 0表示默认 3秒;
[session_server] ## 允许用户与作业进行交互,例如web终端;这个k8s测试里会用到!
session_timeout = 1800
[[runners]]
name = "my first runner" ## Runner名称;
url = "http://192.168.1.200/" ## GitLab Server地址;
token = "z6QEqyGpDrvzNgfxLiVh" ## Runner token;
executor = "shell" ## Runner的执行器;
[runners.custom_build_dir] ## 允许用户为作业定义自定义构建目录;
[runners.cache] ## 分布式缓存目录;
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]

-
高级配置参考: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnerscustom-section
注意:docker 类型的 runner 注册,配置文件要改很多,例如镜像的下载策略等!
注意事项
1.登录 gitlab 报 502 错误问题

2.解决容器名解析
问题

这边打开后,会出现问题:

有几种解决办法:
1.修改容器里的配置
2.在自己笔记本的 hosts 里添加域名解析
方法 1:修改容器里的配置
[root@devops remote-vscode]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
790a4c992c45 gitlab/gitlab-ce:14.9.3-ce.0 "/assets/wrapper" 5 hours ago Up 5 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:2222->22/tcp devops_tutorial_gitlab
[root@devops remote-vscode]#docker exec -it devops_tutorial_gitlab bash
root@790a4c992c45:/# vim /etc/gitlab/gitlab.rb
取消注释这行,并将这里的`GENERATED_EXTERNAL_URL`替换为gitlab所在虚拟机的ip即可:


执行生效命令:
root@790a4c992c45:/# gitlab-ctl reconfigure
这里需要稍等一会儿:

重新配置后,我们再次来验证下效果:


这边可以看到,以上那个问题被解决了。😘
方法 2:在自己笔记本的 hosts 里添加域名解析
#C:\WINDOWS\System32\drivers\etc
172.29.9.101 790a4c992c45
3.一台虚机是可以同时充当几个 runner 的
gitlab-runner register \
--non-interactive \
--url "http://172.29.9.101/" \
--registration-token "9Yni-g-svEdGJqZrs2Vv" \
--executor "shell" \
--description "buildrunner" \
--tag-list "build,k8s,go" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"



4.gitlab 不能跨大版本升级
例如,你是 12 版本,你只能先升级到 12 最新版本,然后再升级到 1 版本,再升级到 13 最新版本,再升级到 14 版本! ---2022.5.5
5.gitlab runnergit版本
问题
后续 gitlab-ci 跑流水线实验时会出问题,因此要升级到 2 版本以上的!

关于我
我的博客主旨:
-
排版美观,语言精炼; -
文档即手册,步骤明细,拒绝埋坑,提供源码; -
本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
-
个人微信二维码:x2675263825 (舍得), qq:2675263825。
image-20211002091450217 -
个人微信公众号:《云原生架构师实战》
image-20211002141739664 -
个人 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
image-20211002092344616 -
个人已开源干货 😘
不服来怼:宇宙中最好用的云笔记 & 其他开源干货:https://www.yuque.com/go/doc/73723298?#
image-20220423100718009 -
个人博客:(www.onlyyou520.com)
image-20220507104750327 -
知乎:https://www.zhihu.com/people/foryouone/posts
image-20220507123311568
最后
好了,关于本次实验就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!
作者介绍