当前位置:网站首页>Jenkins Pipeline 方法(函数)定义及调用
Jenkins Pipeline 方法(函数)定义及调用
2022-07-05 08:51:00 【云计算-Security】
网上查了一些文档资料,Jenkins Pipeline 方法调用
的文章还是比较少的,就算有也描述得不太清楚。于是根据自己的经验总结了如何在 Jenkinsfile 进行方法调用。如有不当之处,请予指正。
首先来说一下为什么要使用方法
?有这样一个场景,我有十几台远端服务器,这些服务器都是我的测试(或线上)服务器,我构建后的包需要部署到这些服务器上,于是我会为每台远程服务器定义相关登录信息(用户名、密码或密钥)等。这些配置对于每台服务器来说其实都是一样,无非就是 IP 不同而已(用户名、密钥或密码我暂且保持一致),于是我就可以将相同的部分定义为一个方法或叫函数,并在我的流水线阶段来调用这些方法或函数,当你定义的函数过多时,你还可以将这些函数写道共享库
中,然后流水线调用共享库即可。
本案例以声明式
Jenkinsfile 为例进行演示!
1、定义方法(函数)
方法定义于 pipeline {}
之外,并在 pipeline {}
之内进行调用。如下,我定义了一个远程服务器的远程登录信息,方便我能把构建的包发布到远程服务器上。
// 创建函数
def RemoteHost(Jarnname, Host, ProJect) {
withCredentials([usernamePassword(credentialsId: '131', passwordVariable: 'PassWord', usernameVariable: 'UserName')]){
def remote = [:]
remote.name = "$Jarnname"
remote.host = "$Host"
remote.user = "$UserName"
remote.password = "$PassWord"
remote.port = 22
remote.allowAnyHosts = true
sshPut remote: remote, from: "./target/$Jarnname", into: "./${ProJect}/", override: true
}
}
// 流水线步骤
pipeline {
stages {
// 阶段 + 步骤
}
}
2、调用方法(函数)
看下面代码块的项目发布
阶段,在这里调用了上面定义的函数,并进行参数传递。
// 创建函数
def RemoteHost(Jarnname, Host, ProJect) {
withCredentials([usernamePassword(credentialsId: '131', passwordVariable: 'PassWord', usernameVariable: 'UserName')]){
def remote = [:]
remote.name = "$Jarnname"
remote.host = "$Host"
remote.user = "$UserName"
remote.password = "$PassWord"
remote.port = 22
remote.allowAnyHosts = true
sshPut remote: remote, from: "./target/$Jarnname", into: "./${ProJect}/", override: true
}
}
// 流水线步骤
pipeline {
agent {
docker {
image 'maven:v2'
args '-v /var/lib/jenkins/workspace/$JOB_NAME:/root/.m2 -v /root/mavenRepository:/usr/repository'
}
}
...
...
stages {
// 拉取代码
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: "${params.BRANCH_TAG}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
gitTool: 'Default',
submoduleCfg: [],
userRemoteConfigs: [[url: 'https://codeup.aliyun.com/xx/java_code.git',credentialsId: 'yourid',]]
])
}
// 项目构建
stage("构建项目") {
steps {
sh "mvn clean package -Dmaven.test.skip=true -P test"
}
}
// 项目发布(在这里调用方法)
stage ("项目发布") {
steps {
script {
switch("$p_name"){
case "cms":
Jarnname = "demo.jar"
Host = "192.168.56.131"
ProJect = "cms"
// 调用方法并传递参数
RemoteHost("${Jarnname}", "${Host}", "${ProJect}")
break
}
}
}
}
...
...
}
}
这样的话,我们就不用每次都写一遍定义的方法内容了,只需调用其函数名即可。
注意:上面只是我 Jenkinsfile 的一部分!
至此,Jenkins Pipeline 方法定义及调用已经完成。
边栏推荐
- MPSoC QSPI Flash 升级办法
- Adaboost使用
- Yolov4 target detection backbone
- Ros-11 common visualization tools
- c#比较两张图像的差异
- C [essential skills] use of configurationmanager class (use of file app.config)
- Guess riddles (7)
- 暑假第一周
- [daily training -- Tencent selected 50] 557 Reverse word III in string
- Shift operation of complement
猜你喜欢
随机推荐
整形的分类:short in long longlong
location search 属性获取登录用户名
Classification of plastic surgery: short in long long long
Guess riddles (8)
12. Dynamic link library, DLL
Business modeling of software model | object modeling
Meta标签详解
Illustrated network: what is gateway load balancing protocol GLBP?
多元线性回归(sklearn法)
微信H5公众号获取openid爬坑记
Hello everyone, welcome to my CSDN blog!
Array, date, string object method
Wheel 1:qcustomplot initialization template
The first week of summer vacation
Bit operation related operations
Basic number theory -- Euler function
图解网络:什么是网关负载均衡协议GLBP?
IT冷知识(更新ing~)
Digital analog 1: linear programming
2011-11-21 training record personal training (III)