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

时间:2018-02-14 11:58:56

标签: jenkins jenkins-plugins jenkins-pipeline

我想从Windows上托管的Jenkins通过SSH连接到Linux服务器并在linux机器上执行命令,我尝试通过ssh插件安装发布并测试全局配置中的连接,它运行正常,我不知道如何继续进行管道。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

如果您使用的是管道项目 Jenkinsfile ,那么您要做的就是进入Jenkins中的项目,然后单击“配置”。在配置的管道部分中,底部有一个链接“管道语法”。它将带您到片段生成器。它的自我解释,在我们的案例中,它允许生成“ ssh上的发布”片段,您可以将其添加到Jenkinsfile中(将其添加到阶段定义内的steps部分)。在生成器中,您可以定义要发布的内容,运行shell命令的选项等。source

答案 1 :(得分:2)

如果您正在寻找用于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主数据库,然后运行图表。

我在Publish_over_ssh插件配置部分(位于Manage Jenkins> Configure System下找到)中设置了

configName: "kubernetes_master",因此我可以引用它。它包括一个用户名,sshkey,目标主机名和目标的基本目录,我将其放置为/ opt / deploy。

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

希望有帮助。

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

答案 2 :(得分:0)

基于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
                )
              ]
            )
          }
        }
...

答案 3 :(得分:-1)

我不知道这会有多大帮助,但我找到了一个tutorial的东西应该有效,直到他们有更好的方法去做。