Jenkins运维之路(初次调试共享库)
作者:互联网
2026-03-05
1. 共享库创建
1.1 目录结构
# 这里的目录结构src vars resource是参考官方建立的
tree ops-share-librarya
├── Ansible # Ansible部署脚本
├── Jenkinsfile # 用于存放流水线
├── Readme.md
├── resources # 一般用于存放静态资源文件,这些文件可以在构建或运行时被访问和使用
│ ├── config
│ ├── Readme.md
│ ├── scripts
│ ├── static
│ └── templates
├── src # 业务逻辑一般都在这里编写
│ └── org
│ └── devops
└── vars # 定义全局变量和函数,这些变量和函数可以在不同的 Jenkins Pipeline z共享和重用。
└── Readme.md
1.2 Jenkins引用Git上的共享库资源
image-20250922105847114
2.定义方法&引用
2.1 直接定义方法并在jenkins中引用
//在代码库中创建一个测试方法
//src/org/devops/test.groovy
package org.devops
def PrintMes(){
println "PrintMes"
}
def PrintError(){
println "PrintError"
}
//JenkinsPipeline中引用
@Library('ops-share-librarya@master') _ //引入共享库
def test = new org.devops.test() //定义个对象并传入变量中
pipeline {
stages {
stage('Check requirement') {
steps {
script {
// 调用org.devops.test()也就是test中的方法
test.PrintMes()
test.PrintError()
}
}
}
}
//流水线运行结果
[Pipeline] echo
13:41:15 PrintMes
[Pipeline] echo
13:41:15 PrintError
2.2 定义类并在jenkins中引用
//在代码库中创建一个Utils测试类
//src/org/devops/Utils.groovy
package org.devops
class Utils {
//静态方法可以在pipeline引入后直接用类名+方法直接调用 全局为一
static def createVersionStaticId(buildId) {
return "${new Date().format('yyyyMMddHHmmss')}_${buildId}"
}
//普通方法在pipeline中引用后需要创建对象进行引用new ,不同的对象拥有自己的状态
def createVersionId(buildId) {
return "${new Date().format('yyyyMMddHHmmss')}_${buildId}"
}
}
//JenkinsPipeline中引用
@Library('ops-share-librarya@master') _ //引入共享库
import org.devops.Utils //导入测试类
pipeline {
stages {
stage('Check requirement') {
steps {
script {
//调用静态方法,注意静态方法是可以直接通过类名+方法的方式来进行调用的
//def version = Utils.createVersionStaticId(env.BUILD_ID.toString())
def version = Utils.createVersionStaticId(env.BUILD_ID)
echo "Generated version: ${version}"
//-----------------------------------------------
//调用普通方法 ,必须要先创建实例才能使用
def utils = new org.devops.Utils() // 创建 Utils 类的实例 utils
//def instanceVersionId = utils.createVersionId(env.BUILD_ID.toString())
def instanceVersionId = utils.createVersionId(env.BUILD_ID) //调用示例,传入参数来生成ID
echo "Instance Version ID: ${instanceVersionId}"
}
}
}
}
// 引用后的输出
[Pipeline] echo
14:07:53 Generated version: 20250922140753_33
[Pipeline] echo
14:07:53 Instance Version ID: 20250922140753_33
3.实际案例
3.1 创建上传方法
package org.devops
def NexusUpload(){
// 使用之前生成的 version 变量
nexusArtifactUploader artifacts: [
[
artifactId: 'basejar', // 替换为您的 artifactId
classifier: '',
file: 'target/spring-boot-3-hello-world-1.0.0-SNAPSHOT.jar', // 替换为您的文件路径
type: 'jar' // 根据您的文件类型进行修改
],
[
artifactId: 'basejar', // 同样的 artifactId,或根据需要修改
classifier: 'pom',
file: 'pom.xml', // 指向您的 pom.xml 文件
type: 'pom' // 文件类型为 pom
]
],
//文件file类型有jar,pom,war,zip,tar.gz
credentialsId: 'Nexus3-DevOps',
groupId: 'top.xxx',
nexusUrl: 'registryv.xxx.top',
nexusVersion: 'nexus3',
protocol: 'https',
repository: 'DevopsArtifact',
version: "v8"
}
image-20250922182654605
3.2 Pipeline中引用方法
#!groovy
@Library('ops-share-librarya@master') _
def createVersion() {
// 创建了一个方法createVersion()
// 定义一个时间戳+构建ID作为版本号,为tag使用
return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}"
}
pipeline {
//省略......
stages {
//省略......
//调用方法
stage('Upload to Nexus') {
steps {
script {
def nexustest = new org.devops.nexus()
nexustest.NexusUpload()
}
}
}
}
post {
//省略......
}
}
image-20250922183313387
image-20250922183935203
3.3 流水线引用方法前后对比
image-20250922183615676
相关推荐
专题
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
最新数据
相关文章
KubeSphere 最佳实战:制作 Ansible 离线安装包实战指南
03/05
command和shell模块到底区别在哪?
03/05
Jenkins运维之路(初次调试共享库)
03/05
vivo Pulsar 万亿级消息处理实践(4)-Ansible运维部署
03/05
如何使用Semaphore在Ansible上添加GUI
03/05
Ansible-03 centos安装docker
03/05
关于CentOS的初始优化和基于Gitlab-CI的Ansible-Playbook自动优化
03/05
自动化部署工具【Ansible】之入门详解~
03/05
使用ANSIBLE大规模管理OPENTELEMETRY收集器
03/05
使用Docker构建Ansible学习环境的最佳实践
03/05
AI精选
