点开一个项目就可以看到流水线的CI/CD管道信息,包含了流水线的状态,流水线的ID,后面就是分支,谁触发的,流水线每个步骤的状态。
可以看到gitlab自带了CI/CD的功能,不需要额外的安装。gitlab提供了完整的CI/CD功能,不要额外的安装工具链来实现,如果公司的项目不是特别多,可以使用gitlab,就不需要安装太多的工具链,减少运维成本。
版本: 14.0.0
RPM参考文档:https://www.yuque.com/zeyangli/bqsigl/rgdrnw
## 下载镜像
docker pull gitlab/gitlab-ce:14.0.0-ce.0
## 创建数据目录
mkdir -p /data/cicd/gitlab/{config,logs,data}
chmod 777 -R /data/cicd/gitlab/
## 运行
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab \
--restart always \
-v /data/cicd/gitlab/config:/etc/gitlab \
-v /data/cicd/gitlab/logs:/var/log/gitlab \
-v /data/cicd/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:14.0.0-ce.0
FAQ
[root@zeyang-nuc-service ~]# git clone http://927c154cfffa/devops/demo-hello-service.git
Cloning into 'demo-hello-service'...
fatal: unable to access 'http://927c154cfffa/devops/demo-hello-service.git/': Could not resolve host: 927c154cfffa
[root@zeyang-nuc-service ~]# docker ps | grep gitlab
927c154cfffa gitlab/gitlab-ce:13.10.0-ce.0 "/assets/wrapper" 21 minutes ago Up 21 minutes (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:222->22/tcp gitlab
[root@zeyang-nuc-service ~]#
解决方法
docker exec -it gitlab bash
root@927c154cfffa:/# vi /etc/gitlab/gitlab.rb
root@927c154cfffa:/# gitlab-ctl reconfigure
gitlab是一个项目,gitlab runner也是一个单独的项目,runner类似于Jenkins的slave节点,也是server去调度,然后分配作业。
建议runner和server是分开的,因为它们安装在一起可能无法工作,而且对server可能产生性能方面的影响,所以分为两台机器去管理。
当你在server上面提交代码的时候,触发ci/cd其实就是在runner上面去运行的。
GitLab Runner 14.9 下载
https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el8-x86_64/gitlab-runner-14.9.1-1.x86_64.rpmhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el8-x86_64/gitlab-runner-14.9.1-1.x86_64.rpm
gitlab里面有项目组,项目组里面还有project,你可以在group里面注册runner,也可以在project里面注册runner。
如果是每个项目组去管理自己的构建机器,那么注册group类型的就可以了,这样组里面的人都可以使用runner。如果所有的资源都是集中去配置管理的,那么就是去全局注册runner,这就不分什么项目组去使用,所有都可以使用。
类型
状态
步骤:
gitlab-runner
工具gitlab-runner
工具向GitLab Server
注册Runner节点。Runner部署包下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7-x86_64/
[root@gitlab-dockerhub ~]# ls
gitlab-runner-14.0.0-1.x86_64.rpm
[root@gitlab-dockerhub ~]# rpm -ivh gitlab-runner-14.0.0-1.x86_64.rpm
warning: gitlab-runner-14.0.0-1.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 35dfa027: NOKEY
error: Failed dependencies:
git is needed by gitlab-runner-14.0.0-1.x86_64
[root@gitlab-dockerhub ~]# yum install git -y
[root@gitlab-dockerhub ~]# rpm -ivh gitlab-runner-14.0.0-1.x86_64.rpm
warning: gitlab-runner-14.0.0-1.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 35dfa027: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:gitlab-runner-14.0.0-1 ################################# [100%]
GitLab Runner: creating gitlab-runner...
Home directory skeleton not used
Runtime platform arch=amd64 os=linux pid=7771 revision=3b6f852e version=14.0.0
gitlab-runner: the service is not installed
Runtime platform arch=amd64 os=linux pid=7781 revision=3b6f852e version=14.0.0
gitlab-ci-multi-runner: the service is not installed
Runtime platform arch=amd64 os=linux pid=7811 revision=3b6f852e version=14.0.0
Runtime platform arch=amd64 os=linux pid=7847 revision=3b6f852e version=14.0.0
Check and remove all unused containers (both dangling and unreferenced) including volumes.
------------------------------------------------------------------------------------------
Total reclaimed space: 0B
#/etc/gitlab-runner/config.toml这个为其配置文件
[root@gitlab-dockerhub ~]# ps aux | grep -v grep | grep runner
root 7857 0.0 0.2 151960 17388 ? Ssl 10:27 0:00 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner
这个就说明你的runner已经安装好了。
[root@jenkins ~]# gitlab-runner -v
Version: 13.7.0
Git revision: 943fc252
Git branch: 13-7-stable
GO version: go1.13.8
Built: 2020-12-21T13:47:06+0000
OS/Arch: linux/amd64
可以看到是使用gitlab-runner用户启动的,同时是使用/etc/gitlab-runner/config.toml这个作为其配置文件的。
[root@jenkins ~]# ps -ef | grep runner
root 13227 1 0 14:42 ? 00:00:00 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner
工作目录
[root@jenkins ~]# cd /home/gitlab-runner/
[root@jenkins gitlab-runner]# ls
1ssCE2ri76RiinkMGKgj
注册的时候有一系列的命令,注册的过程是一个交互的过程,需要填一些信息
gitlab url地址-----》token-----》备注,也就是描述信息
标签信息就像Jenkins一样
[root@gitlab-dockerhub ~]# cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[root@gitlab-dockerhub ~]# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=22183 revision=3b6f852e version=14.0.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://139.198.166.235:81
Enter the registration token:
1ssCE2ri76RiinkMGKgj
Enter a description for the runner:
[gitlab-dockerhub]: devops01
Enter tags for the runner (comma-separated):
build,k8sbuild,go,java
Registering runner... succeeded runner=1ssCE2ri
Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
runner执行器有很多种类型,这次注册的是shell类型的。
Enter an executor: docker+machine, virtualbox, docker-ssh+machine, custom, docker, docker-ssh, parallels, shell, ssh, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
现在还是锁定状态,这样runner就注册好了。后面就要写执行器了,执行器概念和Jenkins类似,运行的作业,执行器就是帮我们去运行作业的,gitlab执行器有很多种,有docker类型如下:
Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
这里选择shell类型执行器
Enter tags for the runner (comma-separated):
build,k8sbuild,go,java
Registering runner... succeeded runner=1ssCE2ri
Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
可以看到执行器注册好了
[root@gitlab-dockerhub ~]# gitlab-runner list
Runtime platform arch=amd64 os=linux pid=26860 revision=3b6f852e version=14.0.0
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
devops01 Executor=shell Token=Tt2yusRjFFFDPQ87Rvsd URL=http://139.198.166.235:81
查看一下现在的状态
Indicates whether this runner can pick jobs without tags:在运行作业的时候会分配一个标签,这个标签会指定在哪个runner上面执行,但作业没有指定这个标签,如果想让其执行勾选就行了。
因为是共享类型的runner,那些作业可以使用这个runner可以在这里启用
上面就一个一个runner的注册过程就完成了。
上面是使用交互模式进行配置,使用非交互模式注册(有的时候需要加入很多runner,那么可以写脚本)
gitlab-runner register \
--non-interactive \
--url "http://192.168.1.200/" \
--registration-token "Bd6gzBK5evJqa9wN99Nf" \
--executor "shell" \
--description "buildrunner" \
--tag-list "build,k8s,go" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
如果需要修改gitlab的url
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.11.129'
[root@localhost ~]# gitlab-ctl reconfigure
runner里面有些状态是可以去设置的,
这里有untagged jobs,运行一个作业,这个作业没有去指定runner,也就是这个runner是否能够去运行没有指定runner的作业。
下面是runner的配置文件。
[root@jenkins ~]# cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "build runner"
url = "http://192.168.11.129/"
token = "kjUu3xQuafYXnEy3YRQE"
executor = "shell"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
最重要的就是runner可以并行运行作业的数量,并行运行是多个作业同时去运行,如果有多个作业过来了就得排队。可以改大点,0代表不限制。
有些时候提交代码触发ci、cd很慢,取决于你这个时间,它默认是3s检查一次,提交代码最少等3s之后runner才能去运行。所以这里是检查作业的时间间隔,这里使用默认的就可以了。
Jenkins有个workspace,那个目录也可以改,使用node的标签作为自定义的workspace,它也有一个自定义的目录。[runners.custom_build_dir]
同时也支持缓存,这个缓存就是为了帮助我们去加速构建。有分布式缓存和本地缓存。分布式缓存就是多个runner可以使用一个缓存,当你的作业不管调用到哪个runner,都可以快速的去运行。
本地缓存就只能在本地了。
[root@jenkins ~]# gitlab-runner list
Runtime platform arch=amd64 os=linux pid=17382 revision=943fc252 version=13.7.0
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
build runner Executor=shell Token=kjUu3xQuafYXnEy3YRQE URL=http://192.168.11.129/
[root@jenkins ~]# gitlab-runner verify
Runtime platform arch=amd64 os=linux pid=17391 revision=943fc252 version=13.7.0
Running in system-mode.
Verifying runner... is alive runner=kjUu3xQu
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