执行Jenkins文件时,'scp'不会被识别为内部或外部命令

问题描述 投票:0回答:4

我有一个非常基本的Jenkins pipeline,它构建了一个Java项目并将该工件部署到EC2实例。

构建部分工作正常,但部署不起作用,并给出与scp相关的错误。

我将我scp中存在的整个Jenkinsfile命令粘贴到Windows命令提示符上以查看它是否有效并通过jar复制到ec2实例成功,它确实有效。

enter image description here

不知道为什么它不通过Jenkins工作。

Jenkinsfile

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 [email protected]:/home/ec2-user/app-deploys"
                        }
                    }
                }
                post {
                    success {
                        echo 'Build and Deploy - SUCCESS'
                    }
                } 
            }
        }
    }

Windows命令提示符:

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

詹金斯错误日志:

[INFO] Installing C:\Program Files (x86)\Jenkins\workspace\helloworld-rest-app-build\pom.xml to C:\Windows\system32\config\systemprofile\.m2\repository\com\example\helloworld-rest-app\0.0.1-SNAPSHOT\helloworld-rest-app-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.991 s
[INFO] Finished at: 2019-01-25T00:11:10-05:00
[INFO] ------------------------------------------------------------------------
[Pipeline] bat

C:\Program Files (x86)\Jenkins\workspace\helloworld-rest-app-build>scp -i C:\Users\Nital\.ssh\LightsailDefaultKey-us-east-1.pem target\hellworld-rest-app.jar [email protected]:/home/ec2-user/app-deploys 
'scp' is not recognized as an internal or external command,
operable program or batch file.
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
amazon-web-services jenkins amazon-ec2 ssh jenkins-pipeline
4个回答
0
投票

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

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

0
投票

这是因为可执行文件位于Windows System32目录中,并且出于安全考虑,无法从脚本访问。如果你将sshscp可执行文件从windows目录中复制出来并将新目录放入你的路径中它应该可以工作。


-1
投票

如果你需要来自Windows的scp,那么为什么不简单地使用pscp来实现这一目标呢?

安装PuTTY,其中还包括PSCP(SCP for Windows)。

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

请为您的计算机选择最新版本的MSI('Windows Installer')(32位或64位)

如果你想在Java程序中使用它,那么这是一个例子:http://www.jcraft.com/jsch/examples/ScpFrom.java.html


-1
投票

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

scp命令的语法是:

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

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

pscp c:\documents\info.txt [email protected]:/tmp/foo/info.txt

请通过关节

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

© www.soinside.com 2019 - 2024. All rights reserved.