舍得

V2

2022/05/07阅读:44主题:丘比特忙

实战:Terraform 部署GitLab-2022.5.7

image-20220507101128416
image-20220507101128416

目录

实验环境

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

image-20220507122933741
image-20220507122933741

前置条件

  • 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
image-20220505075932960
  • 先确认本地主机端口是否被占用
[root@devops remote-vscode]#netstat -antlp|grep 80
[root@devops remote-vscode]#netstat -antlp|grep 443
[root@devops remote-vscode]#netstat -antlp|grep 2222
image-20220505080500941
image-20220505080500941

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
image-20220505080143458
image-20220505080143458
  • terraform plan
[root@devops remote-vscode]#terraform plan
image-20220505080233500
image-20220505080233500
  • terraform apply
[root@devops remote-vscode]#terraform apply
image-20220505082423560
image-20220505082423560

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

image-20220505100138221
image-20220505100138221
image-20220505100125352
image-20220505100125352

3.验证

  • 查看容器状态
[root@devops remote-vscode]#docker ps
image-20220505095632295
image-20220505095632295
  • 查看 gitlab 容器日志
[root@devops remote-vscode]#docker logs -f  790a4c992c45
image-20220505095607680
image-20220505095607680
  • 网页验证

登录http://宿主机ip/

http://172.29.9.101/

image-20220505082927535
image-20220505082927535
  • 输入密码

默认密码: 进入容器:/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,修改密码:

image-20220505100831950
image-20220505100831950

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

image-20220505100959731
image-20220505100959731
image-20220505103358968
image-20220505103358968

结束。😘

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。
image-20220505104412269
image-20220505104412269

注意:建议将 runner 和 gitlab server 放在不同机器上运行,否则可能不能正常运行,并且也会给 servre 带来性能上的影响。

类型

  • shared 共享类型,运行整个平台项目的作业(gitlab)
  • group 项目组类型,运行特定 group 下的所有项目的作业(group)
  • specific 项目类型,运行指定的项目作业(project)

后面我们都是在平台类型上注册 runner 的:(注册时需要带上 token)

image-20220505110229006
image-20220505110229006

状态

  • 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

随便打开一个项目:

image-20220505125451301
image-20220505125451301

来到Settings-CI/CD-Runners:

image-20220505125546608
image-20220505125546608

或者使用如下方法来获取 token:

点击Menu/Admin/Runners

image-20220505105632269
image-20220505105632269
image-20220505105641693
image-20220505105641693

保存下上面这个 token:

9Yni-g-svEdGJqZrs2Vv

🍀 自己安装测试过程

image-20220505143146045
image-20220505143146045
#再查看下当前环境
[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"
image-20220505152012668
image-20220505152012668

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

image-20220505152049296
image-20220505152049296

3、刷新 GitLab 管理页面

image-20220505143408163
image-20220505143408163

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 的配置:

image-20220505152417443
image-20220505152417443

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]
image-20220505152659272
image-20220505152659272
  • 高级配置参考: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnerscustom-section

注意:docker 类型的 runner 注册,配置文件要改很多,例如镜像的下载策略等!

注意事项

1.登录 gitlab 报 502 错误问题

image-20220507102603453
image-20220507102603453

2.解决容器名解析问题

image-20220505144856493
image-20220505144856493

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

image-20220505144826455
image-20220505144826455

有几种解决办法:

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即可:
image-20220505145847977
image-20220505145847977
image-20220505150227098
image-20220505150227098

执行生效命令:

root@790a4c992c45:/# gitlab-ctl reconfigure

这里需要稍等一会儿:

image-20220505150537563
image-20220505150537563

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

image-20220505150657554
image-20220505150657554
image-20220505150714352
image-20220505150714352

这边可以看到,以上那个问题被解决了。😘

方法 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"
image-20220505164550813
image-20220505164550813
image-20220507104150260
image-20220507104150260
image-20220507104225875
image-20220507104225875

4.gitlab 不能跨大版本升级

例如,你是 12 版本,你只能先升级到 12 最新版本,然后再升级到 1 版本,再升级到 13 最新版本,再升级到 14 版本! ---2022.5.5

5.gitlab runnergit版本问题

后续 gitlab-ci 跑流水线实验时会出问题,因此要升级到 2 版本以上的!

image-20220507122815955
image-20220507122815955

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
  1. 个人微信二维码:x2675263825 (舍得), qq:2675263825。

    image-20211002091450217
    image-20211002091450217
  2. 个人微信公众号:《云原生架构师实战》

    image-20211002141739664
    image-20211002141739664
  3. 个人 csdn

    https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

    image-20211002092344616
    image-20211002092344616
  4. 个人已开源干货 😘

    不服来怼:宇宙中最好用的云笔记 & 其他开源干货:https://www.yuque.com/go/doc/73723298?#

    image-20220423100718009
    image-20220423100718009
  5. 个人博客:(www.onlyyou520.com)

    image-20220507104750327
    image-20220507104750327
  6. 知乎:https://www.zhihu.com/people/foryouone/posts

    image-20220507123311568
    image-20220507123311568

最后

好了,关于本次实验就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

分类:

后端

标签:

后端

作者介绍

舍得
V2