openEuler系统gitlab-runner自定义libvirt

宿主机环境配置

注:以下操作均为 root 用户,避免 gitlab-runner 用户引发的权限问题

环境:openEuler-20.03-LTS-SP3

宿主机部署runner目录分布

plantext 复制代码
gitlab-runner                                      # gitlab-runner 工作目录全路径/home/gitlab-runner
└── ci                                            # ci 标识目录
    ├── images                                    # libvirt镜像目录,用作拷贝和基准镜像存储位置
    │   ├── gitlab-runner-base.qcow2              # 基准镜像
    │   ├── runner-117-project-18-concurrent-0-job-1969.qcow2  # 执行器副本镜像,由 prepare.sh 脚本自动生成
    │   ├── runner-117-project-18-concurrent-1-job-1970.qcow2
    │   ├── runner-117-project-18-concurrent-2-job-1971.qcow2
    │   ├── runner-117-project-18-concurrent-3-job-1972.qcow2
    │   └── runner-117-project-18-concurrent-4-job-1973.qcow2
    └── libvirt-driver                            # 驱动runner的脚本目录
        ├── base.sh                               # 公用基础脚本,存变量和复用函数
        ├── cleanup.sh                            # 清除脚本,job执行完使用
        ├── prepare.sh                            # 前置脚本,job执行前使用
        └── run.sh                                # 运行脚本,job执行时使用

1. 环境包安装

bash 复制代码
# x86_64:
yum install -y tar virt-install qemu-img qemu-kvm libvirt
# aarch64:
yum install -y tar virt-install qemu-img qemu-kvm libvirt libvirt-daemon-driver-qemu

2. 添加脚本文件

3. 生成免密密钥

libvirtrun.sh 默认以ssh进行执行构建过程

复制代码
ssh-keygen -t ed25519 -C libvirt_node

4. 注册runner到gitlab站点

注:注意宿主机平台架构下载 gitlab-runner 程序

  • aarch64

    bash 复制代码
    curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64
    chmod +x /usr/local/bin/gitlab-runner
    gitlab-runner install --user=root --working-directory=/home/gitlab-runner
    gitlab-runner start
    gitlab-runner register --url http://你的gitlab地址 --registration-token 你的注册Token
  • x86_64

    bash 复制代码
    curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
    chmod +x /usr/local/bin/gitlab-runner
    gitlab-runner install --user=root --working-directory=/home/gitlab-runner
    gitlab-runner start
    gitlab-runner register --url http://你的gitlab地址 --registration-token 你的注册Token

环境选择时选择 custom

执行完毕后,编辑 /etc/gitlab-runner/config.toml

plantext 复制代码
concurrent = 20                                       # 当前runner节点并发量,默认为1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "10-113-74-66"
  url = "http://10.113.75.183:3000/"
  id = 117
  token = "z1K__gW7yWKYuTRHAYuW"
  token_obtained_at = 2023-05-17T02:54:17Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "custom"
  builds_dir = "/gitlab-runner/builds"		 # builds_dir需要添加
  cache_dir = "/gitlab-runner/cache"       # cache_dir需要添加
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.custom]
    prepare_exec = "/home/gitlab-runner/ci/libvirt-driver/prepare.sh"    # prepare_exec 需要指定
    run_exec = "/home/gitlab-runner/ci/libvirt-driver/run.sh"            # run_exec 需要指定
    cleanup_exec = "/home/gitlab-runner/ci/libvirt-driver/cleanup.sh"    # cleanup_exec 需要指定

注:builds_dircache_dir 参数指定应当确定 qcow2 的磁盘分区大小,如果构建过程占满磁盘会导致 Job 阻塞,最终超时失败。

制作 gitlab-runner-base.qcow2

  • 方法一:使用virt-builder,可参考GitLab官文Using libvirt with the Custom executor大概率检查环境时存在问题。
  • 方法二:本地编辑基准版本dasos-e2.1.1 qcow2镜像。
    本文采用方法二

1. 启动qcow2镜像

bash 复制代码
virt-install --name dasos-e2.1.1 \
  --os-variant fedora28 \
  --disk dasos-e2.1.1-x86_64.qcow2 \
  --import \
  --vcpus=2 \
  --ram=2048 \
  --network default \
  --graphics vnc,port=50500,listen=0.0.0.0 \
  --noautoconsole

# 参数释义:
# --name dasos-e2.1.1 virsh 域名称
# --os-variant fedora28 基本镜像类型
# --disk dasos-e2.1.1-x86_64.qcow2 镜像文件
# --vcpus=2 虚化CPU数量
# --ram=2048 分配内存
# --network default 使用virsh net-list 查看,此处需要存在默认网络,名称为`default`,否则无法联网
# --graphics vnc,port=50500,listen=0.0.0.0 开启VNC
# --noautoconsole 屏蔽自动切换终端

注:--disk指定aarch64镜像时添加需要参数 --arch aarch64

使用vnc软件链接:vnc://宿主机IP地址:50500,进行qcow2镜像环境编辑。

2. 配置网卡自动获取IP

编辑 /boot/grub2/grub.cfg 添加内核启动项 net.ifnames=0 biosdevname=0

复制代码
linux   /boot/vmlinuz-* root=* ro net.ifnames=0 biosdevname=0 console=XXX

添加网卡脚本/etc/sysconfig/ifcfg-eth0

plantext 复制代码
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp

HWADDR可不填
注:当前步骤执行完毕先重启校验网络是否正常

3. 安装所需要的软件包

注:git为必须安装否则Runner将无法启动qcow2镜像。

构建过程时所需的包也可以在这里安装。

bash 复制代码
yum install git

4. root的SSH免密创建

注:先切换到宿主机上执行

bash 复制代码
# 第一次需要输入密码:system
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@你的qcow2的IP地址

# 免密测试
ssh root@你的qcow2的IP地址

5. 拷贝到宿主机发布目录

bash 复制代码
cp ./dasos-e2.1.1.qcow2 /home/gitlab-runner/ci/images/gitlab-runner-base.qcow2
相关推荐
Tian_Hang28 分钟前
eclipse ditto 学习笔记
运维·服务器·开发语言·javascript·3d
江畔柳前堤33 分钟前
第13章:docker生产环境部署实战
运维·git·docker·容器·代码复审
爱喝水的鱼丶36 分钟前
SAP-ABAP:接口 vs 抽象类:ABAP OOP两类扩展方式的差异与选型原则
运维·性能优化·sap·abap·erp·经验交流
iCxhust42 分钟前
linux目录是否保存在硬盘 启动后读入解析的
linux·运维·服务器
敖行客 Allthinker1 小时前
企业级多台服务器组装 K3s 高性能集群实战指南
运维·服务器·团队开发
TTBIGDATA3 小时前
【Ambari Plus】10.HBase 安装
大数据·运维·hadoop·ambari·hdp·cdh·bigtop
想你依然心痛3 小时前
持续集成在嵌入式开发中的实践:GitLab CI与交叉编译——自动化构建、固件生成
ci/cd·自动化·gitlab
艾伦_耶格宇3 小时前
【ELK】-2 ELK的搭建
运维·elk
xcLeigh3 小时前
KES运维自动化与脚本体系实战
运维·数据库·自动化·脚本·数据迁移·kes
潘正翔3 小时前
docker基础_镜像使用
linux·运维·服务器·docker·容器·centos·devops