首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins在SSh管道上发布参数化

Jenkins在SSh管道上发布参数化
EN

Stack Overflow用户
提问于 2021-08-31 22:43:04
回答 1查看 1.3K关注 0票数 1

我正在使用Jenkins中的插件来部署jar文件,该文件是从构建过程创建的。我已经创建了这样一个管道

代码语言:javascript
复制
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中的参数化发布)。不幸的是,这些文章中没有一篇是从管道中谈论这一点的。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-01 09:15:32

如果您想动态选择SSH服务器名,可以使用扩展选择参数插件来执行groovy代码,该代码将为参数创建选项。

在插件中,您可以使用以下代码获取值:

代码语言:javascript
复制
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

若要在管道中配置此参数,可以对脚本管道使用以下代码:

代码语言:javascript
复制
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 }
            ''')
      ])
])

或声明管道的下列代码:

代码语言:javascript
复制
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步骤中使用它:

代码语言:javascript
复制
sshPublisher(publishers: [sshPublisherDesc(configName: SERVER, transfers: ...

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69006002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档