【发布时间】:2019-08-08 17:25:53
【问题描述】:
我有一个非常基本的Jenkins pipeline,它构建了一个Java 项目并将工件部署到EC2 实例。
构建部分工作正常,但部署不工作,并给出与scp 相关的错误。
我将Jenkinsfile 中存在的整个scp 命令复制粘贴到Windows 命令提示符上,以查看它是否有效并将jar 复制到ec2 实例成功,它确实有效。
不知道为什么它不能通过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 ec2-user@35.175.125.176:/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
Jenkins 错误日志:
[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 ec2-user@35.175.125.176:/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
【问题讨论】:
-
听起来 scp 不在运行 Jenkins 的用户路径中
-
Jenkins位于同一台本地计算机上,即Windows 10。我用截图更新了我的原始问题,显示我可以使用SCP手动将JAR复制到EC2 -
Jenkins 是否使用您的用户 ID 运行?
scp是如何添加到 shell 的 PATH 环境中的? -
我刚刚看到它
scp是从 `C:\Windows\System32\OpenSSH' 中挑选出来的,我认为它可以与其他程序一起安装。我也将此文件夹添加到 PATH 变量中,然后刚刚再次运行构建作业,但没有运气。为什么 Jenkins 不能选择这个 scp.exe 而 Windows 命令提示符可以? Jenkins 中是否还有任何配置需要完成? -
是的,Jenkins 使用相同的用户 ID 运行,并且安装在同一台 Windows 10 机器上。
标签: amazon-web-services jenkins amazon-ec2 ssh jenkins-pipeline