从Jenkins连接到EC2实例失败:主机密钥验证失败

时间:2018-06-03 19:36:56

标签: linux jenkins amazon-ec2 groovy devops

我第一次尝试使用Jenkins自动部署到EC2实例。

我在EC2实例中安装了tomcat8,并将tomcat8/webapps文件夹的权限更改为777($ chmod 777 webapps)。

来自EC2的.ssh位于known_hosts文件中。

我可以从我的控制台使用.warscp文件连接并复制到服务器文件夹中,但在自动化过程中它会失败。

$ scp -i /Users/Shared/Jenkins/aws.pem /Users/Shared/Jenkins/Home/jobs/fully-automated/builds/28/archive/webapp/target/webapp.war ec2-user@35.158.118.56:/var/lib/tomcat8/webapps

== copies the *.war file to tomcat8/webapps ==

在詹金斯,我得到了:

[Deploy to Staging] + scp -i /Users/Shared/Jenkins/aws.pem /Users/Shared/Jenkins/Home/jobs/fully-automated/builds/28/archive/webapp/target/webapp.war ec2-user@35.158.118.56:/var/lib/tomcat8/webapps
[Deploy to Staging] Host key verification failed.
[Deploy to Staging] lost connection

来自控制台和Groovy Jenkins文件的命令完全相同。为什么它可以从我的机器而不是Jenkins工作?

Jenkinsfile:

pipeline {
  agent any

  tools {
    maven 'localMaven'
  }

  parameters {
    string(name: 'production', defaultValue: '54.93.78.130', description: 'Staging server')
    string(name: 'staging', defaultValue: '35.158.118.56', description: 'Production server')
  }

  triggers {
    pollSCM('* * * * *')
  }

  stages {
    stage('Build') {
      steps {
        sh 'mvn clean package'
      }
      post {
        success {
          echo 'Now Archiving...'
          archiveArtifacts artifacts: '**/target/*.war'
        }
      }
    }

    stage('Deployments') {
      parallel {
        stage('Deploy to Staging') {
          steps {
            sh "scp -i /Users/Shared/Jenkins/aws.pem /Users/Shared/Jenkins/Home/jobs/fully-automated/builds/28/archive/webapp/target/*.war ec2-user@${params.staging}:/var/lib/tomcat8/webapps"
          }
        }

        stage('Deploy to Production') {
          steps {
            sh "scp -i /Users/Shared/Jenkins/aws.pem /Users/Shared/Jenkins/Home/jobs/fully-automated/builds/28/archive/webapp/target/*.war ec2-user@${params.production}:/var/lib/tomcat8/webapps"
          }
        }
      }
    } 
  }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是许多人常犯的错误。您已经允许您的" USERNAME"访问EC2而不是" JENKINS"用户。只是做同样的事情,但这次是为Jenkins用户做的。

詹金斯拥有自己的用户名为" jenkins"你可以在用户文件夹中观察,在这里创建ssh密钥并将其传递给EC2,一切都应该正常工作:)

对于确认,只需使用您的用户名ssh进入服务器并尝试使用Jenkins用户名,它将无法工作,直到您执行上述更改

希望这会有所帮助:)