Gitlab Runner 学习

news/2025/10/7 13:59:33/文章来源:https://www.cnblogs.com/dengz/p/19128439

Gitlab Runner 学习

runner下载|安装|启动

下载
# 为您的系统下载二进制文件
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64# 授予执行权限
sudo chmod +x /usr/local/bin/gitlab-runner# 创建 GitLab Runner 用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash# 安装并作为服务运行
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start# 如果使用基于 `deb` 包的发行版(如 Ubuntu、Debian)
curl -s https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
apt install -y gitlab-runner# 如果使用基于 `rpm` 包的发行版(如 CentOS、RHEL、Fedora)
curl -s https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
dnf install -y gitlab-runner
启动
gitlab-runner start
停止
gitlab-runner stop

注册runner

命令行创建
gitlab-runner register  --url http://gitlab.local  --token  xxx
Gitlab页面创建
# 页面创建的 runner 仍然需要到 runner 服务器上执行一遍指令

删除runner

按名字删除
sudo gitlab-runner unregister --name "python-runner"
通过 URL 和令牌删除
sudo gitlab-runner unregister --url http://gitlab.local --token xxx
全部删除
sudo gitlab-runner unregister --all-runners	

删除配置文件

rm -rf /xxx/xxx/.gitlab-runner/config.toml

测试.gitlab-ci.yml

# GitLab CI/CD 配置文件 - 简化版本
# 这个文件定义了GitLab的持续集成/持续部署流程# 定义流水线的阶段(stages)
# 每个作业(job)必须属于一个阶段,阶段按顺序执行
stages:- test    # 测试阶段:运行各种测试- deploy  # 部署阶段:部署应用到不同环境# 全局变量定义
# 这些变量可以在所有作业中使用
variables:FLASK_ENV: testing           # Flask应用环境(testing/production)VENV_PATH: venv              # Python虚拟环境路径PYTHON_VERSION: 3.11         # 使用的Python版本UWSGI_PORT: 8099             # uWSGI服务监听的端口HEALTH_CHECK_ENDPOINT: /api/v1/health/  # 健康检查接口路径WAIT_TIMEOUT: 30              # 应用启动等待超时时间(秒)# 缓存配置
# 缓存可以加速后续流水线的执行
cache:key: $CI_COMMIT_REF_SLUG     # 缓存键,基于分支名称paths:- venv/                    # 缓存Python虚拟环境- .cache/pip               # 缓存pip下载的包# 单元测试作业
# 这个作业运行Python单元测试
unit_tests:stage: test                  # 属于test阶段tags:- myDebainTest             # 指定运行器标签(GitLab Runner的标签)before_script:               # 作业执行前的准备工作- echo "🚀 开始设置Python环境..."- python${PYTHON_VERSION} --version  # 检查Python版本- python${PYTHON_VERSION} -m venv $VENV_PATH || python3 -m venv $VENV_PATH  # 创建虚拟环境- source $VENV_PATH/bin/activate      # 激活虚拟环境- pip install --upgrade pip           # 升级pip- pip install -r requirements.txt     # 安装依赖包- echo "当前FLASK_ENV:" $FLASK_ENV    # 显示当前环境变量- export FLASK_ENV="$FLASK_ENV"       # 设置环境变量script:                       # 作业的主要执行脚本- echo "🧪 运行单元测试..."- echo "当前FLASK_ENV:" $FLASK_ENV- python -c "import os; print('Python进程中的FLASK_ENV:', os.getenv('FLASK_ENV'))"  # 验证环境变量- python -m pytest test/ -v --tb=short || echo "⚠️ 没有找到测试文件或测试失败"  # 运行pytest测试after_script:                 # 作业执行后的清理工作- echo "🧹 清理环境..."- pkill -9 uwsgi || true    # 强制停止uWSGI进程- deactivate || true       # 退出虚拟环境artifacts:                    # 制品(构建产物)配置when: always               # 总是上传制品(无论成功或失败)reports:junit: test-results.xml  # JUnit格式的测试报告paths:- test-results.xml       # 测试报告文件路径expire_in: 1 week          # 制品保留时间only:                         # 触发条件:只在以下分支/事件触发- main- develop- merge_requests# 健康检查测试作业
# 这个作业测试应用的健康检查接口
health_check_test:stage: testtags:- myDebainTestbefore_script:- echo "🚀 开始设置Python环境..."- python${PYTHON_VERSION} --version- python${PYTHON_VERSION} -m venv $VENV_PATH || python3 -m venv $VENV_PATH- source $VENV_PATH/bin/activate- pip install --upgrade pip- pip install -r requirements.txt- echo "当前FLASK_ENV:" $FLASK_ENV- export FLASK_ENV="$FLASK_ENV"script:- echo "🔍 启动Flask应用并测试健康检查接口..."- echo "当前FLASK_ENV:" $FLASK_ENV- python -c "import os; print('Python进程中的FLASK_ENV:', os.getenv('FLASK_ENV'))"- pkill -9 uwsgi || true    # 确保没有残留的uWSGI进程- uwsgi --ini uwsgi.ini --daemonize api.log --env FLASK_ENV="$FLASK_ENV"  # 后台启动uWSGI- |echo ⏳ 等待应用启动...# 循环检查应用是否启动成功for i in {1..$WAIT_TIMEOUT}; doif curl -s -f http://127.0.0.1:$UWSGI_PORT$HEALTH_CHECK_ENDPOINT > /dev/null 2>&1; thenecho ✅ 应用在第 $i 秒启动成功breakfisleep 1if [ $i -eq $WAIT_TIMEOUT ]; thenecho ❌ 应用启动超时cat api.log           # 输出应用日志用于调试exit 1                # 退出并标记作业失败fidone- |echo 📊 执行健康检查...# 使用更简单的方法获取HTTP状态码status_code=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:$UWSGI_PORT$HEALTH_CHECK_ENDPOINT)body=$(curl -s http://127.0.0.1:$UWSGI_PORT$HEALTH_CHECK_ENDPOINT)echo HTTP状态码: $status_codeecho 响应内容: $body# 检查健康检查接口是否返回200状态码if [ $status_code -eq 200 ]; thenecho ✅ 健康检查接口测试成功elseecho ❌ 健康检查接口测试失败cat api.log           # 输出应用日志用于调试exit 1                # 退出并标记作业失败fiafter_script:- echo "🧹 清理环境..."- pkill -9 uwsgi || true- deactivate || true- echo "📋 应用日志:"- tail -50 api.log || echo "没有找到日志文件"  # 输出最后50行应用日志artifacts:when: on_failure           # 只在作业失败时上传制品paths:- api.log                # 上传应用日志文件expire_in: 1 hour          # 制品保留时间较短(仅用于调试)only:- main- develop- merge_requests# 代码质量检查作业
# 这个作业检查代码质量和应用配置
code_quality:stage: testtags:- myDebainTestbefore_script:- echo "🚀 开始设置Python环境..."- python${PYTHON_VERSION} --version- python${PYTHON_VERSION} -m venv $VENV_PATH || python3 -m venv $VENV_PATH- source $VENV_PATH/bin/activate- pip install --upgrade pip- pip install -r requirements.txt- echo "当前FLASK_ENV:" $FLASK_ENV- export FLASK_ENV="$FLASK_ENV"script:- echo "🔍 代码质量检查..."- echo "当前FLASK_ENV:" $FLASK_ENV- pip install flake8 black || true    # 安装代码检查工具- flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics || echo "⚠️ flake8检查失败或未安装"  # 代码风格检查- python -c "import os; print('Python进程中的FLASK_ENV:', os.getenv('FLASK_ENV')); from manage import create_app; app = create_app(); print('加载的配置文件:', app.config.get('SQLALCHEMY_DATABASE_URI', '未找到'))" || echo "⚠️ 应用创建失败"  # 测试应用配置加载only:- main- develop# 测试环境部署作业
# 这个作业将应用部署到测试环境
deploy_staging:stage: deploytags:- myDebainTestscript:- echo "🚀 部署到测试环境..."- echo "部署逻辑待实现"      # 实际部署逻辑需要根据具体环境实现environment:                  # 环境配置name: staging              # 环境名称url: https://staging.example.com  # 环境URLonly:- main                     # 只在main分支触发# 生产环境部署作业
# 这个作业将应用部署到生产环境
deploy_production:stage: deploytags:- myDebainTestscript:- echo "🚀 部署到生产环境..."- echo "部署逻辑待实现"      # 实际部署逻辑需要根据具体环境实现environment:name: production           # 环境名称url: https://production.example.com  # 环境URLonly:- main                     # 只在main分支触发when: manual                 # 手动触发(需要人工确认)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代做备案网站专业郑州企业网站建设

文章目录 1. 简介2. 用法1)单个 CommandLineRunner2)多个 CommandLineRunner 3. 优点4. 缺点总结 CommandLineRunner 是 Spring Boot 提供的一个接口,用于在 Spring Boot 应用程序启动后执行一些任务。通过实现 CommandLineRunner 接口&#…

东莞网站建设设计公司网站怎么添加域名

Redisson 中的 RScoredSortedSet 类是对 Redis 内置的 Sorted Set 数据结构的一个封装,它支持对集合中的元素进行排序,每个元素都有一个与之关联的分数(score)。 RScoredSortedSet 可以用于多种场景,以下是一些常见的使用案例: 排…

AI元人文:论价值原语博弈与人文知识库共建如何重塑智能社会的决策基石

AI元人文:论价值原语博弈与人文知识库共建如何重塑智能社会的决策基石 我们这个时代面临着深刻的人文困境。表面上是技术冲击与规则失能,实则是规则逻辑与人文逻辑的断裂。规则逻辑构筑现代社会的效率骨架,人文逻辑…

佳木斯网站建设网站建设报价明细表

【Matlab】智能优化算法_麻雀搜索算法SSA 1.背景介绍2.数学模型3.文件结构4.伪代码5.详细代码及注释5.1 Get_Functions_details.m5.2 main.m5.3 SSA.m 6.运行结果7.参考文献 1.背景介绍 麻雀通常是群居的鸟类,有很多种类。它们分布在世界的大部分地区,喜…

算法第一张作业

一、代码规范 对于大学生来说,不需要一开始就追求大公司那样面面俱到的规范,但也要抓住以下几个核心要点:命名规范,这是最重要、也是最容易见效的一条。 (1)变量/函数名:使用有意义的英文单词,不要用拼音或a, …

怎么使自己的网站秦淮做网站价格

六西格玛,这个在业界久负盛名的管理理念,它的魅力太强大了。曾听闻它能帮助企业和个人提升竞争力,但当真正走进这个培训体系时,会发现它的影响力远超你的想象。 在六西格玛的指导下,企业实现了显著的转变。之前那些看…

MySQL CentOS7 本地安装

假设已经删除了MySQL,如果你没有删除可以搜索一下 mysql-libs.zip 百度网盘 我这里是使用了unzip来解压 sudo yum install -y unzip zip unzip mysql-libs.zip cd mysql-libs 本来是使用rpm,但是这里缺少perl error:…

TypeScript装饰器 - Ref

TypeScript装饰器 01-简介02-类装饰器03-装饰器工厂04-装饰器组合05-属性装饰器06-方法装饰器07-访问器装饰器08-参数装饰器

网站服务器租用多少钱才合理呢什么是关键词

经过3个多小时的努力,配置JNDI数据源(主要是通过DBCP连接池)终于搞定~还是Tomcat官方的说明好,不过全是英文的,大概还看得懂.百度上那么花花绿绿的太多了,一个也没成功!.&#xff0e…

【笔记】排列与组合学习笔记

前言 总概 本文章将会向你讲解排列与组合的基本知识和综合运用。 会从定义、问题导入、解决方法、经典例题、总结等方面讲解。 前置知识有一定的数学思维能力和理解能力 加法计数原理 乘法计数原理 阶乘加法计数原理和…

【高级数据结构】ST 表

前言 大部分 ST 表能解决的问题树状数组和线段树都能解决,只不过 ST 表的代码实现更加简单。 ST 表可以求解区间 $[l,r]$ 的最值问题等区间查询。 ST表 ST 表的定义 ST 表是利用倍增思想来解决区间问题的,这样可以缩…

【高级算法】树形DP

前言 本篇文章针对对于树形DP有一定基础的人,没学过的话请出门左转~ 树上背包 P1273 有线电视网 题目简述 有一棵有根树,每个叶子节点都有一个可赚的钱数,每走一条路都有相应的花费。 则在不亏本的情况下从根节点能…

如何提升网站seo排名h5都用什么网站

在日常的数据存储与管理中,移动硬盘作为便携且容量可观的存储设备,深受用户青睐。然而,当您发现联想闪电鲨移动硬盘中的文件突然消失,而您确信并未进行删除操作时,这无疑会令人感到困惑与焦虑。本文旨在为您揭开这一谜…

【高级数据结构】浅谈最短路

前言 最短路是图论中非常典型的模板之一,在生活中也可以到处见到许多。 例如在中国有许多个城市,我现在正在成都,现在我想开车去重庆,而在成都去往重庆的道路上,有许多的道路可以到达,而我想要以最快的速度到达,…

代码随想录打卡|Day53 图论(Floyd 算法精讲 、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结 ) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

织梦网站新闻列表调用重庆旅游攻略

复原IP 地址 力扣原题链接 问题描述 有效 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是有效 IP 地址&#xff0c…

自己做网站如何销售大学网站开发策划

1、官网下载IDE JetBrains下载 2、IDE下载、安装步骤 这里展示的是如何在Windows上下载、安装Pycharm工具,Linux的步骤类似。 2.1、选择开发者工具 选择开发者工具 2.2、选择Pycharm 选择Pycharm 2.3、选择下载 选择下载 2.4、选择社区版 一般而言&#xff…

2025电位仪厂家最新企业品牌推荐排行榜,纳米粒度及 Zeta 电位仪,Zeta 电位仪公司推荐

在胶体化学、材料科学、生物医药等关键领域,电位仪(尤其是纳米粒度及 Zeta 电位仪)作为精准表征颗粒表面电荷特性与分散稳定性的核心设备,直接决定了科研实验的数据可信度与工业生产的产品质量可控性。无论是锂电池…

PCIe扫盲——物理层逻辑部分基础(二)

上一篇文章中提到了Mux会对来自数据链路层的数据(TLP&DLLP)插入一些控制字符,如下图所示。当然,这些控制字符只用于物理层之间的传输,接收端的设备的物理层接收到这些数据后,会将这些控制字符去除,在往上传…