执行Jenkins文件时,无法将'scp'识别为内部或外部命令

时间:2019-01-25 05:35:15

标签: amazon-web-services jenkins amazon-ec2 ssh jenkins-pipeline

我有一个非常基础的library(data.table) setDT(new_df)[, paste(inmethod[inerror==min(inerror)], collapse=", "), by=.(intype)] ,它构建了一个Jenkins pipeline项目,并将工件部署到一个Java实例。

构建部分可以正常工作,但是部署无法正常工作,并给出与EC2相关的错误。

我将scp中存在的整个scp命令复制粘贴到Jenkinsfile命令提示符下,以查看是否可行,并成功通过jar复制到Windows实例,它确实起作用。

enter image description here

不确定为什么无法通过ec2工作。

Jenkinsfile

Jenkins

Windows命令提示符:

pipeline {
        agent any
        tools {
            maven "Maven3"
        }
        stages {
            stage('Build and Deploy') {
                steps {
                    script {
                        def os = System.properties['os.name'].toLowerCase()
                        echo "OS: ${os}"                
                        if (os.contains("linux")) {
                          sh "mvn clean install -DskipTests" 
                        } else {
                          bat "mvn clean install -DskipTests"
                          bat "scp -i C:\\Users\\Nital\\.ssh\\LightsailDefaultKey-us-east-1.pem target\\helloworld-rest-app.jar ec2-user@35.175.125.176:/home/ec2-user/app-deploys"
                        }
                    }
                }
                post {
                    success {
                        echo 'Build and Deploy - SUCCESS'
                    }
                } 
            }
        }
    }

Jenkins错误日志:

C:\Users\Nital>scp
usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program] source ... target

4 个答案:

答案 0 :(得分:0)

在执行诸如scp等的任何命令之前添加此行。

PATH=/sbin:/usr/sbin:/usr/bin:/usr/local/bin

答案 1 :(得分:0)

这是因为可执行文件位于Windows System32目录中,并且由于安全方面的原因,无法从脚本访问该可执行文件。如果您将sshscp可执行文件复制到Windows目录之外,然后将新目录放入您的路径,则它应该可以工作。

答案 2 :(得分:-1)

如果您需要在Windows上scp,那么为什么不简单地使用pscp来实现呢?

安装PuTTY,其中还包括PSCP(适用于Windows的SCP)。

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

请为您的计算机(32位或64位)选择最新版本的MSI(“ Windows安装程序”)

如果要在Java程序中使用它,请参见以下示例:http://www.jcraft.com/jsch/examples/ScpFrom.java.html

答案 3 :(得分:-1)

用于在两个Linux / Unix计算机系统之间安全传输文件的Scp命令

  

scp命令的语法为:

scp [options] username1@source_host:directory1/filename1 username2@destination_host:directory2/filename2

并为了在Windows中使用scp命令,请使用pscp:

pscp c:\documents\info.txt userid@server.example.com:/tmp/foo/info.txt

请检查关节

https://it.cornell.edu/managed-servers/transfer-files-using-putty