我正在使用Jenkins中的插件来部署jar文件,该文件是从构建过程创建的。我已经创建了这样一个管道
node {
{
stage('Checkout') {
git([url: '.............', branch: 'myBranch', credentialsId: 'mycredentials'])
}
stage('Build') {
script{
sh 'chmod a+x mvnw'
sh './mvnw clean package'
}
}
stage('Deploy to Server'){
def pom = readMavenPom file: 'pom.xml'
script {
sshPublisher(publishers: [sshPublisherDesc(configName: 'server-instance1',
transfers: [sshTransfer(cleanRemote:true,
sourceFiles: "target/${env.PROJECT_NAME}-${pom.version}.jar",
removePrefix: "target",
remoteDirectory: "${env.PROJECT_NAME}",
execCommand: "mv ${env.PROJECT_NAME}/${env.PROJECT_NAME}-${pom.version}.jar ${env.PROJECT_NAME}/${env.PROJECT_NAME}.jar"),
sshTransfer(
execCommand: "/etc/init.d/${env.PROJECT_NAME} restart -Dspring.profiles.active=${PROFILE}"
)
])
])
}
}
}
}这个很管用。我在下配置了一个SSH服务器,通过SSH配置系统>> >>发布。
现在我想在多台服务器上部署。假设我根据名称服务器-instance1、server-instance2创建多个ssh配置。如何使这个Jenkins作业参数化?我试着检查复选框并选择一个选择参数。但是,我无法弄清楚如何使这个下拉列表的值来自SSH服务器列表(而不是硬编码)。
我尝试了一些这里提到的东西(如何通过SSH插件标签字段控制Jenkins中的参数化发布)。不幸的是,这些文章中没有一篇是从管道中谈论这一点的。
任何帮助都是非常感谢的。
发布于 2021-09-01 09:15:32
如果您想动态选择SSH服务器名,可以使用扩展选择参数插件来执行groovy代码,该代码将为参数创建选项。
在插件中,您可以使用以下代码获取值:
import jenkins.model.*
def publish_ssh = Jenkins.instance.getDescriptor("jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin")
configurations = publish_ssh.getHostConfigurations() // get all server configurations
return configurations.collect { it.name } // return the list of all servers若要在管道中配置此参数,可以对脚本管道使用以下代码:
properties([
parameters([
extendedChoice(name: 'SERVER', type: 'PT_SINGLE_SELECT', description: 'Server for publishing', visibleItemCount: 10,
groovyScript: '''
import jenkins.model.*
def publish_ssh = Jenkins.instance.getDescriptor("jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin")
return publish_ssh.getHostConfigurations() .collect { it.name }
''')
])
])或声明管道的下列代码:
pipeline {
agent any
parameters {
extendedChoice(name: 'SERVER', type: 'PT_SINGLE_SELECT', description: 'Server for publishing', visibleItemCount: 10,
groovyScript: '''
import jenkins.model.*
def publish_ssh = Jenkins.instance.getDescriptor("jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin")
return publish_ssh.getHostConfigurations() .collect { it.name }
''')
}
...
} 一旦定义了参数,只需在sshPublisher步骤中使用它:
sshPublisher(publishers: [sshPublisherDesc(configName: SERVER, transfers: ...使用扩展选择参数时可以使用的另一个选项是将其配置为多选择,而不是单选择,这样用户就可以选择多个服务器,并且可以使用平行选项并行发布所有选定的服务器。
https://stackoverflow.com/questions/69006002
复制相似问题