Trino源码Gitlab CICD单测环境搭建

这篇具有很好参考价值的文章主要介绍了Trino源码Gitlab CICD单测环境搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在中大型公司,由于对Trino源码的定制魔改量越来越大,会随着时间推移而增大出现冷门bug的概率,所以需要建立一套自动测试机制,在魔改源码合入主分支时可以自动触发test case,通过特定单测的执行失败,来更清晰的判断是否过去的魔改涉及到了不符合社区源码原本假设的部分,并对魔改后的情况不一致进行修正。 

Gitlab Runner正好可以提供这样的机制,提升更早发现源码改动问题的效率。

一、安装并注册Gitlab Runner

Gitlab Runner相当于Gitlab服务在另一个机器上的分布式slave节点,用于接收Gitlab主服务所在机器的任务并执行,并将执行结果汇报回Gitlab主服务节点。首先需要部署服务器在8核CPU、32G内存以上,并且看下已有Gitlab服务的版本,安装Runner的版本要尽量和主服务版本一致,以免出现冷门bug:

Trino源码Gitlab CICD单测环境搭建

确定版本后,去主服务可网络连通的另一台机器上安装Gitlab Runner:

# 添加官方仓库
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
# 查看版本列表
yum list gitlab-runner --showduplicates | sort -r
# 安装指定版本
yum install gitlab-runner-12.6.0-1
# 安装完成后查看版本
gitlab-runner -v

安装和Gitlab主服务版本一致的Runner后,还需要反向注册回Gitlab主服务,让主服务知道它的存在,先看一下Gitlab主服务里Trino仓库中的Runner所需要信息,包括主服务的url以及registration token:

Trino源码Gitlab CICD单测环境搭建

复制下来之后,在后续的Runner注册过程中贴到接下来的命令的输入中:

# 开始向Gitlab主服务注册自己
gitlab-runner register
                          
# 在这里粘贴Gitlab主服务的url后回车
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://xxx.xxx.xxx.xxx:xxxx/

# 在这里粘贴前面看到的registration token后回车
Please enter the gitlab-ci token for this runner:
Bb1aWAr8Cn_HpN_y76o1

# 这里写一点描述并回车
Please enter the gitlab-ci description for this runner:
test服务器

# 这里给runner打标签并回车,可以控制是否只有带特定标签的Gitlab项目才能使用这个runner
Please enter the gitlab-ci tags for this runner (comma separated):
presto

# 指定以哪种方式启动runner的任务,shell即利用当前linux物理机环境起个进程,docker则每次启动一个容器
Please enter the executor: custom, parallels, ssh, virtualbox, kubernetes, docker, docker-ssh, shell, docker+machine, docker-ssh+machine:
shell

上述环节结束后,gitlab runner服务就会以gitlab-runner用户身份来启动,并且在Gitlab主服务界面也可以看到了,如下图所示:

Trino源码Gitlab CICD单测环境搭建

 刚启动时圆形灯是绿色的,我这里灰色是因为正在执行任务(连不上的时候也会显示灰色)。

上述部分更详细的教程可参考:

CI/CD 系列 | 一文让你掌握 Gitlab Runner - 掘金文本讲述了 Gitlab Runner 的设计结构,描述了Executor 的类型与选择方案,以及它的安装,注册,配置流程。https://juejin.cn/post/7134644436192985095一键安装gitlab runner - 简书概述 GitLab Runner是一个开源项目,用于运行作业并将结果发送到GitLab。GitLab Runner是Go编写,可以在Linux、Windows以及Mac OS...https://www.jianshu.com/p/0aa64d6b4638

二、修改Gitlab Runner默认配置

默认参数配置在执行CICD任务的时候可能会遇到一些坑,所以针对Trino还是要修改一部分,首先修改gitlab-runner的配置文件:

vim /etc/gitlab-runner/config.toml

#以下为配置文件中的内容
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "test服务器"
  url = "http://xxx.xxx.xxx.xxx:xxxx/"
  token = "xxxxx"
  executor = "shell"
  # 出于磁盘空间考虑可以把Gitlab主服务传来的project代码放在其他位置
  builds_dir = "/data/app/gitlab-runner/"
  # 单位为KB,Trino日志量很大,默认1M限制超出就直接失败,可以适当调大到50M以上
  output_limit = 1024000
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

在部分目录下需要root用户权限的话,也可以修改一下systemd中相关配置:

vim /etc/systemd/system/gitlab-runner.service

# 以下为配置内容
[Unit]
Description=GitLab Runner
After=syslog.target network.target
ConditionFileIsExecutable=/usr/lib/gitlab-runner/gitlab-runner

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/lib/gitlab-runner/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--syslog" "--user" "root"
# 在上面这里更换--user参数

Restart=always
RestartSec=120

[Install]
WantedBy=multi-user.target

修改之后生效配置,重新启动一下gitlab-runner服务:

systemctl daemon-reload
 
systemctl restart gitlab-runner

接着还需要去Gitlab网页端修改一下关于该runner的一些配置,如下图所示:

Trino源码Gitlab CICD单测环境搭建

Trino源码Gitlab CICD单测环境搭建

三、安装Docker

Trino源码的部分单测会自动通过docker下载一些其他组件服务的容器下来进行联合测试,所以还需要安装一下docker,详细步骤可以参考:

centos7安装Docker详细步骤(无坑版教程) - 腾讯云开发者社区-腾讯云在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。https://cloud.tencent.com/developer/article/1701451这里需要注意的是,安装好的docker默认镜像仓库是国外中央仓库,下载速度很慢,容易导致Trino单测过久超时失败,所以要修改一下国内镜像源:

vim /etc/docker/daemon.json

# 以下为配置内容
{
  "registry-mirrors": [
    "https://dockerproxy.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://ccr.ccs.tencentyun.com"
  ],
  "data-root": "/data/docker"
}

保存后刷新配置并重启docker服务:

systemctl daemon-reload

service docker restart

这样前置环境就基本准备好了。

四、Trino源码中增加.gitlab-ci.yml配置

Gitlab可以自动识别项目根目录下的.gitlab-ci.yml配置文件,所以源码project中加入该文件push上去,并且Gitlab网页里开一个merge request即可自动触发:

stages:
  - test

variables:
  TESTCONTAINERS_PULL_PAUSE_TIMEOUT: 1800
  TEST_REPORT_RETENTION_DAYS: 5

test:
  stage: test
  only:
    - merge_requests
  script:
    - export JAVA_HOME=/usr/java/zulu17.36.17-ca-jdk17.0.4.1-linux_x64
    - export PATH=$JAVA_HOME/bin:$PATH
    - export MAVEN_OPTS="$MAVEN_OPTS -XX:+CrashOnOutOfMemoryError -Dmaven.wagon.rto=180000 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/tmp/gitlab-runner/dump/mvn.hprof"
    - ./mvnw -pl '!:trino-docs,!:trino-server-rpm' clean install -DskipTests
    - ./mvnw -pl '!:trino-accumulo,!:trino-atop,!:trino-bigquery,!:trino-cassandra,!:trino-clickhouse,!:trino-delta-lake,!:trino-docs,!:trino-server,!:trino-server-rpm,!:trino-druid,!:trino-elasticsearch,!:trino-geospatial,!:trino-google-sheets,!:trino-faulttolerant-tests,!:trino-hudi,!:trino-thrift,!:trino-memory,!:trino-kafka,!:trino-kinesis,!:trino-mariadb,!:trino-ml,!:trino-mongodb,!:trino-mysql,!:trino-oracle,!:trino-password-authenticators,!:trino-phoenix5,!:trino-pinot,!:trino-postgresql,!:trino-prometheus,!:trino-raptor-legacy,!:trino-redis,!:trino-redshift,!:trino-singlestore,!:trino-sqlserver,!:trino-teradata-functions,!:trino-test-jdbc-compatibility-old-server,!:trino-tpcds,!:trino-tpch' -DreuseForks=false -Dsurefire.exitTimeout=1800 -Dsurefire.useSystemClassLoader=false -Djdk.net.URLClassPath.disableClassPathURLCheck=true -Djdk.attach.allowAttachSelf -Djava.io.tmpdir=/data/tmp/gitlab-runner --fail-at-end -e -B -Dmaven.source.skip=true -Dair.check.skip-all verify
  timeout: 1d

上述配置也可以参考Trino源码中的.github/workflows/ci.yml文件来编写,可以参考-pl参数的写法酌情跳过一些不太需要的maven模块。

通过merge request触发Gitlab CICD pipeline任务后,就可以在如下界面里看到单测执行历史,可以点进去查看或下载Gitlab Runner执行时返回的日志信息:

Trino源码Gitlab CICD单测环境搭建

可以ctrl+f搜索日志中“test failure”的字样来查看单测失败的报错,针对报错再修改源码修复就行。

五、适当修改Trino源码

由于该单测跑一轮花费的时间很长,消耗机器资源较大,而且中间可能会有docker下载慢等偶发因素导致执行到一半就挂了,所以可以酌情修改一下源码中的配置,例如pom.xml里的测试堆大小,如果观察到GC慢等问题的话:

Trino源码Gitlab CICD单测环境搭建

还可以酌情选择在有单测报错时不直接结束任务,而是继续执行下去,或者跳过一些自身场景不太需要的单测类,如下所示:

Trino源码Gitlab CICD单测环境搭建

 在中间出现单测任务资源扛不住挂了的问题,也可以参考:

java - The forked VM terminated without saying properly goodbye. VM crash or System.exit called - Stack Overflowhttps://stackoverflow.com/questions/23260057/the-forked-vm-terminated-without-saying-properly-goodbye-vm-crash-or-system-exi?page=1&tab=modifieddesc#tab-top文章来源地址https://www.toymoban.com/news/detail-469467.html

到了这里,关于Trino源码Gitlab CICD单测环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jenkins和gitlab实现CICD

    在开发TracerBackend服务的时候,每次更改代码之后需要推送到gitlab,然后ssh登录到Ubuntu的服务器上部署新的代码。服务成功启动之后,在本地执行测试用例,觉得这一套操作流程还是挺复杂的。想起公司的代码发布流程,只要个人分支的代码测试通过之后,合并到master分支的时

    2024年04月22日
    浏览(28)
  • 20.云原生之GitLab CICD实战

    云原生专栏大纲 GitLab Runner 是一个开源的持续集成/持续交付(CI/CD)工具,用于在 GitLab CI/CD 环境中执行自动化构建、测试和部署任务。它是 GitLab CI/CD 的一部分,负责管理和执行 CI/CD 作业。 以下是 GitLab Runner 的一些关键特点和功能: 多平台支持:GitLab Runner 可以在多种操作

    2024年01月23日
    浏览(26)
  • Gitlab中的CICD的使用方法

    一、CI/CD执行机制 二、离线安装gitlab-runner 下载相应版本的gitlab-runner  (下载地址:https://packages.gitlab.com/runner/gitlab-runner) dpkg -i gitlab-runner_12.8.0_amd64.deb gitlab-runner register 第3步中需要的信息可从下图所示位置获取 三、示例 内容如下: before_script:   - date stages:   - test   -

    2024年01月17日
    浏览(27)
  • 【git】2、gitlab CICD 模型部署自动化

    GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。 安装方法是参考 GitLab 在 GitHub 上的 Wiki 页面。Gitlab 是被广泛使用的基于 git 的开源代码管理平台, 基于 Ruby on Rails 构建, 主要针对软件开发过程中产生的代码和文档进

    2024年02月04日
    浏览(34)
  • 【云原生】DevOps之使用Gitlab Runner进行CICD

    在很久之前的文章中,我们已经搭建过了Jenkins+Docker+Harbor+SpringCloud微服务持续集成自动化部署,今天来介绍Gitlab原生的Gitlab Runner CICD功能。 Gitlab实现CICD的方式有很多,比如通过Jenkins,通过Gitlab Runner等,今天主要介绍后者。Gitlab在安装的时候,就默认包含了Gitlab CI的能力,但

    2024年02月03日
    浏览(35)
  • 云原生系列2-CICD持续集成部署-GitLab和Jenkins

    1、CICD持续集成部署 持续集成:简称 CI 思想:每天要多次将代码合并到主干,并进行集成,测试,这样就可以提早发现错误,进行修正。持续集成也属于DevOps运维开发。 CI持续集成的好处: 1、自动化集成部署,提高了集成效率。 2、更快的修复问题。 3、更快的进行交付。

    2024年02月02日
    浏览(33)
  • 纯 k8s 部署实现 gitlab CICD 保姆级教程

    ​ GitLab 具有三个需要进行持久化的目录,它们分别是 /etc/gitlab、/var/log/gitlab、/var/opt/gitlab,它们分别为 Gitlab 的运行提供配置、日志、数据的持久化。我们使用 nfs 来作为 GitLab 的持久化方式(当然,你也可以选择其他方式),为此,我们需要先安装 NFS,并且在 NFS 的配置文

    2024年02月06日
    浏览(34)
  • Trino 源码剖析

    prerequisites Java 17.0.4+, 64-bit 或者 function 反射和注册 io.trino.operator.scalar.annotations.ScalarFromAnnotationsParser 这里是提取注解元素的方法 String baseName = scalarFunction.value().isEmpty() ? camelToSnake(annotatedName(annotated)) : scalarFunction.value(); 这里如果 scalarFunction 的注解没有没有值,直接对函数名进

    2024年02月07日
    浏览(30)
  • Mac M1 Parallels CentOS7.9 Rancher + K8S + Gitlab + Jenkins +Harbor CICD

    机器名称 IP地址 角色 k8s+rancher高可用部署: https://blog.csdn.net/qq_41594280/article/details/135312148 rancher 10.211.55.200 管理K8S集群 k8svip 10.211.55.199 K8S VIP master01 10.211.55.201 K8S集群主节点 master02 10.211.55.202 K8S集群主节点 master03 10.211.55.203 K8S集群主节点 node01 10.211.55.211 K8S集群从节点 node02 10.

    2024年01月19日
    浏览(63)
  • DevOps极速入门丨Gitlab丨Jenkins丨harbor丨CICD丨自动化丨运维开发

    一、DevOps介绍 软件开发最开始是由两个团队组成: 开发计划由开发团队从头开始设计和整体系统的构建。需要系统不停的迭代更新。 运维团队将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。 这看似两个目标不同的团队需要协同完成一个软件的开发。 在开发

    2023年04月18日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包