ZQ博客

ZQ博客
学无止境-技术在于分享
  1. 首页
  2. Docker
  3. 正文

GitLab的CI/CD(gitlab-runner)持续集成

2024年 4月 7日 2239点热度 1人点赞 0条评论

说明

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上,即可自动构建。

标签: docker git gitlab
最后更新:2024年 4月 7日

zq

每天进步一点, 时间长了你会发现已经走了很远了

点赞
< 上一篇
下一篇 >
分类
  • ARM
  • Docker
  • java
  • Linux
  • OpenStack问题
  • springboot
  • SpringCloud
  • 前端开发
  • 技术分享
  • 数据库
  • 未分类
  • 版本控制
文章目录
  • 说明
  • centos7上安装gitlab
    • 下载gitlab的rpm包
    • 重启gitlab
    • 编辑站点地址
  • centos7上安装gitlab-runner
    • 下载gitlab-runner
    • 启动gitlab-runner
    • gitlab-runner注册
    • gitlab非交互式的注册方式
    • 查看配置文件信息
  • 基于 Docker 安装 Gitlab
    • 1、 拉取gitlab-ce镜像
    • 2、编写docker-compose.yml
    • 3、运行gitlab-ce
    • 4、更改gitlab访问地址
    • 5、访问gitlab
    • 6、初始化密码
      • 配置ssh访问
  • 使用docker安装并注册gitlab runner
    • 1、拉取镜像
    • 2、运行gitlab-runner
    • 3、注册 gitlab-runner
  • 自动部署测试
    • 1、.gitlab-ci.yml
    • 2、Dockerfile
    • 3、构建测试

COPYRIGHT ©2024 www.dowhere.com ALL RIGHTS RESERVED.and Theme Kratos