Gitlab的流水线任务【实现每小时自动测试 dev分支的更新】

背景

在现代软件开发实践中,持续集成(Continuous Integration, CI)是确保代码质量和快速响应软件缺陷的关键策略。GitLab 提供了强大的 CI/CD 功能,允许开发者自动化测试和部署流程。本文将介绍如何设置 GitLab 流水线计划任务,以实现对 dev 分支每小时的自动测试。

需求: GitLab 流水线计划任务(pipeline-schedules):实现每小时自动测试 dev 分支的更新

环境

Gitlab企业版本:v16.9.2-ee
在这里插入图片描述
GitLab 流水线是一系列作业(jobs)的集合,这些作业可以并行或顺序执行,以完成构建、测试、部署等任务。流水线可以由代码提交、定时计划或其他事件触发。

计划任务是 GitLab 流水线的一个特性,它允许你按计划执行流水线,而不需要代码提交或其他触发条件。这对于定期运行测试、备份或其他维护任务特别有用。

每小时自动测试 dev 分支的步骤

创建 .gitlab-ci.yml 配置文件

在项目的根目录下,创建或编辑 .gitlab-ci.yml 文件,这是 GitLab 流水线的配置文件。我们将定义两个作业:一个是常规的测试作业,另一个是计划任务作业。

stages:- test- alert- jarbefore_script:- export PATH=/usr/lib/jvm/java-21/bin:${PATH}        # 将java路径添加到PATH路径中。如果是java 11,使用/usr/lib/jvm/java-11/bin。ci_test:stage: testscript:- |if [ "$(git log origin/dev --since='1 hour ago' --pretty=format:'%h')" != "" ]; thenmvn clean testelseecho "No changes in the last hour"fi- exportrules:- if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_BRANCH == "dev"'dingTalk_fail_alert:stage: alertscript:- /bin/bash /opt/k8s/dingtalk/ding_ci_alert.sh failwhen: on_failureallow_failure: truerules:- if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_BRANCH == "dev"'dingTalk_succes_alert:stage: alertscript:- /bin/bash /opt/k8s/dingtalk/ding_ci_alert.sh successwhen: on_successallow_failure: truerules:- if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_BRANCH == "dev"'jar:stage: jartags:- pddcache:paths:- manage-analysis/target/*.jar- manage-listener/target/*.jar- manage-backend/target/*.jarpolicy: pushkey: ${CI_BUILD_REF_NAME}script:- mvn clean install -Dmaven.test.skip=truerules:- if: '$CI_PIPELINE_SOURCE != "schedule" && $CI_COMMIT_BRANCH == "dev"'

配置钉钉告警机器人

配置钉钉告警机器人:关键字认证 “告警”
在这里插入图片描述

配置告警脚本脚本模板

在GitLab CI/CD 管道中,我们设计了一个名为 ding_ci_alert.sh 的Shell脚本,用于对接钉钉机器人发送构建状态的通知。针对不同的构建结果,我们有如下需求:

  1. 当Maven测试任务失败时,我们会向脚本传递一个参数 "fail",表示构建失败。此时,脚本不仅会调用钉钉机器人发送一条包含失败详情的告警消息,还会将此次失败的构建ID写入一个专门记录失败构建的文件中。
  2. 当后续的Maven测试任务成功时,我们将向脚本传递一个参数 "success",以标识构建成功。这时,脚本首先会检查记录失败构建的文件中是否存在当前构建ID。如果存在,则调用钉钉机器人发送一条成功恢复的消息,并从记录文件中移除此构建ID;反之,若当前构建ID未在文件中找到,则不发送成功告警信息。

这样,我们通过灵活调用和智能判断,确保了在构建失败时及时通知相关人员,并在问题得到解决后发送成功通知,既避免了不必要的通知干扰,又保证了团队能够及时了解到构建状态的变化。在实际的博客文章中,您可以插入示例代码和详细说明,让读者更直观地理解这一过程。

vim /opt/k8s/dingtalk/ding_ci_alert.sh

#!/bin/bashWEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=xxxxx"
# 检查是否提供了参数
if [ "$#" -ne 1 ]; thenecho "Usage: $0 <success|fail>"exit 1
fi# 定义记录文件路径
RECORD_FILE="/tmp/build_records.txt"# 根据传入的参数执行相应操作
case $1 infail)# 构建失败,发送告警并记录echo "构建失败,发送告警..."# 准备告警消息JSON_DATA=$(printf '{"msgtype": "markdown","markdown": {"title": "告警:构建失败通知","text": "#### **[%s 的 Maven 测试未通过构建失败](%s/pipelines/%s)**\n\n> - **提交信息**: %s\n> - **提交者名称**: %s\n> - **提交时间**: %s\n\n请及时处理,更多详情可点击项目名称。"},"at": {"isAtAll": false}}' "$CI_PROJECT_NAME" "$CI_PROJECT_URL" "$CI_PIPELINE_ID" "$CI_COMMIT_MESSAGE" "$CI_COMMIT_AUTHOR" "$CI_COMMIT_TIMESTAMP")# 发送告警curl "$WEBHOOK_URL" -X POST -H 'Content-Type: application/json;charset=utf-8' -d "$JSON_DATA"# 记录失败的构建echo "$CI_PROJECT_NAME failed" >> "$RECORD_FILE";;success)# 构建成功,检查记录文件if grep -q "$CI_PROJECT_NAME failed" "$RECORD_FILE"; thenecho "构建成功,发送告警..."# 准备成功告警消息SUCCESS_JSON_DATA=$(printf '{"msgtype": "markdown","markdown": {"title": "告警:构建成功通知","text": "#### **[%s 的 Maven 测试已通过构建成功]**\n\n> - **提交信息**: %s\n> - **提交者名称**: %s\n> - **提交时间**: %s\n\n构建成功,可以进行下一步操作。"},"at": {"isAtAll": false}}' "$CI_PROJECT_NAME" "$CI_COMMIT_MESSAGE" "$CI_COMMIT_AUTHOR" "$CI_COMMIT_TIMESTAMP")# 发送成功告警curl "$WEBHOOK_URL" -X POST -H 'Content-Type: application/json;charset=utf-8' -d "$SUCCESS_JSON_DATA"# 清除记录sed -i "/$CI_PROJECT_NAME failed/d" "$RECORD_FILE"elseecho "没有找到构建失败的记录,不发送成功告警。"fi;;*)echo "Invalid argument: $1. Expected 'success' or 'fail'."exit 1;;
esacexit 0

设置流水线计划

步骤1:登录GitLab并进入项目

  1. 登录到您的GitLab账号。
  2. 导航到您想要设置流水线计划的项目。

步骤2:进入CI/CD设置

  1. 在项目主页,点击左侧面板中的“CI/CD”选项卡。
  2. 在CI/CD设置区域,点击“Schedules”(调度)。

步骤3:创建新的流水线计划

  1. 在“Schedules”页面,点击“New schedule”按钮以创建一个新的流水线计划。

步骤4:配置流水线计划详细信息

  1. 描述:为您的流水线计划提供一个易于理解的描述,以便日后识别。
  2. CRON 表达式:输入一个cron表达式来定义计划执行的时间规律。例如,每天凌晨1点执行,可以输入0 1 * * *。请参考cron表达式文档以获取更多信息。
  3. 分支/标签:可以选择流水线将在哪个分支或标签上执行,默认通常是当前项目的默认分支(如master/main)。
  4. 额外变量(可选):如果需要,您可以为流水线提供额外的环境变量,这将在计划执行时注入到环境中。
  5. 保护(可选):如有必要,您可以勾选“Protect this pipeline”,这样只有具有适当权限的用户才能执行或修改该流水线计划。

步骤5:保存流水线计划

  1. 配置完所有选项后,滚动到底部并点击“Save changes”。

步骤6:验证流水线计划

  1. 在指定的时间,GitLab将根据您设置的cron表达式自动触发流水线。您可以在项目的历史流水线记录中查看流水线计划的执行情况。

注意事项

  • 确保您的项目中有.gitlab-ci.yml文件,并且文件中定义了适当的CI/CD流水线配置,这样才能在计划时间到来时执行预定的任务。
  • 如果流水线涉及到敏感信息,您可能需要预先配置好变量并通过密钥管理或GitLab的受保护变量功能来安全地传递这些信息。
  • 某些高级设置,如运行特定job,需要在.gitlab-ci.yml文件中通过rulesonly/except关键字进行定义。
    在这里插入图片描述
    在这里插入图片描述

验证流水线自动化

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

如何使用Android平板公网访问本地Linux code-server

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

网络: 数据链路层

数据链路层: 数据帧的封装与传输 以太网数据帧 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;帧协议类型字段有三种值,分别对应IP、ARP、RARP;帧末尾是CRC校验码 以太网 "以太网" 不是一种具体的网络, 而是一种技术标准; 既…

[项目前置]如何用webbench进行压力测试

测试软件 采用webbench进行服务器性能测试。 Webbench是知名的网站压力测试工具&#xff0c;它是由Lionbridge公司开发。 webbench的标准测试可以向我们展示服务器的两项内容&#xff1a; 每秒钟相应请求数 和 每秒钟传输数据量 webbench测试原理是&#xff0c;创建指定数…

Prompt进阶系列5:LangGPT(提示链Prompt Chain)--提升模型鲁棒性

Prompt进阶系列5:LangGPT(提示链Prompt Chain)–提升模型鲁棒性 随着对大模型的应用实践的深入&#xff0c;许多大模型的使用者&#xff0c; Prompt 创作者对大模型的应用越来越得心应手。和 Prompt 有关的各种学习资料&#xff0c;各种优质内容也不断涌现。关于 Prompt 的实践…

微服务day05(上) - Elasticsearch

1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近的…

哈希、散列表和Rabin-Karp算法

字典 现有一个抽象数据类型(ADT)如下&#xff1a; 包括了一组元素&#xff0c;每个元素都有一个键key。假设没有元素拥有相同的key&#xff0c;如果有相同的key&#xff0c;则覆盖掉原有key的元素。 -insert(item) -delete(item) -search(key):根据给定的key&#xff0c;返…

Python:熟悉简单的skfuzzy构建接近生活事件的模糊控制器”(附带详细注释说明)+ 测试结果

参考资料&#xff1a;https: // blog.csdn.net / shelgi / article / details / 126908418 ————通过下面这个例子&#xff0c;终于能理解一点模糊理论的应用了&#xff0c;感谢原作。 熟悉简单的skfuzzy构建接近生活事件的模糊控制器 假设下面这样的场景, 我们希望构建一套…

苍穹外卖-day02

1. 新增员工 1.1 需求分析和设计 注意事项&#xff1a; 账号必须是唯一的手机号为合法的11位手机号码身份证号为合法的18位身份证号码密码默认为123456 本项目约定&#xff1a; 管理端发出的请求&#xff0c;统一使用**/admin**作为前缀。用户端发出的请求&#xff0c;统一使用…

没有磁盘整列下的多机分布式存储:使用rysnc+多服务器文件/文件夹内容同步

目录 0.为什么要定时同步 1.程序安装 2.文件夹设置rsync使用 3.使用cron进行定时任务 0.为什么要定时同步 作为科研党&#xff0c;实验室有多个服务器&#xff0c;但是都是分批买的没有上磁盘整列&#xff0c;所以一个服务器上跑的东西并不能同步&#xff0c;有时候挂任务要…

四川宏博蓬达法律咨询有限公司:法律服务安全的新标杆

在这个法治社会&#xff0c;法律服务行业扮演着越来越重要的角色。四川宏博蓬达法律咨询有限公司&#xff0c;作为行业内的佼佼者&#xff0c;始终坚持以客户为中心&#xff0c;为客户提供专业、高效、安全的法律服务。 一、公司背景与实力展示 四川宏博蓬达法律咨询有限公司自…

C语言例3-26:逗号表达式的例子

逗号表达式&#xff1a; 表达式1&#xff0c;表达式2 表达式可以是算术表达式、关系表达式、逻辑表达式、条件表达式、赋值表达式和逗号表达式。 代码如下&#xff1a; #include<stdio.h> int main(void) {int i1,j;float f2.0f;char chb; //b(98)// printf(&…

开源项目ChatGPT-Next-Web的容器化部署(二)-- jenkins CI构建并推送镜像

一、背景 接着上文已制作好了Dockerfile&#xff0c;接下来就是docker build/tag/push等一系列操作了。 不过在这之前&#xff0c;你还必须在jenkins等CI工具中&#xff0c;拉取源码&#xff0c;然后build构建应用。 因为本文的重点不是讲述jenkins ci工具&#xff0c;所以只…

Win10中IIS服务如何部署c#服务

1、将项目打包发布 注意发布位置 2、打开搜索搜索计算机管理 3、点击服务和应用程序 4、点击internet information service 5、点击网站再点击添加网站 6、添加网站名称&#xff1a;opm 添加网站路径&#xff08;即刚才发布路径&#xff09; 输入ip地址&#xff1a;自己…

PyTorch深度学习:如何实现遥感影像的自动化地物分类?

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

(MATLAB)第二十一章 Simulink仿真设计初步

Simulink是MATLAB的重要组成部分&#xff0c;可以非常容易地实现可视化建模&#xff0c;并把理论研究和工程实践有机地结合在一起&#xff0c;不需要书写大量程序&#xff0c;只需要使用鼠标和键盘对已有模块进行简单的操作和设置。 21.1 Simulink简介 Simulink是MATLAB软件的…

百度小程序入口在哪里找到怎么打开百度词令关键词口令直达小程序?

百度小程序入口在哪里找到怎么打开百度词令关键词口令直达小程序&#xff1f; 一、百度搜索找到百度词令小程序 打开手机百度搜索「词令」即可找到百度词令关键词口令直达小程序&#xff1b; 二、百度小程序中心找到百度小程序 2.1、打开手机百度&#xff0c;点击底部我的&a…

C++ 侯捷 程序设计(Ⅱ)兼谈对象模型 笔记

Conversion function 转换函数 侯捷老师使用分数 Fraction举例&#xff0c;分数理应可以被看作是小数 提供了Fraction类对象一个转换为double的方法&#xff0c;当碰到需要转换为double的情况下&#xff0c;会调用该方法。 黄色的就是转换函数&#xff0c;没有return type&am…

赋能 DevOps:平台工程的关键作用

在当今快节奏的数字环境中&#xff0c;DevOps 已成为寻求简化软件开发和交付流程的组织的关键方法。DevOps 的核心在于开发和运营团队之间协作的概念&#xff0c;通过一组旨在自动化和提高软件交付生命周期效率的实践和工具来实现。 DevOps 实践的关键推动因素之一是平台工程。…

市场复盘总结 20240322

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 36% 最常用…

使用专属浏览器在国内直连GPT教程

Wildcard官方推特发文说他们最近推出了一款专门为访问OpenAI设计的浏览器。 根据官方消息&#xff0c;这是一款专门为访问OpenAI优选网络设计的浏览器&#xff0c;它通过为用户提供专用的家庭网络出口&#xff0c;确保了快速、稳定的连接。 用这个浏览器的最大好处就是直接用浏…