Jenkins Publish Over SSh管道参数化



我在Jenkins中使用Publish over SSH插件来部署从构建过程中创建的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服务器配置在Manage Jenkins>>配置系统>通过SSH发布。

现在我想在多个服务器上部署。假设我通过名称server-instance1, server-instance2创建了多个ssh配置。我如何使这个Jenkins作业参数化?我试着检查复选框并选择一个选择参数。但是我不知道如何使这个下拉列表的值来自SSH服务器列表(而不是硬编码)

我尝试了这里提到的一些事情(如何在Jenkins中使用Publish over SSH插件's Label字段来控制参数化发布)。不幸的是,没有一篇文章讨论如何通过管道实现这一点。

任何帮助都非常感谢。

如果你想动态地选择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: ...

当使用扩展选择参数时,您可以拥有的另一个选项是将其配置为多选择而不是单选择,这样用户就可以选择多个服务器,并且您可以使用并行选项并行发布所有选择的服务器。

最新更新