实现无间断的自动化:Jenkins与GitLab的定时任务工作流程

news2024/11/17 0:00:24

简介:

Jenkins是一个流行的开源自动化服务器,而GitLab是一个强大的代码托管和协作平台。通过结合Jenkins和GitLab,我们可以建立一个强大的定时任务自动化工作流程,实现代码拉取、构建、测试和部署的自动化。本篇博客将介绍如何使用Jenkins与GitLab相结合,构建一个完整的定时任务自动化流程。

背景

目前我们的代码存放在gitlab中,有版本控制比较方便开发。现在有个Crontab的仓库存放,日常的定时任务脚本。
如果放在Linux的crontab上,代码更新完毕 需要及时拉取才会 执行新的代码,比较麻烦。这边就采用jenkins的crontab来执行定时任务

优势

Jenkins可以满足您提到的核心需求,并提供以下功能:

  • 审计执行日志:Jenkins记录每个任务的执行日志,并提供可视化界面来查看和审计任务的执行历史。您可以随时查看任务的执行输出、错误信息以及任何产生的警告或异常。

  • 任务超时强制kill:Jenkins允许您为每个任务设置超时时间。如果任务在指定的时间内未完成,Jenkins会强制终止任务的执行,以防止无限循环或资源占用等问题。

  • 任务的超时重试:Jenkins提供了内置的插件,如Pipeline和Job DSL,可以轻松地编写自定义的任务流程,并支持任务的超时重试。您可以在任务失败或超时后自动触发重试,并设置重试次数和时间间隔,以确保任务能够成功完成。

  • 错误重试和自定义次数:Jenkins提供了灵活的错误处理机制,您可以在任务执行失败时自定义处理逻辑。您可以设置任务在遇到错误时自动触发重试,并指定重试次数和重试间隔,以便应对临时性的错误和问题。

Jenkins作为一个开源的自动化服务器,具有广泛的社区支持和丰富的插件生态系统,可以满足各种复杂的任务调度和自动化需求。通过适当的配置和使用插件,您可以实现高度定制化的任务调度和执行流程,满足您特定的需求,并确保任务的可靠执行和错误处理。

Gitlab创建仓库

  1. 登录GitLab:打开您的Web浏览器,输入GitLab的URL,并使用您的GitLab账户登录。

  2. 导航到项目页面:登录后,您将看到GitLab的仪表板或项目列表。点击页面顶部的“+”按钮或导航栏上的“New project”按钮。

  3. 创建新项目:在新项目页面上,您需要提供以下信息来创建新的仓库:

    • 项目路径:指定项目的路径,也就是项目在GitLab上的URL地址。它将用于在仓库的URL中唯一标识您的项目。
    • 可见级别:选择您希望谁能访问您的项目。您可以选择公开(Public)、私有(Private)或内部(Internal)可见性级别。
    • 项目名称:为您的项目指定一个易于识别的名称。
    • 描述(可选):提供关于项目的简要描述,以便其他人了解项目的目的和内容。
    • 初始化仓库:选择是否要初始化一个空的仓库,或者您可以选择从现有的代码库导入代码。
  4. 完成设置:在提供必要信息后,单击页面下方的“Create project”按钮。GitLab将根据您提供的信息创建新的仓库,并将您重定向到新仓库的页面。

  5. 配置仓库(可选):在新仓库页面上,您可以进一步配置仓库的设置,例如添加项目成员、设置分支保护规则、启用CI/CD等。这些设置可以根据您的具体需求进行调整。

    添加测试脚本

monitor.sh

#!/bin/bash
echo "======================="
echo $(date)

#!/bin/bash
# @Author: danqing
# @Description: Host Daily Check Script
# beseem CentOS6.X CentOS7.X
# 
echo "Host Daily Check Script"
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1
 
 
if [ ! -d /root/check_log  ];then
  mkdir /root/check_log
  echo "/root/check_log检查日志存放目录创建成功"
else
  echo "/root/check_log检查日志存放目录已存在"
fi
 
 
function getSystem(){
echo ""
echo ""
echo "############################ 系统信息检查 ############################"
Default_LANG=${LANG}
OS=$(uname -o)
Release=$(cat /etc/redhat-release 2>/dev/null)
Kernel=$(uname -r)
Hostname=$(uname -n)
Nowdate=$(date +'%F %T')
LastReboot=$(who -b | awk '{print $3,$4}')
uptime=$(uptime | sed 's/.*up \([^,]*\), .*/\1/')
echo " 语言环境: $Default_LANG"
echo " 系统: $OS"
echo " 发行版本: $Release"
echo " 内核: $Kernel"
echo " 主机名: $Hostname"
echo " 当前时间: $Nowdate"
echo " 最后启动: $LastReboot"
echo " 运行时间: $uptime"
}
 
 
function getCpu(){
echo ""
echo ""
echo "############################ CPU检查 ############################"
Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l)
Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq| awk -F ': ' '{print $2}')
CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
CPU_Hz=$(cat /proc/cpuinfo | grep "cpu MHz" | uniq | awk -F':' '{sub(/ /,"",$2);printf "%s MHz\n",$2}')
CPU_Arch=$(uname -m)
CPU_Usage=$(cat /proc/loadavg | awk '{print $1}')
echo "物理CPU个数: $Physical_CPUs"
echo "逻辑CPU个数: $Virt_CPUs"
echo "每CPU核心数: $CPU_Kernels"
echo "CPU型号: $CPU_Type"
echo "CPU频率: $CPU_Hz"
echo "CPU架构: $CPU_Arch"
echo "CPU使用率: ${CPU_Usage}%"
}
 
 
function getMemory(){
echo ""
echo ""
echo "############################ 内存检查 ############################"
Memory_Used=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024/1024}'  /proc/meminfo)
Memory_Total=$(awk '/MemTotal/{total=$2}END{print (total)/1024/1024}' /proc/meminfo)
# kb的换算是1000 kB的换算是1024
Memory_Usage=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/total*100}'  /proc/meminfo)
echo "已使用内存/全部内存: ${Memory_Used}GB/${Memory_Total}GB"
echo "内存使用率: ${Memory_Usage}%"
}
 
 
function getDisk(){
echo ""
echo ""
echo "############################ 硬盘检查 ############################"
Disk_Count=$(lsblk |awk '/disk/{print $1}'|wc -l)
echo "硬盘数量: ${Disk_Count}个"
echo "硬盘分区情况: "
echo "`df -hTP | sort |grep -E "/sd|/mapper" |awk '{print ($1 "\t\n" "  文件系统"$2 "  合计"$3 "  已用"$4 "  剩余"$5 "  使用率"$6 "  挂载点"$7)}'`"
# -P, --portability 使用 POSIX 输出格式,方便shell过滤处理
smartctl -V >&/dev/null
if [ $? -eq 0 ]; then
    echo "smartctl工具已安装,可以进行硬盘健康检测: "
    for i in $(lsblk |awk '/disk/{print $1}')
    do
      echo "硬盘"$i   `smartctl -H /dev/$i |grep -Ei "OK|PASSED|FAILED|Failure|Failed"`
    done
else
    echo "smartctl工具未安装,无法进行硬盘健康检测"
fi
# "\n磁盘IO信息:$(iotop -bon 1 &>/dev/null || echo 'iotop 未安装信息获取失败')"
}
 
 
function getNetwork(){
echo ""
echo ""
echo "############################ 网络检查 ############################"
Network_Device=$(cat /proc/net/dev | awk 'NR>2 && $1 !~/lo/ {sub(/:/,"");print $1}')
for i in $Network_Device
do
  #echo "网卡:$i  状态: $(ip link show $Network_Device | awk 'NR==1{print $9}') RX: $(ethtool -g $Network_Device | grep "RX:" | tail -1 | awk '{print $2}') TX: $(ethtool -g $Network_Device | grep "TX:" | tail -1 | awk '{print $2}')"
  # rx是接收(receive),tx是发送(transport)
  Mac_Info=$(ip link | egrep -v "lo" | grep link | awk '{print $2}')
  echo "MAC地址: $Mac_Info"
  Private_Ip=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
  echo "IP地址: $Private_Ip"
  # Public_Ip=$(curl ifconfig.me -s)
  # echo "公网IP地址: $Public_Ip"
  Gateway=$(ip route | grep default | awk '{print $3}')
  # echo "网关地址: $Gateway"
  # Dns_Config=$(grep nameserver /etc/resolv.conf| grep -v "#" | awk '{print $2}' | tr '\n' ',' | sed 's/,$//')
  # echo "DNS地址: $Dns_Config"
  echo "网关连接情况: $(ping -c 4 -i 0.5 -W 3 $Gateway &>/dev/null && echo '正常通信' || echo '无法通信')"
  echo "外网连接情况: $(ping -c 4 -i 0.5 -W 3 baidu.com &>/dev/null && echo '正常通信' || echo '无法通信')"
  # 发送4次请求包,每次间隔0.5秒,最长等待时间为3秒
done
Listen_Port=$(ss -tuln | grep LISTEN | awk '{print $5}' | awk -F: '{print $2$4}' | sort |uniq -d | tr '\n' ',' | sed 's/,$//')
echo "系统运行的端口: $Listen_Port"
}
 
 
function check(){
echo "Host Daily Check Script"
getSystem
getCpu
getMemory
getDisk
getNetwork
}
 
 
RESULTFILE="/root/check_log/check-`date +%Y%m%d`.txt"
check > $RESULTFILE
echo "检查结果:$RESULTFILE"
cat  $RESULTFILE

Jenkins配置Gitlab的认证凭证

在Jenkins中配置GitLab的认证凭证,您可以按照以下步骤进行操作:

  1. 登录Jenkins:打开您的Web浏览器,输入Jenkins的URL,并使用管理员账户登录到Jenkins控制台。

  2. 导航到凭据页面:在Jenkins控制台的主页上,点击左侧导航栏中的"凭据"(Credentials)选项。
    在这里插入图片描述

  3. 创建新的凭据:在凭据页面,点击"系统"(System)下方的"全局凭据"(Global credentials)选项。

  4. 添加凭据:在全局凭据页面,点击"添加凭据"(Add Credentials)按钮。

  5. 选择凭据类型:在"添加凭据"页面,选择GitLab凭据的类型。根据您的GitLab配置,可以选择不同的类型,例如"Username with password"(用户名和密码)或"SSH Username with private key"(SSH用户名和私钥)等。
    在这里插入图片描述

  6. 填写凭据信息:根据您选择的凭据类型,填写相关的凭据信息。例如,如果选择"Username with password",则需要提供GitLab的用户名和密码;如果选择"SSH Username with private key",则需要提供GitLab的SSH用户名和私钥等信息。
    在这里插入图片描述

  7. 保存凭据:完成填写凭据信息后,点击页面下方的"保存"(Save)按钮,将凭据保存到Jenkins中。

  8. 配置Jenkins项目:在Jenkins中的项目配置中,找到与GitLab相关的配置部分,例如构建触发器或源码管理。在这些配置中,您将看到"凭据"(Credentials)的选项。

  9. 选择凭据:在相关配置中,找到"凭据"(Credentials)选项,并选择您之前保存的GitLab凭据。

  10. 保存配置:完成凭据选择后,确保保存项目的配置。

完成上述步骤后,Jenkins将能够使用您配置的GitLab凭据进行与GitLab的交互,例如拉取代码、触发构建等操作。这样,您就可以通过Jenkins与GitLab进行无缝集成,并实现持续集成和持续交付的自动化流程。

Jenkins设置定时任务

  1. 登录Jenkins:使用管理员账户登录到Jenkins控制台。

  2. 创建新项目:在Jenkins控制台主页上,点击"新建任务"(New Item)按钮。

  3. 输入项目名称:为新项目指定一个易于识别的名称,并选择自由风格的软件项目(FreeStyle Project)类型。
    在这里插入图片描述

  4. 配置源码管理:在项目配置页面的"源码管理"(Source Code Management)部分,选择Git作为源码管理工具,并填写GitLab仓库的URL。

  5. 配置凭据:如果您之前在Jenkins中配置了GitLab的认证凭证,请在源码管理部分选择相应的凭据,以便Jenkins能够访问GitLab仓库。
    在这里插入图片描述

  6. 配置构建触发器:在项目配置页面的"构建触发器"(Build Triggers)部分,选择"定时构建"(Build periodically)选项。

  7. 设置定时任务:在"定时构建"选项中,使用Cron表达式指定定期执行任务的时间。例如,要每天的上午9点执行任务,可以使用"0 9 * * *"的Cron表达式。
    在这里插入图片描述

  8. 配置构建步骤:在项目配置页面的"构建"(Build)部分,配置需要执行的构建步骤。这可以是构建脚本、测试命令、部署操作或任何其他您希望Jenkins执行的任务。
    在这里插入图片描述

  9. 保存配置:完成配置后,确保保存项目的配置。

Jenkins将按照您设置的定时任务,定期拉取GitLab仓库中的代码,并执行您配置的构建步骤。您可以在Jenkins控制台的项目页面上查看每次构建的执行日志和结果,以及任何产生的警告或错误。

Jenkins定时任务执行

时间

在这里插入图片描述

查询日志

在这里插入图片描述

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

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

相关文章

大屏数据可视化开源项目

一、DataGear —— 数据可视化项目 官网:DataGear - 开源免费的数据可视化分析平台 DataGear 是一款开源免费的数据可视化分析平台,数据可视化看板。 功能特性: 1、多种数据源,支持运行时接入任意提供 JDBC 驱动的数据库&#…

Web网页端IM产品RainbowChat-Web的v5.0版已发布

一、关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIMSDK(Github地址) 的产品级移动端IM系统)。 ► 详细介绍:http://www.52im.net/thread-248…

Python的pip install安装路径修改

背景 当我们在安装python的依赖包的时候,不知道默认安装在什么位置,或者不想安装在默认的位置,这时候我们可以手动修改pip install的安装位置。 1.打开cmd窗口, 执行python -m site 输入 python -m site 这个命令可以看到目前的USER_BASE和…

HarmonyOS ArkTS Ability内页面的跳转和数据传递

HarmonyOS ArkTS Ability的数据传递包括有Ability内页面的跳转和数据传递、Ability间的数据跳转和数据传递。本节主要讲解Ability内页面的跳转和数据传递。 打开DevEco Studio,选择一个Empty Ability工程模板,创建一个名为“ArkUIPagesRouter”的工程为…

亚马逊美国站 CPC认证-儿童毛绒玩具产品 毛绒玩具的作用

毛绒玩具等毛绒东西,其实能给孩子带来愉快和安全感,接触舒适,是儿童依恋的重要部分。我们常常能见到一些孩子晚上睡觉前一定要搂着毛绒玩具、或者一定要盖着毛绒毯子才能睡,丢掉了毛绒玩具,或者盖了其他布质的被子就会…

vue时间组件重置

<el-form-item label"注册日期" label-width"210px"><el-date-picker clearablev-model"registerTime"type"daterange"range-separator"至"value-format"yyyy-MM-dd"start-placeholder"开始日期&qu…

[论文笔记] Atos: A Task-Parallel GPU Scheduler for Graph Analytics

Atos: A Task-Parallel GPU Scheduler for Graph Analytics Atos: 用于图分析的任务并行 GPU 调度程序 [Paper] [Slides] ICPP’22 摘要 提出了 Atos, 一个特别针对动态不规则应用的任务并行 GPU 动态调度框架. 支持消除依赖关系的应用的任务并行公式来暴露额外的并发性除了…

MacBook苹果笔记本电脑卡顿怎么解决?

MacBook使用时间久了之后很容易出现卡顿的问题。那么出现卡顿的原因有哪些呢&#xff1f;MacBook卡顿怎么处理呢&#xff1f;下面为大家介绍几种可能的解决方案。虽然mac系统相对来说比较稳定&#xff0c;但遇到软件崩溃的情况也会突然卡顿而无法使用。那么&#xff0c;遇上mac…

C#运行程序修改数据后数据表不做更新【已解决】

前言 近日&#xff0c;在使用C#连接数据库的时候&#xff0c;对数据库中的表做更新后&#xff0c;在当前启动项目中去显示表数据时虽然会发生一个更新&#xff0c;但是在结束程序运行后再去观察数据表中的记录时发现并没有发生一个变化&#xff0c;在重复尝试了好几次后还是同样…

【Linux】中不小心误卸载了rpm命令如何恢复?

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 问题复现问题解决方案补全 whereis r…

Mac电脑把位图转换成矢量图的软件

Super Vectorizer for Mac是一款强大的位图转换工具&#xff0c;运行在Mac OS平台&#xff0c;可以轻松将数位图转换为矢量图。 矢量图以其放大后图像不会失真的优点&#xff0c;在社会各处的使用范围越来越广&#xff0c;但是网络上找到的图片又往往是数位图&#xff0c;这时…

【APP Debug抓包工具】Stream - Network Debug Tool

【APP Debug工具】 Stream - Network Debug Tool

Flutter进阶篇-Local Key和Global Key

简介: key是widget、element和semanticsNode的唯一标识&#xff0c;同一个parent下的所有element的key不能重复&#xff0c;但是在特定条件下可以在不同parent下使用相同的key&#xff0c;比如page1和page2都可以使用ValueKey(1) 。 常用key的UML关系图如上&#xff0c;整体上…

阿里云安装2019版sql server服务

1、添加 Microsoft 的 yum 存储库 [rootiZ22312ginudnbnifn438Z ~]# curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo 这里地址一定要选择https://packages.microsoft.com/config/rhel/7/mssql-server-2019…

华为OD机试真题 JavaScript 实现【记票统计】【牛客练习题】

一、题目描述 请实现一个计票统计系统。你会收到很多投票&#xff0c;其中有合法的也有不合法的&#xff0c;请统计每个候选人得票的数量以及不合法的票数。 &#xff08;注&#xff1a;不合法的投票指的是投票的名字不存在n个候选人的名字中&#xff01;&#xff01;&#x…

JavaScript DOM

1、DOM介绍 DOM(Document Object Model)&#xff1a;文档对象模型。 将 HTML 文档的各个组成部分&#xff0c;封装为对象。借助这些对象&#xff0c;可以对 HTML 文档进行增删改查的动态操作。 1.1、Element元素的获取操作 具体方法 方法名说明getElementById (id 属性值)根…

原因分析必知必会的十大要点

原因分析是对选定的现象进行全面深入的研究&#xff0c;找到现象背后的真正原因与深层次原因&#xff0c;然后采取合适的措施纠正问题、预防问题。如果没有找到真正的根因就采取措施&#xff0c;往往事倍功半&#xff0c;浪费了投入。那么在原因分析时&#xff0c;有哪些成功要…

adb 导入导出安卓设备里面的apk和文件

安卓设备上导出apk到电脑 &#xff1a; 第一条指令查&#xff1a;adb shell pm list package -3 //列出所有非系统三方应用如下 package:com.sangfor.vpn.client.phonepackage:com.spd.mdm.other.funcpackage:com.supcon.supplant第二条指令查路径&#xff1a;adb shell pm pa…

容器(第七篇)docker-consul

consul服务器&#xff1a; 1. 建立 Consul 服务 mkdir /opt/consul cp consul_0.9.2_linux_amd64.zip /opt/consul cd /opt/consul unzip consul_0.9.2_linux_amd64.zip mv consul /usr/local/bin/ //设置代理&#xff0c;在后台启动 consul 服务端 consul agent \ -server \…

python安装后的几个默认目录问题

python.exe位置 C:\Users\dao\AppData\Local\Programs\Python\Python311 pip默认安装的文件位置 C:\Users\dao\AppData\Local\Programs\Python\Python311\Lib\site-packages