Jenkins运维之路(Jenkins使用Mysql作为信息存储)

在日常工作中我们会将一些环境变量的信息放在pipeline中执行定义,每次修改都要到jenkinsfile文件中进行修改或者操作,这两天看到jenkins可以直接操作数据库,忽然想到是否有一种可能将一些变量信息存入到数据库当中,在构建过程中通过从数据库中获取变量信息,这样会对运维更加的友好,目前我这只是一个测试(为每个项目创建了一张表),如果拿到生产环境中最好是创建一个表然后通过一些关键字作为搜索ID或匹配条件来从表中索取信息。

1、安装配置数据库插件

插件名称: Database , MySQL Database

null

image-20250928142535251

创建库的命令

CREATE DATABASE jenkins CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2、创建测试表并插入测试数据

sql 复制代码
# 创建表
CREATE TABLE `HelloWorld-SqlPipeline` (
  `git_repo_url` varchar(255) DEFAULT NULL,
  `registry_url` varchar(255) DEFAULT NULL,
  `harbor_url` varchar(255) DEFAULT NULL,
  `project_group` varchar(255) DEFAULT NULL,
  `project_name` varchar(255) DEFAULT NULL,
  `container_name` varchar(255) DEFAULT NULL,
  `ops_share_library` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

# 插入数据(数据大家自己定义)
INSERT INTO `HelloWorld-SqlPipeline` (`git_repo_url`, `registry_url`, `harbor_url`, `project_group`, `project_name`, `container_name`, `ops_share_library`) 
VALUES 
('git@gitee.com:xxxx/spring-boot-3-hello-world-jdk21.git', 'harbor.xxx.xxx', 'https://harbor.xxx.xxx', 'devops', 'hello-world-jdk21', 'hello-world-jdk21', 'git@gitee.com:xxxx/ops-share-librarya.git');

3. 共享库中创建mysql方法

typescript 复制代码
package org.devops

def get_mysql_msg_map(String dbName, String tableName) {
    def resultMap = [:] // 创建一个空的 Map 用于存储结果

    getDatabaseConnection(type: 'GLOBAL') {
        def result = sql(sql: "SELECT * FROM `${dbName}`.`${tableName}`;")
        
        if (result) {
            println "查询结果: ${result}" // 调试输出
            result.each { row ->
                row.each { key, value ->
                    resultMap[key] = value // 将字段名作为键,字段值作为值
                }
            }
        } else {
            println "查询没有返回任何结果"
        }
    }
    
    return resultMap // 返回结果 Map
}
null

image-20250928143305092

4.在Jenkins中引入mysql方法并测试是否能够获取数据

这里我是每个流水线创建了一个表,这样其实不太合理,但是因为测试所以就无所谓了

typescript 复制代码
#!groovy

@Library('ops-share-librarya@master') _

def nexus = new org.devops.nexus()
def sonarq = new org.devops.sonarq()
def dingtalk = new org.devops.dingtalk()

//new一个对象
def mysql = new org.devops.mysql()
//调用对象中的方法并传入参数(数据库名,表名)来获取一个map
def job_msg_map = mysql.get_mysql_msg_map('jenkins','HelloWorld-SqlPipeline')
//定义个全局变量,并使用map中键对应的值
env.GIT_REPO_URL_MAP = job_msg_map.git_repo_url


pipeline {
    agent { node { label "node47"}}
    tools {
        //...省略
    } 
    environment {
        //...省略
    }
    options {
        //...省略
    }
    parameters {
        //...省略
    }
    stages {
        stage('获取数据') {
            steps {
                script {
                    // 测试调用结果
                    println "GIT_REPO_URL_MAP: ${GIT_REPO_URL_MAP}"
                }
            }
        }    
        stage('Example') {
            //...省略
        }
        stage('Check requirement') {
            //...省略
        }
        stage('CleanWorkDir') {
            //...省略
        }
        stage('Checkout') {
            //...省略
        }
        stage('Build') {
            //...省略
        }
        stage('Upload to Nexus') {
            //...省略
        }
        stage("SonarQube Analysis") {
            //...省略
        }
        stage("Quality Gate") {
            //...省略
        }
        stage('Wait for SonarQube Analysis') {
            //...省略
        }
    }
    post {
        //...省略
    }
}
null

image-20250928144137178

很多的项目变量信息其实都可以存储到数据库当中,这样很方便我们运维统一管理。

相关推荐
2501_9159214320 小时前
KXBuild CI 实操,Windows/Linux 服务器接入 Jenkins 打包 iOS IPA
服务器·windows·vscode·ios·ci/cd·个人开发·敏捷流程
垚垚学技术_聚焦云原生3 天前
Ansible Playbook 进阶:when 条件、loop 循环、handlers 触发器落地
linux·ansible·自动化运维·devops
Sudo思维3 天前
我写了 3 年代码,最后悔的是没早点把服务器巡检脚本化(附完整脚本)
自动化运维
蒸鱼Yuzheng3 天前
性能 CI 成本优化:设备分钟、风险分层与自适应测试选择
自动化测试·ci/cd·性能测试·测试平台·成本优化
JoePotter3 天前
从零搭建华为云 EVS 每日自动快照:hcloud + PowerShell + 邮件报告实战
华为云·自动化运维·powershell·evs·koocli·快照备份·mailozaurr
Helix2503 天前
Intune 可观测性与 AI 排障实战:Copilot、高级分析与自动化运维指南
copilot·自动化运维·terminal·intune 可观测性·设备时间线·intelligent·ai排障
7177774 天前
2026年CI/CD工具选哪家比较好:主流方案对比与Gitee选型解析
ci/cd·gitee
biaov4 天前
Jenkins + Docker 搭建前端 CI:前端一键打包部署
前端·docker·jenkins
MoRay4 天前
大专大一,手搓 AIOps 底座:当大模型幻觉时,我的系统在 98.9ms 抓住了宕机的 Redis
自动化运维
smartpi_ai5 天前
机芯智能离线语音模块实战问答:SU-03T、CI-03T、SU-63T 与 JX-A7T 高频问题排查
人工智能·单片机·嵌入式硬件·ci/cd·语音识别