在Jenkinsfile中的远程主机上执行命令

时间:2019-03-20 12:04:58

标签: jenkins jenkins-pipeline jenkins-cli

我正在尝试SSH到远程主机,然后在远程主机的外壳上执行某些命令。以下是我的管道代码。

pipeline {
    agent any
    environment {
        // comment added
         APPLICATION = 'app'
         ENVIRONMENT = 'dev'
         MAINTAINER_NAME = 'jenkins'
         MAINTAINER_EMAIL = 'jenkins@email.com'
    }
    stages {
         stage('clone repository') {
             steps {
                 // cloning repo
                 checkout scm
             }
         }
         stage('Build Image') {
             steps {
                 script {
                     sshagent(credentials : ['jenkins-pem']) {
                        sh "echo pwd"
                        sh 'ssh -t -t ubuntu@xx.xxx.xx.xx -o StrictHostKeyChecking=no'
                        sh "echo pwd"
                        sh 'sudo -i -u root'
                        sh 'cd /opt/docker/web'
                        sh 'echo pwd'
                    }
                 }
             }
         }
     }
}

但是运行此作业后,它会成功执行sh 'ssh -t -t ubuntu@xx.xxx.xx.xx -o StrictHostKeyChecking=no',但会在此停止并不再执行任何其他命令。我想执行在远程主机外壳中的ssh命令之后编写的命令。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我会尝试这样的事情:

sshagent(credentials : ['jenkins-pem']) {
  sh "echo pwd"
  sh 'ssh -t -t ubuntu@xx.xxx.xx.xx -o StrictHostKeyChecking=no "echo pwd && sudo -i -u root && cd /opt/docker/web && echo pwd"'
}

答案 1 :(得分:0)

我解决了这个问题

script 
{
    sh """ssh -tt login@host << EOF 
    your command
    exit
    EOF"""
}