【发布时间】:2018-11-14 18:09:56
【问题描述】:
我已经根据 jenkins 的指令构建了一个 Jenkins docker,如下所示:
docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v /root/.ssh/id_rsa:/root/.ssh/id_rsa -v jenkins-home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
它按我的预期工作。
然后我设置了一个新的流水线作业,Jenkinsfile 简单如下:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
echo "Testing!"
}
}
stage('Deploy') {
steps {
sh "ssh docker@192.168.99.101 rm -rf /home/docker/wildfly_deployments/*"
sh "scp target/test-docker-app-1.0.war docker@192.168.99.101:/home/docker/wildfly_deployments/"
}
}
}
}
当我运行此作业时,在“部署”阶段,它会显示此错误消息
[test-docker-app] Running shell script
+ ssh docker@192.168.99.101 rm -rf /home/docker/wildfly_deployments/*
/var/jenkins_home/workspace/test-docker-app@tmp/durable-4cd12dd8/script.sh: line 1: ssh: not found
script returned exit code 127
我确信 Jenkins 容器可以执行 ssh 和 scp,因为我尝试在 Jenkins 容器中运行相同的命令,我工作了。
你知道我在 Jenkinsfile 中有什么问题吗?请帮忙
谢谢。
=================================
我在 jenkinsfile 中发现了问题,应该是:
pipeline {
agent any
stages {
stage('Build') {
agent {
docker {
image 'maven:3-alpine'
args '-v m2_repos:/root/.m2'
}
}
steps {
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
echo "Testing!"
}
}
stage('Deploy') {
steps {
sh "ssh docker@192.168.99.101 rm -rf /home/docker/wildfly_deployments/*"
sh "scp target/test-docker-app-1.0.war docker@192.168.99.101:/home/docker/wildfly_deployments/"
/*sh 'bash ./deploy.sh'*/
}
}
}
}
【问题讨论】:
-
尝试手动 ssh 到 docker 容器,
which ssh应该是绝对路径。例如 ; /path/to/ssh -
可以为jenkins配置shell stackoverflow.com/questions/12455932/…
-
@ThanhNguyenVan 感谢您的快速响应,但它不起作用。
标签: docker jenkins ssh jenkins-pipeline scp