day1 Gitlab Runner 学习

news/2025/10/6 1:47:38/文章来源:https://www.cnblogs.com/dengz/p/19127212

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/928911.shtml

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

相关文章

网站云优化有哪些做网站好的公司

文章目录 一、前言二、准备阶段三、环境配置3.1 Type-V管理器环境配置3.2 新增.wslconfig 文件 四、遇到的问题以及解决方案 一、前言 ​ 使用 wsl 的过程中,会出现 WSL 的IP地址 找不到,或者无法和计算机通讯,搞 嵌入式 的话,还…

珠海模板建站平台网站建设用途

一 什么是nodeJs nodeJs是一个后端技术,研究web应用的开发模式,能够开发一些简单的服务器,学会操作数据库等等。官方解释就是:nodeJs是基于谷歌v8引擎的javascript运行环境 nodeJs使用了一个事件驱动,非非阻塞式I/O模型…

网站建设合作伙伴网页搜索器

要搭建自己的 PyPI 服务器,您可以使用 warehouse 项目,它是 PyPI 的开源实现。下面是一些基本步骤: 准备环境: 安装 Python安装 PostgreSQL 数据库 克隆 warehouse 项目: git clone https://github.com/pypa/wareh…

Software Foundations Vol.I : 使用结构化的数据(Lists)

Software Foundations Vol.I : 使用结构化的数据(Lists)数值序对 在 Inductive 类型定义中,每个构造子(Constructor)可以有任意多个参数 —— 可以没有(如 true 和 O),可以只有一个(如 S),也可以更多 (如 ny…

阿里云1M做网站闸北区网站建设网

狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习。未经作者授权,禁止转载分布式理论什么是分布式系统?在《分布式系统原理与范型》一书中有如下定义:“分布式系统…

Software Foundations Vol.I : 归纳证明(Induction)

Software Foundations Vol.I : 归纳证明(Induction)归纳法证明 我们在上一章中通过基于化简的简单论据证明了 0 是 + 的左幺元。 我们也观察到,当我们打算证明 0 也是 + 的 右 幺元时事情就没这么简单了 Theorem plus…

外贸网站建设和seo海淀网站建设多少钱

本质上, 这两种方式都是加载CSS文件, 但还是存在着细微的差别 import 机制不同于link,link是加载页面前css加载完毕,import 是先读取文件再加载import是css2.0里的 ie5以上不支持用js控制dom时改变样式,只能用link,import不是dom…

广州网站建设app开发哈尔滨网页模板建站

首先思考一个问题:如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损? 本文提供解决这个问题的一种方案。 场景 有两个基于 Dubbo 的微服务应用,一个是服务提供者&…

Software Foundations Vol.I : Coq函数式编程(Basics)

好久没写随笔了,随便投投.这里的内容主要取至《软件基础》第一卷https://coq-zh.github.io/. 我补充了一部分习题的答案,在https://github.com/mesonoxian-yao/softwareFoudations-volume1-coqLearn可以看看. Software…

Python 在自然语言处理中的应用与发展

一、引言 🗣️ 自然语言处理(NLP)是人工智能的重要分支,旨在让计算机理解、生成和处理人类语言。它广泛应用于 搜索引擎、机器翻译、智能客服、情感分析、舆情监测 等场景。Python 作为 AI 研究和工程实现的主流语…

专业的深圳网站建设公司排名深圳网站制作公司在那

文章目录 解决TensorRT加速推理SDXL出现黑图问题1. fp162. 更换vae 解决TensorRT加速推理SDXL出现黑图问题 一般产生黑图,仅需要修改下面两个问题即可解决。 1. fp16 将pipeline中的fp16修改为fp32。 在使用稳定扩散(Stable Diffusion)生…

影响网站可用性的因素青州网站设计

文章目录 协议局域网通信IP 地址网络通信的本质tcp 和 udp 协议网络字节序网络主机数据转化接口 协议 协议:收到数据后,多出来的那一部分,也叫一种 “约定”,一整套的自硬件到软件,都有协议,需要有人定制&a…

Python 在网络爬虫与数据采集中的应用

一、引言 🌐 在大数据时代,数据已成为企业与科研的核心资产。然而,很多数据并不以结构化形式直接提供,需要通过网络爬虫和采集技术来获取。Python,凭借其简洁的语法、强大的第三方库和活跃的社区支持,已经成为网…

开通网站主机站长统计网站统计

栅格数据是一种从远处表示地球表面和大气的地理空间数据,通常使用卫星或航空传感器。它是一种基于网格的数据结构,其中网格中的每个单元或像素代表地球表面的特定位置。这些像素可以存储各种类型的信息,例如海拔、温度、土地覆盖、降水量或与该位置相关的任何其他连续或分类…

做网站和seo哪个好网站制作的收费标准

虚拟机Linux系统网络配置: 1、Vmware网络设置 虚拟机设置->网路适配器->网络连接 桥接模式:能提供独立的IP地址的情况下使用NAT模式:一台计算机只能使用一个IP,主机与虚拟机共享IP,外部网络无法发现虚拟机&#…

wordpress 企业整站源码岳阳网站建设网站

点击访问体验 之前有体验过github的代码助手,奈何收费了,上周发现有一个免费的代码助手。 下载安装 vscode 搜索扩展 TONGYI Lingma 安装完成后登陆即可体验 写注释让他写代码 根据上下文自动补充 这里我只写了一个方法名,getAgencyList…

15_spring_data_neo4j简单教程

Spring Data Neo4j 简单教程 简介 Spring Data Neo4j 是 Spring Data 项目的一部分,它提供了对 Neo4j 图数据库的集成支持。通过 Spring Data Neo4j,开发者可以轻松地在 Spring Boot 应用中使用 Neo4j 数据库,利用图…

珠海网站制作哪家便宜久久建筑网 百度网盘

认证与权限频率组件 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制。然后 权限 和 限制 组件决定是否拒绝这个请求。 简单来说就是: 认证确定了你是谁权限确定你能不能访问某个接口限制确定你访问某…

成都网站建设制作设计内蒙古最新消息今天

Python是一种高级编程语言,广泛用于数据科学、人工智能、网络编程等领域。 Python提供了许多内置函数和标准库,可以完成各种任务: 1、print()函数:将文本输出到控制台。可以将字符串、数字和变量等输出到控制台。 2、input()函…

创建自己的网站怎么弄宁乡市住房和城乡建设局网站

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由,然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较,从而决定是否将该最优…