如何在管道中使用SSH插件发布



我想从托管在Windows上的Jenkins到Linux服务器,并在Linux计算机中执行命令,我尝试通过SSH插件安装发布,并在Global Config中测试了连接,并且它可以工作很好,我不知道该如何进行管道。任何帮助将不胜感激。

如果您使用的是 Pipeline Project 和A Jenkinsfile ,那么您需要做的就是进入Jenkins和Jenkins和单击配置。在配置的管道部分中,在底部有一个链接"管道语法"。它将带您进入 simpet Generator 。它的自我解释性,在我们的情况下,它允许您将"通过SSH"片段添加到Jenkinsfile(将其添加到舞台定义中的步骤部分(。在发电机中,您可以定义要发布的内容,运行shell命令的选项等。来源

如果您正在寻找用于publish-over-ssh的声明管道(jenkinsfile(的语法(而不是脚本化管道,这就是我所能找到的(。这是最终对我有用的。

pipeline{
  agent any
  environment {
    RELEASENAME="yourProject-ci"
  }
  stages{
    stage("Get the charts..."){
        steps {checkout scm}
    }
    stage('SSH transfer') {
        steps([$class: 'BapSshPromotionPublisherPlugin']) {
            sshPublisher(
                continueOnError: false, failOnError: true,
                publishers: [
                    sshPublisherDesc(
                        configName: "kubernetes_master",
                        verbose: true,
                        transfers: [
                            sshTransfer(execCommand: "/bin/rm -rf /opt/deploy/helm"),
                            sshTransfer(sourceFiles: "helm/**",)
                        ]
                    )
                ]
            )
        }
    }
    stage('Deploy Helm Scripts'){
        steps([$class: 'BapSshPromotionPublisherPlugin']) {
            sshPublisher(
                continueOnError: false, failOnError: true,
                publishers: [
                    sshPublisherDesc(
                        configName: "kubernetes_master",
                        verbose: true,
                        transfers: [
                            sshTransfer(execCommand: "cd /opt/deploy/helm;helm upgrade ${RELEASENAME} . --install"),
                        ]
                    )
                ]
            )
        }
    }
  }
}

我有一个首先发生的结帐,然后我将一些头盔图从结帐复制到我的Kubernetes Master,然后运行图表。

configName: "kubernetes_master"是我在publish_over_ssh插件配置部分中设置的东西(在管理jenkins> Configure System下找到(,因此我可以参考它。它包括一个用户名,sshkey,目标主机名和我列为/opt/exploy的目的地的基本目录。

fyi execCommand不使用基本目录...它假定您将使用完整的路径。

希望会有所帮助。

编辑:我可能应该提到,SSHPUBLISHER的选择要比我使用的更多。您可以在这里找到它们:https://jenkins.io/doc/pipeline/steps/publish-over-ssh/

基于Levis答案,以下对我有用。

stage('Deploy') {
  agent any
  steps {
    sh 'mv target/my-app-0.0.1-SNAPSHOT.jar my-app.jar'
    sshPublisher(
      continueOnError: false, 
      failOnError: true,
      publishers: [
        sshPublisherDesc(
          configName: "my-ssh-connection",
          transfers: [sshTransfer(sourceFiles: 'my-app.jar')],
          verbose: true
        )
      ]
    )
  }
}

我前一次得到了这个问题,这是答案。根据您的要求更改代码。

pipeline {
    agent any
    options { timestamps () }
    stages {
        stage('Publish over ssh plugin in pipeline') {
            steps([$class: 'BapSshPromotionPublisherPlugin']) {
                script {
                    List SERVERS_LIST = ["Server_1", "Server_2"]
                    for(cr_server in SERVERS_LIST){
                        sshPublisher(
                            publishers: [
                                sshPublisherDesc(
                                    configName: cr_server, 
                                    transfers: [
                                        sshTransfer(
                                            cleanRemote: false, 
                                            excludes: '', 
                                            execCommand: '', 
                                            execTimeout: 120000, 
                                            flatten: false, 
                                            makeEmptyDirs: false, 
                                            noDefaultExcludes: false, 
                                            patternSeparator: '[, ]+', 
                                            remoteDirectory: '', 
                                            remoteDirectorySDF: false, 
                                            removePrefix: '', 
                                            sourceFiles: '**/*'
                                        )
                                    ], 
                                    usePromotionTimestamp: false, 
                                    useWorkspaceInPromotion: false, 
                                    verbose: false
                                )
                            ]
                        )
                    }
                }
            }
        } 
    }
}

我不知道这会有多帮助,但是我找到了一个应该有效的教程,直到他们有一种更好的方法。

最新更新