说明
GitLab CI/CD是GitLab平台的一部分,它是一个完全集成的持续集成和持续部署解决方案。GitLab CI/CD支持自定义构建流程,提供了与GitLab仓库的无缝集成,并允许团队成员通过简单的配置文件来定义构建和部署任务。
centos7上安装gitlab
下载gitlab的rpm包
前往清华源去下载gitlab的rpm包
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
rpm -ivh 包名
修改gitlab.yml配置文件,将host改成你自己服务器的ip地址(默认应该是gitlab.example.com)
gitlab:
host:
port: 80
https: false
重启gitlab
gitlab-ctl restart
编辑站点地址
vim /etc/gitlab.rb
添加
external_url 'http://192.168.8.100' <-里面是你自己设置外部的ip地址
重启gitlab
gitlab-ctl restart
centos7上安装gitlab-runner
下载gitlab-runner
前往清华源去下载gitlab-runner的rpm包
https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/
yum install -y git
rpm -ivh gitlab-runner-12.9.0-1.x86_64.rpm
启动gitlab-runner
systemctl start gitlab-runner
可以使用-h来测试gitlab-runner是否安装启动成功
gitlab-runner -h
gitlab-runner注册
登录gitlab仓库,找到自己的项目 (前提是需要有管理员的权限)
找到settings里面的runner
下拉找到specific runners, 可以看到注册所需要的URL以及对应的一个token
在服务器上进行如下操作(这里采用交互式注册方式)
注册runner:
gitlab-runner register
分别输入刚刚复制的URL和Token
输入对这个runner的一个描述信息以及tag标签
选择一个执行器,这里默认选择shell
出现successfully则代表runner已经注册成功
gitlab非交互式的注册方式
gitlab-runner register
–non-interactive \ #非交互式注册
–url “http://192.168.159.143/” \ #项目的URL地址
–registration-token “xuETGPPqA2e1frmqsezb” \ #Token
–executor “shell” \ #选择的执行器,这里选择shell
–description “buildrunner” \ #描述信息
–tag-list “build,k8s,java” \ #标签名
–run-untagged=“true” \ #是否运行没有任何标签的runner
–locked=“false” \ #runner是否为locked
–access-level=“not_protected” #访问级别
查看配置文件信息
runner注册好之后,在配置文件中可以查看信息
查看这个配置文件
cat /etc/gitlab-runner/config.toml
上面信息可以看到我们配置的url,token以及执行器等信息,如果要修改这些信息的话,可以从这份文件里修改
注意一定要是在master分支上新建gitlab-ci.yml文件
基于 Docker 安装 Gitlab
1、 拉取gitlab-ce镜像
docker pull gitlab/gitlab-ce:16.3.0-ce.0
2、编写docker-compose.yml
# 基于docker-compose构建
version: '3.3'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: '192.168.0.254'
ports:
- '30080:30080'
- '30443:443'
- '30022:22'
volumes:
- '~/gitlab/settings:/etc/gitlab'
- '~/gitlab/logs:/var/log/gitlab'
- '~/gitlab/datas:/var/opt/gitlab'
3、运行gitlab-ce
docker-compose up -d
然后执行 docker ps 可以看到我们已经运行好的容器
4、更改gitlab访问地址
要想在外网访问gitlab,需要更改如下配置:
sudo vim ~/gitlab/settings/gitlab.rb
# 将 external_url 更改为 http://192.168.8.100
# 将 nginx["listen_port"] 更改为 30080
#然后需要进入到容器中,执行 gitlab-ctl reconfigure
docker exec -it 1d91205ce6a9 /bin/bash
#其中,1d91205ce6a9 是容器的ID
root@192:/# gitlab-ctl reconfigure
5、访问gitlab
gitlab访问时,是使用80端口来访问的,在步骤2中,我们将docker的80端口映射到了30080,因此,在访问的时候,可以使用IP+端口来访问。
http://192.168.8.100:30080
6、初始化密码
在gitlab容器启动时,会生成一个默认密码,放在/etc/gitlab/initial_root_password中,因此,我们通过下面的命令,可以查看到初始化密码:
sudo cat ~/gitlab/settings/initial_root_password
同时我们也可以直接设置一个新的密码:
docker exec -it 1d91205ce6a9 /bin/bash
#其中,1d91205ce6a9 是容器的ID
进入容器中之后,执行:
root@192:/# gitlab-rake "gitlab:password:reset"
Enter username: root
Enter password:
Confirm password:
Password successfully updated for user with username root.
然后我们就能在浏览器中登录gitlab,愉快的玩耍了。
配置ssh访问
进入容器中之后,我们点击头像,选择Preferences,可以看到左侧有ssh keys选项,导入自己的公钥,然后就可以通过ssh的方式,来拉取项目了。
不过此时会有一个问题,就是无权限。
$ git clone git@192.168.0.254:gwk/flow.git
Cloning into 'flow'...
git@192.168.0.254: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
出现这个问题,主要是因为我们的gitlab是运行在docker中的,而我们项目生成的git地址是宿主机的地址,这样肯定是无法访问的。
我们在构建容器的时候,将容器中的ssh端口,映射到了宿主机的30022端口上,因此我们需要做如下操作:
# 进入容器,修改 /etc/gitlab/gitlab.rb
root@192:/# cat /etc/gitlab/gitlab.rb|grep gitlab_shell_ssh_port
gitlab_rails['gitlab_shell_ssh_port'] = '30022'
将 "gitlab_shell_ssh_port" 更改为我们的宿主机映射地址,然后执行
root@192:/# gitlab-ctl reconfigure
刷新页面,可看到在ssh地址中多了一个端口:
ssh://git@192.168.0.254:30022/gwk/flow.git
然后就有权限去克隆项目了。
使用docker安装并注册gitlab runner
1、拉取镜像
docker pull gitlab/gitlab-runner:latest
2、运行gitlab-runner
# 基于docker-compose构建
version: '3.3'
services:
runner:
image: 'gitlab/gitlab-runner:latest'
restart: always
volumes:
- '~/gitlab-runner/settings:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
# 然后查看服务是否已启动
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9db8eb98f31c gitlab/gitlab-runner:latest "/usr/bin/dumb-init …" About a minute ago Up About a minute gitlab-runner
1d91205ce6a9 gitlab/gitlab-ce:latest "/assets/wrapper" About an hour ago Up 52 minutes (healthy) 0.0.0.0:30022->22/tcp, :::30022->22/tcp, 0.0.0.0:30080->80/tcp, :::30080->80/tcp, 0.0.0.0:30443->443/tcp, :::30443->443/tcp gitlab
我们可以看到gitlab-runner 已经启动了
3、注册 gitlab-runner
$ docker exec -it 9db8eb98f31c /bin/bash
root@9db8eb98f31c:/# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=24 revision=8ec04662 version=16.3.0
Running in system-mode.
# 这里输入gitlab的地址
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.0.254:30080
#这里输入gitlab的token,点击浏览器中的头像,选择Admin Area,然后点击左侧的CI/CD下面的Runners,在右侧的New instance runner旁边点击三个小点,可以看到token
Enter the registration token:
n1bpEB6ssexHCK9jbxf-
#输入描述
Enter a description for the runner:
[9db8eb98f31c]: grunner
# tag是个逗号分隔的列表,在编写.gitlab-ci.yml的时候,tag字段里也必须明确指明这些tags
Enter tags for the runner (comma-separated):
docker
Enter optional maintenance note for the runner:
WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
Registering runner... succeeded runner=n1bpEB6s
Enter an executor: docker, shell, ssh, virtualbox, instance, custom, docker-windows, parallels, docker-autoscaler, docker+machine, kubernetes:
docker
# 输入默认的docker image,也可以在.gitlab-ci.yml中指定
Enter the default Docker image (for example, ruby:2.7):
alpine: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 "/etc/gitlab-runner/config.toml"
完成上述操作之后,刷新gitlab页面,可以看到我们的runner已经存在了。
自动部署测试
1、.gitlab-ci.yml
image: golang:alpine
stages: #构建阶段分为两个,分别是 build 和 test
- build
- test
build-docker: #构建阶段
tags:
- docker
stage: build
image: docker
# variables:
# # these values may need to be different if using TLS, k8s, etc.
# # You can alternatively set defaults in your runner config
# DOCKER_TLS_CERTDIR: ""
# DOCKER_HOST: "tcp://192.168.0.254:2375"
# services:
# - "docker:dind"
script:
- docker info
- docker build -t demo:v0.0.1 .
- docker run -d -p 20080:80 --name demo demo:v0.0.1
test-docker: # 测试阶段
stage: test
script:
- echo "开始执行测试"
2、Dockerfile
FROM golang:alpine AS builder
WORKDIR /data/go
COPY . .
RUN go build main.go
ENTRYPOINT ["./main"]
CMD []
3、构建测试
将文件push到gitlab上,即可自动构建。